Do not send release key event, if client is ungrabbed or dead 56/121856/2
authorJengHyun Kang <jhyuni.kang@samsung.com>
Wed, 29 Mar 2017 08:08:41 +0000 (17:08 +0900)
committerJengHyun Kang <jhyuni.kang@samsung.com>
Wed, 29 Mar 2017 08:08:43 +0000 (17:08 +0900)
Change-Id: I1dc4dbd50553fa09169118c2f5aeee01efeea153

src/e_mod_keyrouter_events.c

index 62f8a36..4207189 100644 (file)
@@ -137,17 +137,26 @@ _e_keyrouter_send_key_events_release(int type, Ecore_Event_Key *ev)
         res = _e_keyrouter_send_key_event(type, key_node_data->surface, key_node_data->wc, ev,
                                           key_node_data->focused, TIZEN_KEYROUTER_MODE_PRESSED);
 
-        pid = e_keyrouter_util_get_pid(key_node_data->wc, key_node_data->surface);
-        cmd = e_keyrouter_util_cmd_get_from_pid(pid);
-        pname = e_keyrouter_util_process_name_get_from_cmd(cmd);
-        KLINF("Release Pair : %s(%s:%d)(Focus: %d)(Status: %d) => wl_surface (%p) wl_client (%p) (pid: %d) (pname: %s)",
-                 ((ECORE_EVENT_KEY_DOWN == type) ? "Down" : "Up"), ev->keyname, ev->keycode, key_node_data->focused,
-                 key_node_data->status, key_node_data->surface, key_node_data->wc, pid, pname ?: "Unknown");
+        if (key_node_data->status == E_KRT_CSTAT_ALIVE)
+          {
+             pid = e_keyrouter_util_get_pid(key_node_data->wc, key_node_data->surface);
+             cmd = e_keyrouter_util_cmd_get_from_pid(pid);
+             pname = e_keyrouter_util_process_name_get_from_cmd(cmd);
+             KLINF("Release Pair : %s(%s:%d)(Focus: %d)(Status: %d) => wl_surface (%p) wl_client (%p) (pid: %d) (pname: %s)",
+                      ((ECORE_EVENT_KEY_DOWN == type) ? "Down" : "Up"), ev->keyname, ev->keycode, key_node_data->focused,
+                      key_node_data->status, key_node_data->surface, key_node_data->wc, pid, pname ?: "Unknown");
+             if(pname) E_FREE(pname);
+             if(cmd) E_FREE(cmd);
+          }
+        else
+          {
+             KLINF("Release Pair : %s(%s:%d)(Focus: %d)(Status: %d) => wl_surface (%p) wl_client (%p) process is ungrabbed / dead",
+                      ((ECORE_EVENT_KEY_DOWN == type) ? "Down" : "Up"), ev->keyname, ev->keycode, key_node_data->focused,
+                      key_node_data->status, key_node_data->surface, key_node_data->wc);
+          }
 
         if (key_node_data->focused && key_node_data->status != E_KRT_CSTAT_ALIVE) ev->data = (void *)0x1;
 
-        if(pname) E_FREE(pname);
-        if(cmd) E_FREE(cmd);
         E_FREE(key_node_data);
         if (res == EINA_FALSE) ret = EINA_FALSE;
      }