From baadd14722f1f170fa28b282984d7034af49c518 Mon Sep 17 00:00:00 2001 From: jeon Date: Wed, 4 Mar 2020 17:40:20 +0900 Subject: [PATCH] e_comp_wl_input: add utility APIs using keymap - e_comp_wl_input_keymap_keyname_to_keycode(), e_comp_wl_input_keymap_keycode_to_keyname() Change-Id: If4ad3bdf498727ec5d838ae143ac5093617010d9 --- src/bin/e_comp_wl.c | 57 +------------------------ src/bin/e_comp_wl_input.c | 75 +++++++++++++++++++++++++++++++++ src/bin/e_comp_wl_input.h | 3 ++ src/bin/e_devicemgr_input.c | 54 ------------------------ src/bin/e_devicemgr_inputgen.c | 2 +- src/bin/e_devicemgr_private.h | 1 - src/bin/e_keyrouter.c | 4 +- src/bin/e_keyrouter_events.c | 77 +--------------------------------- src/bin/e_keyrouter_private.h | 2 - 9 files changed, 84 insertions(+), 191 deletions(-) diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index 4c084f80e1..b9b069afe7 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -5147,61 +5147,6 @@ e_comp_wl_key_send(E_Client *ec, int keycode, Eina_Bool pressed, Ecore_Device *d return EINA_TRUE; } -typedef struct _keycode_map{ - xkb_keysym_t keysym; - xkb_keycode_t keycode; -} keycode_map; - -static void -find_keycode(struct xkb_keymap *keymap, xkb_keycode_t key, void *data) -{ - keycode_map *found_keycodes = (keycode_map *)data; - xkb_keysym_t keysym = found_keycodes->keysym; - int nsyms = 0; - const xkb_keysym_t *syms_out = NULL; - - nsyms = xkb_keymap_key_get_syms_by_level(keymap, key, 0, 0, &syms_out); - if (nsyms && syms_out) - { - if (*syms_out == keysym) - { - found_keycodes->keycode = key; - } - } -} - -static int -_e_comp_wl_keycode_get_from_keysym(struct xkb_keymap *keymap, xkb_keysym_t keysym) -{ - keycode_map found_keycodes = {0,}; - found_keycodes.keysym = keysym; - xkb_keymap_key_for_each(keymap, find_keycode, &found_keycodes); - - return found_keycodes.keycode; -} - -static int -_e_comp_wl_keycode_get_from_string(char * name) -{ - struct xkb_keymap *keymap = NULL; - xkb_keysym_t keysym = 0x0; - int keycode = 0; - - keymap = e_comp_wl->xkb.keymap; - 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); - - keycode = _e_comp_wl_keycode_get_from_keysym(keymap, keysym); - - return keycode; - -finish: - return 0; -} - - EINTERN Eina_Bool e_comp_wl_key_cancel(E_Client *ec, int keycode, Ecore_Device *dev, uint32_t time) { @@ -5217,7 +5162,7 @@ e_comp_wl_key_cancel(E_Client *ec, int keycode, Ecore_Device *dev, uint32_t time EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl->xkb.keymap, EINA_FALSE); - cancel_keycode = _e_comp_wl_keycode_get_from_string("Cancel"); + cancel_keycode = e_comp_wl_input_keymap_keyname_to_keycode("Cancel"); if (cancel_keycode == XKB_KEYCODE_INVALID) { ELOGF("Key", "Failed to send key cancel for %d key, Cancel key is not supported\n", ec, keycode); diff --git a/src/bin/e_comp_wl_input.c b/src/bin/e_comp_wl_input.c index 4121660616..7184436297 100644 --- a/src/bin/e_comp_wl_input.c +++ b/src/bin/e_comp_wl_input.c @@ -1071,3 +1071,78 @@ e_comp_wl_input_keyboard_repeat_set(int delay, int rate) e_comp_wl->kbd.repeat_delay); } } + +typedef struct _keycode_map{ + xkb_keysym_t keysym; + xkb_keycode_t keycode; +} keycode_map; + +static void +find_keycode(struct xkb_keymap *keymap, xkb_keycode_t key, void *data) +{ + keycode_map *found_keycodes = (keycode_map *)data; + xkb_keysym_t keysym = found_keycodes->keysym; + int nsyms = 0; + const xkb_keysym_t *syms_out = NULL; + + nsyms = xkb_keymap_key_get_syms_by_level(keymap, key, 0, 0, &syms_out); + if (nsyms && syms_out) + { + if (*syms_out == keysym) + { + found_keycodes->keycode = key; + } + } +} + +int +_e_comp_wl_input_keymap_keysym_to_keycode(struct xkb_keymap *keymap, xkb_keysym_t keysym) +{ + keycode_map found_keycodes = {0,}; + found_keycodes.keysym = keysym; + xkb_keymap_key_for_each(keymap, find_keycode, &found_keycodes); + + return found_keycodes.keycode; +} + +E_API int +e_comp_wl_input_keymap_keyname_to_keycode(const char * name) +{ + struct xkb_keymap *keymap = NULL; + xkb_keysym_t keysym = 0x0; + int keycode = 0; + + EINA_SAFETY_ON_NULL_RETURN_VAL(name, 0); + EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl, 0); + + keymap = e_comp_wl->xkb.keymap; + 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); + + keycode = _e_comp_wl_input_keymap_keysym_to_keycode(keymap, keysym); + + return keycode; + +finish: + return 0; +} + +E_API char * +e_comp_wl_input_keymap_keycode_to_keyname(int keycode) +{ + struct xkb_state *state; + xkb_keysym_t sym = XKB_KEY_NoSymbol; + char name[256] = {0, }; + + EINA_SAFETY_ON_FALSE_RETURN_VAL(8 <= keycode, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl->xkb.state, NULL); + + state = e_comp_wl->xkb.state; + sym = xkb_state_key_get_one_sym(state, keycode); + xkb_keysym_get_name(sym, name, sizeof(name)); + + return strdup(name); +} diff --git a/src/bin/e_comp_wl_input.h b/src/bin/e_comp_wl_input.h index 9fdc179890..fedcc6a91b 100644 --- a/src/bin/e_comp_wl_input.h +++ b/src/bin/e_comp_wl_input.h @@ -41,5 +41,8 @@ E_API const char *e_comp_wl_input_keymap_default_options_get(void); E_API void e_comp_wl_input_keyboard_repeat_set(int delay, int rate); +E_API int e_comp_wl_input_keymap_keyname_to_keycode(const char * name); +E_API char *e_comp_wl_input_keymap_keycode_to_keyname(int keycode); + # endif #endif diff --git a/src/bin/e_devicemgr_input.c b/src/bin/e_devicemgr_input.c index aa960e5a14..b101546155 100644 --- a/src/bin/e_devicemgr_input.c +++ b/src/bin/e_devicemgr_input.c @@ -62,60 +62,6 @@ e_devicemgr_input_pointer_warp(struct wl_client *client, struct wl_resource *res return ret; } -typedef struct _keycode_map{ - xkb_keysym_t keysym; - xkb_keycode_t keycode; -} keycode_map; - -static void -find_keycode(struct xkb_keymap *keymap, xkb_keycode_t key, void *data) -{ - keycode_map *found_keycodes = (keycode_map *)data; - xkb_keysym_t keysym = found_keycodes->keysym; - int nsyms = 0; - const xkb_keysym_t *syms_out = NULL; - - if (found_keycodes->keycode) return; - - nsyms = xkb_keymap_key_get_syms_by_level(keymap, key, 0, 0, &syms_out); - if (nsyms && syms_out) - { - if (*syms_out == keysym) - { - found_keycodes->keycode = key; - } - } -} - -static void -_e_devicemgr_keycode_from_keysym(struct xkb_keymap *keymap, xkb_keysym_t keysym, xkb_keycode_t *keycode) -{ - keycode_map found_keycodes = {0,}; - found_keycodes.keysym = keysym; - xkb_keymap_key_for_each(keymap, find_keycode, &found_keycodes); - - *keycode = found_keycodes.keycode; -} - -int -e_devicemgr_keycode_from_string(const char *keyname) -{ - xkb_keysym_t keysym = 0x0; - xkb_keycode_t keycode = 0; - - if (!strncmp(keyname, "Keycode-", sizeof("Keycode-")-1)) - { - keycode = atoi(keyname+8); - } - else - { - keysym = xkb_keysym_from_name(keyname, XKB_KEYSYM_NO_FLAGS); - _e_devicemgr_keycode_from_keysym(e_comp_wl->xkb.keymap, keysym, &keycode); - } - - return keycode; -} - Eina_Bool e_devicemgr_detent_is_detent(const char *name) { diff --git a/src/bin/e_devicemgr_inputgen.c b/src/bin/e_devicemgr_inputgen.c index 1c8d5d40a7..a844a0cf1b 100644 --- a/src/bin/e_devicemgr_inputgen.c +++ b/src/bin/e_devicemgr_inputgen.c @@ -79,7 +79,7 @@ e_devicemgr_inputgen_key_event_add(const char *key, Eina_Bool pressed, char *ide e = E_NEW(Ecore_Event_Key, 1); EINA_SAFETY_ON_NULL_RETURN_VAL(e, TIZEN_INPUT_DEVICE_MANAGER_ERROR_NO_SYSTEM_RESOURCES); - keycode = e_devicemgr_keycode_from_string(key); + keycode = e_comp_wl_input_keymap_keyname_to_keycode(key); if (keycode <= 0) goto finish; e->keyname = eina_stringshare_add(key); diff --git a/src/bin/e_devicemgr_private.h b/src/bin/e_devicemgr_private.h index bc0a2294cb..b9c8eeb7fb 100644 --- a/src/bin/e_devicemgr_private.h +++ b/src/bin/e_devicemgr_private.h @@ -175,7 +175,6 @@ int e_devicemgr_create_virtual_device(Ecore_Device_Class clas, const char *name) void e_devicemgr_destroy_virtual_device(int uinp_fd); Eina_Bool e_devicemgr_strcmp(const char *dst, const char *src); -int e_devicemgr_keycode_from_string(const char *keyname); int e_devicemgr_input_pointer_warp(struct wl_client *client, struct wl_resource *resource, struct wl_resource *surface, wl_fixed_t x, wl_fixed_t y); void e_devicemgr_wl_detent_send_event(int detent); Eina_Bool e_devicemgr_input_init(void); diff --git a/src/bin/e_keyrouter.c b/src/bin/e_keyrouter.c index 1e922fb19e..bba5e54bf8 100644 --- a/src/bin/e_keyrouter.c +++ b/src/bin/e_keyrouter.c @@ -134,7 +134,7 @@ _e_keyrouter_info_print(void *data, const char *log_path) { if (!krt->HardKeys[i].keycode) continue; - keyname = e_keyrouter_util_keyname_get_from_keycode(i); + keyname = e_comp_wl_input_keymap_keycode_to_keyname(i); fprintf(log_fl, " Key [%3d], Keyname: %s\n", i, keyname); @@ -211,7 +211,7 @@ _e_keyrouter_keygrab_print(void *data, const char *log_path) !krt->HardKeys[i].shared_ptr) continue; - keyname = e_keyrouter_util_keyname_get_from_keycode(i); + keyname = e_comp_wl_input_keymap_keycode_to_keyname(i); fprintf(log_fl, " [ Keycode: %d, Keyname: %s ]\n", i, keyname); diff --git a/src/bin/e_keyrouter_events.c b/src/bin/e_keyrouter_events.c index 132f17bf7e..4eede2c764 100644 --- a/src/bin/e_keyrouter_events.c +++ b/src/bin/e_keyrouter_events.c @@ -100,7 +100,7 @@ _e_keyrouter_key_create(char *keyname) key_data = E_NEW(E_Keyrouter_Event_Data, 1); EINA_SAFETY_ON_NULL_GOTO(key_data, failed); - keycode = e_keyrouter_util_keycode_get_from_string(keyname); + keycode = e_comp_wl_input_keymap_keyname_to_keycode(keyname); EINA_SAFETY_ON_FALSE_GOTO((0 < keycode && keycode <= krt->max_tizen_hwkeys), failed); ev_key->key = (char *)eina_stringshare_add(keyname); @@ -156,7 +156,7 @@ _e_keyrouter_key_cancel(int keycode) key_cancel = _e_keyrouter_key_create("Cancel"); EINA_SAFETY_ON_NULL_RETURN(key_cancel); - keyname = e_keyrouter_util_keyname_get_from_keycode(keycode); + keyname = e_comp_wl_input_keymap_keycode_to_keyname(keycode); key_release = _e_keyrouter_key_create(keyname); EINA_SAFETY_ON_NULL_GOTO(key_release, failed); @@ -906,79 +906,6 @@ e_keyrouter_util_cmd_get_from_pid(int pid) return NULL; } -typedef struct _keycode_map{ - xkb_keysym_t keysym; - xkb_keycode_t keycode; -}keycode_map; - -static void -find_keycode(struct xkb_keymap *keymap, xkb_keycode_t key, void *data) -{ - keycode_map *found_keycodes = (keycode_map *)data; - xkb_keysym_t keysym = found_keycodes->keysym; - int nsyms = 0; - const xkb_keysym_t *syms_out = NULL; - - nsyms = xkb_keymap_key_get_syms_by_level(keymap, key, 0, 0, &syms_out); - if (nsyms && syms_out) - { - if (*syms_out == keysym) - { - found_keycodes->keycode = key; - } - } -} - -int -_e_keyrouter_keycode_get_from_keysym(struct xkb_keymap *keymap, xkb_keysym_t keysym) -{ - keycode_map found_keycodes = {0,}; - found_keycodes.keysym = keysym; - xkb_keymap_key_for_each(keymap, find_keycode, &found_keycodes); - - return found_keycodes.keycode; -} - -int -e_keyrouter_util_keycode_get_from_string(char * name) -{ - struct xkb_keymap *keymap = NULL; - xkb_keysym_t keysym = 0x0; - int keycode = 0; - - keymap = e_comp_wl->xkb.keymap; - 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); - - keycode = _e_keyrouter_keycode_get_from_keysym(keymap, keysym); - - KLDBG("request name: %s, return value: %d", name, keycode); - - return keycode; - -finish: - return 0; -} - -char * -e_keyrouter_util_keyname_get_from_keycode(int keycode) -{ - struct xkb_state *state; - xkb_keysym_t sym = XKB_KEY_NoSymbol; - char name[256] = {0, }; - - EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl->xkb.state, NULL); - - state = e_comp_wl->xkb.state; - sym = xkb_state_key_get_one_sym(state, keycode); - xkb_keysym_get_name(sym, name, sizeof(name)); - - return strdup(name); -} - char * e_keyrouter_util_process_name_get_from_cmd(char *cmd) { diff --git a/src/bin/e_keyrouter_private.h b/src/bin/e_keyrouter_private.h index 0cb0e162f1..5bba5937c8 100644 --- a/src/bin/e_keyrouter_private.h +++ b/src/bin/e_keyrouter_private.h @@ -108,8 +108,6 @@ Eina_Bool e_keyrouter_process_key_event(void *event, int type); struct wl_resource *e_keyrouter_util_get_surface_from_eclient(E_Client *client); int e_keyrouter_util_get_pid(struct wl_client *client, struct wl_resource *surface); char *e_keyrouter_util_cmd_get_from_pid(int pid); -int e_keyrouter_util_keycode_get_from_string(char *name); -char *e_keyrouter_util_keyname_get_from_keycode(int keycode); char *e_keyrouter_util_process_name_get_from_cmd(char *cmd); const char *e_keyrouter_mode_to_string(uint32_t mode); -- 2.34.1