From fdd4d50146281b415f5cb67e220bbe2f39244cd9 Mon Sep 17 00:00:00 2001 From: Gwanglim Lee Date: Mon, 14 Apr 2014 08:32:51 -0400 Subject: [PATCH] Fixed a problem with e wl server that sent invalid key value to wl client. (server-side) Summary: This problem occurred due to xkb_keysym_t value of libxkbcommon by e wl server. e wl server should pass keycode from evdev input device on to wl client. In order that e wl server receives valid keycode Ecore_Event_Key should have an extended data member. This patch should be applied with client side patch (efl). Test Plan: run e wl server -> create wl client -> type keys Reviewers: raster, devilhorns, zmike Reviewed By: devilhorns CC: cedric Differential Revision: https://phab.enlightenment.org/D713 --- src/modules/wl_desktop_shell/e_mod_main.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/modules/wl_desktop_shell/e_mod_main.c b/src/modules/wl_desktop_shell/e_mod_main.c index 52d47956e..6a2d83e2f 100644 --- a/src/modules/wl_desktop_shell/e_mod_main.c +++ b/src/modules/wl_desktop_shell/e_mod_main.c @@ -1362,8 +1362,13 @@ _e_wl_shell_shell_surface_cb_key_up(void *data, Evas *e EINA_UNUSED, Evas_Object /* if we have a grab, send this key to it */ if (grab) - grab->interface->key(grab, ev->timestamp, key, - WL_KEYBOARD_KEY_STATE_RELEASED); + { + /* send keycode from evdev */ + grab->interface->key(grab, + ev->timestamp, + ev->keycode ? ev->keycode : key, + WL_KEYBOARD_KEY_STATE_RELEASED); + } /* update xkb key state */ xkb_state_update_key(_e_wl_comp->input->xkb.state, key + 8, XKB_KEY_UP); @@ -1437,8 +1442,13 @@ _e_wl_shell_shell_surface_cb_key_down(void *data, Evas *e EINA_UNUSED, Evas_Obje /* if we have a grab, send this key to it */ if (grab) - grab->interface->key(grab, ev->timestamp, key, - WL_KEYBOARD_KEY_STATE_PRESSED); + { + /* send keycode from evdev */ + grab->interface->key(grab, + ev->timestamp, + ev->keycode ? ev->keycode : key, + WL_KEYBOARD_KEY_STATE_PRESSED); + } /* update xkb key state */ xkb_state_update_key(_e_wl_comp->input->xkb.state, key + 8, XKB_KEY_DOWN);