From: JengHyun Kang Date: Tue, 30 Aug 2016 04:59:28 +0000 (+0900) Subject: Do not remove pressed list although the client is removed X-Git-Tag: submit/tizen/20160830.063644^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F86%2F85986%2F1;p=platform%2Fcore%2Fuifw%2Fe-mod-tizen-keyrouter.git Do not remove pressed list although the client is removed Change-Id: I464d85e218d5efc18564c460e3882134c26ad3dc --- diff --git a/src/e_mod_keyrouter_events.c b/src/e_mod_keyrouter_events.c index 103cc67..e84dc72 100644 --- a/src/e_mod_keyrouter_events.c +++ b/src/e_mod_keyrouter_events.c @@ -138,16 +138,16 @@ _e_keyrouter_send_key_events_release(int type, Ecore_Event_Key *ev) /* Deliver release clean up pressed key list */ EINA_LIST_FREE(krt->HardKeys[ev->keycode].press_ptr, key_node_data) { - if (key_node_data) + if (!key_node_data->deleted) { res = _e_keyrouter_send_key_event(type, key_node_data->surface, key_node_data->wc, ev, key_node_data->focused, TIZEN_KEYROUTER_MODE_PRESSED); KLINF("Release Pair : Key %s(%s:%d)(Focus: %d) ===> E_Client (%p) WL_Client (%p) (pid: %d)\n", ((ECORE_EVENT_KEY_DOWN == type) ? "Down" : "Up"), ev->keyname, ev->keycode, key_node_data->focused, key_node_data->surface, key_node_data->wc, e_keyrouter_util_get_pid(key_node_data->wc, key_node_data->surface)); - E_FREE(key_node_data); - if (res == EINA_FALSE) ret = EINA_FALSE; } + E_FREE(key_node_data); + if (res == EINA_FALSE) ret = EINA_FALSE; } krt->HardKeys[ev->keycode].press_ptr = NULL; krt->isRegisterDelivery = EINA_FALSE; diff --git a/src/e_mod_keyrouter_list.c b/src/e_mod_keyrouter_list.c index 2ded4ee..ceae655 100644 --- a/src/e_mod_keyrouter_list.c +++ b/src/e_mod_keyrouter_list.c @@ -165,6 +165,7 @@ e_keyrouter_prepend_to_keylist(struct wl_resource *surface, struct wl_client *wc new_keyptr->surface = surface; new_keyptr->wc = wc; new_keyptr->focused = focused; + new_keyptr->deleted = EINA_FALSE; switch(mode) { @@ -353,15 +354,13 @@ e_keyrouter_remove_client_from_list(struct wl_resource *surface, struct wl_clien { 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); + key_node_data->deleted = EINA_TRUE; 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); + key_node_data->deleted = EINA_TRUE; KLINF("Remove a Pressed key(%d) by wc(%p)\n", i, wc); } } @@ -524,6 +523,7 @@ _e_keyrouter_build_register_list(void) node->surface = surface; node->wc = NULL; node->focused = EINA_FALSE; + node->deleted = EINA_FALSE; krt->HardKeys[*ddata].registered_ptr = node; KLDBG("%d key's register surface is %p\n", *ddata, surface); diff --git a/src/e_mod_main_wl.h b/src/e_mod_main_wl.h index 0b65941..45c9ebe 100644 --- a/src/e_mod_main_wl.h +++ b/src/e_mod_main_wl.h @@ -85,6 +85,7 @@ struct _E_Keyrouter_Key_List_Node struct wl_resource *surface; struct wl_client *wc; Eina_Bool focused; + Eina_Bool deleted; }; struct _E_Keyrouter_Tizen_HWKey