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);
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);
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);
}