Send key cancel events when the client request ungrab after key is pressed 73/92873/2
authorJengHyun Kang <jhyuni.kang@samsung.com>
Wed, 19 Oct 2016 07:49:30 +0000 (16:49 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Thu, 3 Nov 2016 05:21:12 +0000 (22:21 -0700)
Change-Id: Ie5cd1d30fa295c25d197833207d0058c3d25da48

src/e_mod_main_wl.c

index 27a067541b2c88a0a1fcae7dd84d1ca7bce808b6..eb6ebd278d2e89a5f102a08d9e7dad7aa688ba3a 100644 (file)
@@ -168,6 +168,8 @@ static void
 _e_keyrouter_cb_keygrab_unset(struct wl_client *client, struct wl_resource *resource, struct wl_resource *surface, uint32_t key)
 {
    int res = 0;
+   Eina_List *l = NULL;
+   E_Keyrouter_Key_List_NodePtr data = NULL;
 
    TRACE_INPUT_BEGIN(_e_keyrouter_cb_keygrab_unset);
    KLINF("Key ungrab request (client: %p, surface: %p, pid: %d, key:%d)", client, surface, e_keyrouter_util_get_pid(client, surface), key);
@@ -176,6 +178,20 @@ _e_keyrouter_cb_keygrab_unset(struct wl_client *client, struct wl_resource *reso
 
    TRACE_INPUT_END();
    tizen_keyrouter_send_keygrab_notify(resource, surface, key, TIZEN_KEYROUTER_MODE_NONE, res);
+   EINA_LIST_FOREACH(krt->HardKeys[key].press_ptr, l, data)
+     {
+        if (surface)
+          {
+             if (surface == data->surface)
+               {
+                  tizen_keyrouter_send_key_cancel(resource, key-8);
+               }
+          }
+        else if (client == data->wc)
+          {
+             tizen_keyrouter_send_key_cancel(resource, key-8);
+          }
+     }
 }
 
 /* tizen_keyrouter get_keygrab_status request handler */