From: JengHyun Kang Date: Wed, 27 Apr 2016 13:04:26 +0000 (+0900) Subject: Add a destroy listener if keyrouter a send key to focus X-Git-Tag: submit/tizen/20160427.131649~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6685c2d8c6ff0b18f9533a0531d7d68d2cdf62db;p=platform%2Fcore%2Fuifw%2Fe-mod-tizen-keyrouter.git Add a destroy listener if keyrouter a send key to focus - Do not deliver release key events if client is destroyed Change-Id: I29e9bfa0a4694976d085089ac61d0408d930ec59 --- 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);