Fixed a problem with e wl server that sent invalid key value to wl client. (server...
authorGwanglim Lee <gl77.lee@samsung.com>
Mon, 14 Apr 2014 12:32:51 +0000 (08:32 -0400)
committerMike Blumenkrantz <zmike@samsung.com>
Mon, 14 Apr 2014 12:32:51 +0000 (08:32 -0400)
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

index 52d47956e4635dd42ca6a5a9b347b99b2ad8cf3c..6a2d83e2f3da7dfbbcc3a9c8209aabbc64116f51 100644 (file)
@@ -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);