From: JengHyun Kang Date: Thu, 1 Sep 2016 06:17:40 +0000 (+0900) Subject: Do not deliver release keys if client ungrab keys after get key press events X-Git-Tag: submit/tizen/20160905.105032~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=606a63854df56a8ca7f307c947b2346f5ea6d8a1;p=platform%2Fcore%2Fuifw%2Fe-mod-tizen-keyrouter.git Do not deliver release keys if client ungrab keys after get key press events Change-Id: I71ab71ef6293ac1cd3c042101e6e4472e3a80cc9 --- diff --git a/src/e_mod_keyrouter_list.c b/src/e_mod_keyrouter_list.c index ceae655..6631f34 100644 --- a/src/e_mod_keyrouter_list.c +++ b/src/e_mod_keyrouter_list.c @@ -239,15 +239,29 @@ e_keyrouter_find_and_remove_client_from_list(struct wl_resource *surface, struct { if (surface == key_node_data->surface) { - *list = eina_list_remove_list(*list, l); - E_FREE(key_node_data); + if (mode == TIZEN_KEYROUTER_MODE_PRESSED) + { + key_node_data->deleted = EINA_TRUE; + } + else + { + *list = eina_list_remove_list(*list, l); + E_FREE(key_node_data); + } KLDBG("Remove a %s Mode Grabbed key(%d) by surface(%p)\n", _mode_str_get(mode), key, surface); } } else if ((wc == key_node_data->wc)) { - *list = eina_list_remove_list(*list, l); - E_FREE(key_node_data); + if (mode == TIZEN_KEYROUTER_MODE_PRESSED) + { + key_node_data->deleted = EINA_TRUE; + } + else + { + *list = eina_list_remove_list(*list, l); + E_FREE(key_node_data); + } KLDBG("Remove a %s Mode Grabbed key(%d) by wc(%p)\n", _mode_str_get(mode), key, wc); } } @@ -754,6 +768,7 @@ _mode_str_get(uint32_t mode) case TIZEN_KEYROUTER_MODE_TOPMOST: str = "Topmost"; break; case TIZEN_KEYROUTER_MODE_SHARED: str = "Shared"; break; case TIZEN_KEYROUTER_MODE_REGISTERED: str = "Registered"; break; + case TIZEN_KEYROUTER_MODE_PRESSED: str = "Pressed"; break; default: str = "UnknownMode"; break; } @@ -771,6 +786,7 @@ _e_keyrouter_get_list(int mode, int key) case TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE: list = &krt->HardKeys[key].or_excl_ptr; break; case TIZEN_KEYROUTER_MODE_TOPMOST: list = &krt->HardKeys[key].top_ptr; break; case TIZEN_KEYROUTER_MODE_SHARED: list = &krt->HardKeys[key].shared_ptr; break; + case TIZEN_KEYROUTER_MODE_PRESSED: list = &krt->HardKeys[key].press_ptr; break; default: break; } diff --git a/src/e_mod_main_wl.c b/src/e_mod_main_wl.c old mode 100755 new mode 100644 index bba5fb1..702b99b --- a/src/e_mod_main_wl.c +++ b/src/e_mod_main_wl.c @@ -124,6 +124,9 @@ _e_keyrouter_keygrab_unset(struct wl_client *client, struct wl_resource *surface /* SHARED grab */ e_keyrouter_find_and_remove_client_from_list(NULL, client, key, TIZEN_KEYROUTER_MODE_SHARED); + /* Press List */ + e_keyrouter_find_and_remove_client_from_list(NULL, client, key, TIZEN_KEYROUTER_MODE_PRESSED); + return TIZEN_KEYROUTER_ERROR_NONE; } @@ -139,6 +142,9 @@ _e_keyrouter_keygrab_unset(struct wl_client *client, struct wl_resource *surface /* REGISTERED grab */ e_keyrouter_unset_keyregister(surface, client, key); + /* Press List */ + e_keyrouter_find_and_remove_client_from_list(surface, client, key, TIZEN_KEYROUTER_MODE_PRESSED); + return TIZEN_KEYROUTER_ERROR_NONE; }