e_comp_wl: check Keycode- prefix to swap keycode and keyname 92/227092/2
authorjeon <jhyuni.kang@samsung.com>
Mon, 9 Mar 2020 12:34:41 +0000 (21:34 +0900)
committerjeon <jhyuni.kang@samsung.com>
Tue, 10 Mar 2020 05:30:48 +0000 (14:30 +0900)
Change-Id: I16283909bf3be0191b6d043a1ef2590f3ad7e6cf

src/bin/e_comp_wl_input.c

index 7184436297478e481b6608c497c211ffcc0ba749..a8409a0871553aa89219b5dba28fb49d7fa7092c 100644 (file)
@@ -1111,6 +1111,7 @@ e_comp_wl_input_keymap_keyname_to_keycode(const char * name)
    struct xkb_keymap *keymap = NULL;
    xkb_keysym_t keysym = 0x0;
    int keycode = 0;
+   char *name_tmp;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(name, 0);
    EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl, 0);
@@ -1119,7 +1120,21 @@ e_comp_wl_input_keymap_keyname_to_keycode(const char * name)
    EINA_SAFETY_ON_NULL_GOTO(keymap, finish);
 
    keysym = xkb_keysym_from_name(name, XKB_KEYSYM_NO_FLAGS);
-   EINA_SAFETY_ON_FALSE_GOTO(keysym != XKB_KEY_NoSymbol, finish);
+   if (keysym == XKB_KEY_NoSymbol)
+     {
+        if (strlen(name) <= sizeof("Keycode-")) goto finish;
+
+        if (!strncmp(name, "Keycode-", sizeof("Keycode-") - 1))
+          {
+             name_tmp = (char *)name + sizeof("Keycode-") - 1;
+             keycode = atoi(name_tmp);
+             if (keycode <= 8) goto finish;
+
+             return keycode;
+          }
+        else
+          goto finish;
+     }
 
    keycode = _e_comp_wl_input_keymap_keysym_to_keycode(keymap, keysym);
 
@@ -1142,7 +1157,12 @@ e_comp_wl_input_keymap_keycode_to_keyname(int keycode)
 
    state = e_comp_wl->xkb.state;
    sym = xkb_state_key_get_one_sym(state, keycode);
-   xkb_keysym_get_name(sym, name, sizeof(name));
+   if (sym == XKB_KEY_NoSymbol)
+     {
+        snprintf(name, sizeof(name), "Keycode-%u", keycode);
+     }
+   else
+     xkb_keysym_get_name(sym, name, sizeof(name));
 
    return strdup(name);
 }