}
static void
+feed_key_event(const char *keyname, const char *key, const char *string, int keycode, int state)
+{
+ Ecore_Event_Key *e = E_NEW(Ecore_Event_Key, 1);
+ if (!e) return;
+
+ e->keyname = (char *)eina_stringshare_add(keyname);
+ e->key = (char *)eina_stringshare_add(key);
+ e->string = (char *)eina_stringshare_add(string);
+ e->compose = (char *)eina_stringshare_add(e->string);
+
+ e->timestamp = 0; /* For distinguishing S/W keyboard event */
+ e->same_screen = 1;
+ e->keycode = keycode;
+
+ ecore_event_add(state ? ECORE_EVENT_KEY_DOWN : ECORE_EVENT_KEY_UP, e, _e_keyevent_free, NULL);
+}
+
+static void
_e_text_input_method_context_cb_keysym(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, uint32_t serial, uint32_t time, uint32_t sym, uint32_t state, uint32_t modifiers)
{
E_Input_Method_Context *context = wl_resource_get_user_data(resource);
else
{
char string[32], key[32], keyname[32];
- Ecore_Event_Key *e = NULL;
-
- memset(key, 0, sizeof(key));
- xkb_keysym_get_name(sym, key, sizeof(key));
memset(keyname, 0, sizeof(keyname));
xkb_keysym_get_name(sym, keyname, sizeof(keyname));
if (strcmp(keyname, "BackSpace") == 0)
{
+ /* backspace key should be supported in the multibutton entry of elementary
+ even though it losts focus */
+ memset(key, 0, sizeof(key));
+ xkb_keysym_get_name(sym, key, sizeof(key));
+
memset(string, 0, sizeof(string));
xkb_keysym_to_utf8(sym, string, 32);
- e = E_NEW(Ecore_Event_Key, 1);
- if (!e) return;
-
- e->keyname = (char *)eina_stringshare_add(keyname);
- e->key = (char *)eina_stringshare_add(key);
- e->string = (char *)eina_stringshare_add(string);
- e->compose = (char *)eina_stringshare_add(e->string);
-
- e->timestamp = 0; /* For distinguishing S/W keyboard event */
- e->same_screen = 1;
- e->keycode = 22; /* Backspace keycode */
-
if (state)
- ecore_event_add(ECORE_EVENT_KEY_DOWN, e, _e_keyevent_free, NULL);
- else
- ecore_event_add(ECORE_EVENT_KEY_UP, e, _e_keyevent_free, NULL);
+ {
+ /* Backspace keycode (22) */
+ feed_key_event(keyname, key, string, 22, 1); /* key down */
+ feed_key_event(keyname, key, string, 22, 0); /* key up */
+ }
}
}
}