From 6685c2d8c6ff0b18f9533a0531d7d68d2cdf62db Mon Sep 17 00:00:00 2001 From: JengHyun Kang Date: Wed, 27 Apr 2016 22:04:26 +0900 Subject: [PATCH] Add a destroy listener if keyrouter a send key to focus - Do not deliver release key events if client is destroyed Change-Id: I29e9bfa0a4694976d085089ac61d0408d930ec59 --- src/e_mod_keyrouter_events.c | 1 + src/e_mod_keyrouter_list.c | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/e_mod_keyrouter_events.c b/src/e_mod_keyrouter_events.c index 800376c..73e7e1f 100644 --- a/src/e_mod_keyrouter_events.c +++ b/src/e_mod_keyrouter_events.c @@ -198,6 +198,7 @@ _e_keyrouter_send_key_events_press(int type, Ecore_Event_Key *ev) KLINF("SHARED [Focus client] : Key %s (%s:%d) ===> Surface (%p) (pid: %d)\n", ((ECORE_EVENT_KEY_DOWN == type) ? "Down" : "Up "), ev->keyname, ev->keycode, surface_focus, e_keyrouter_util_get_pid(NULL, surface_focus)); + e_keyrouter_add_surface_destroy_listener(surface_focus); EINA_LIST_FOREACH(krt->HardKeys[keycode].shared_ptr, l, key_node_data) { diff --git a/src/e_mod_keyrouter_list.c b/src/e_mod_keyrouter_list.c index 6f977f2..fe68890 100644 --- a/src/e_mod_keyrouter_list.c +++ b/src/e_mod_keyrouter_list.c @@ -341,6 +341,26 @@ e_keyrouter_remove_client_from_list(struct wl_resource *surface, struct wl_clien KLINF("Remove a Shared Mode Grabbed key(%d) by wc(%p)\n", i, wc); } } + EINA_LIST_FOREACH_SAFE(krt->HardKeys[i].press_ptr, l, l_next, key_node_data) + { + if (!key_node_data) continue; + + if (surface) + { + if (surface == key_node_data->surface) + { + krt->HardKeys[i].press_ptr = eina_list_remove_list(krt->HardKeys[i].press_ptr, l); + E_FREE(key_node_data); + KLINF("Remove a Pressed key(%d) by surface(%p)\n", i, surface); + } + } + else if ((wc == key_node_data->wc)) + { + krt->HardKeys[i].press_ptr = eina_list_remove_list(krt->HardKeys[i].press_ptr, l); + E_FREE(key_node_data); + KLINF("Remove a Pressed key(%d) by wc(%p)\n", i, wc); + } + } } _e_keyrouter_remove_registered_surface_in_list(surface); -- 2.34.1