From 29c21beb14eb66e2223fe103621d4795a678d1fa Mon Sep 17 00:00:00 2001 From: jeon Date: Mon, 9 Mar 2020 21:34:41 +0900 Subject: [PATCH] e_comp_wl: check Keycode- prefix to swap keycode and keyname Change-Id: I16283909bf3be0191b6d043a1ef2590f3ad7e6cf --- src/bin/e_comp_wl_input.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/bin/e_comp_wl_input.c b/src/bin/e_comp_wl_input.c index 7184436297..a8409a0871 100644 --- a/src/bin/e_comp_wl_input.c +++ b/src/bin/e_comp_wl_input.c @@ -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); } -- 2.34.1