From: JengHyun Kang Date: Fri, 17 Mar 2017 05:40:54 +0000 (+0900) Subject: Separate client's life status X-Git-Tag: submit/tizen/20170317.065102~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F69%2F119469%2F1;p=platform%2Fcore%2Fuifw%2Fe-mod-tizen-keyrouter.git Separate client's life status - Distinguish ungrab and dead status - Send released key to e_comp for clean up state Change-Id: I6a8146a5f7c70bce2886f6b0cfd5d93423e7b3b0 --- diff --git a/src/e_mod_keyrouter_events.c b/src/e_mod_keyrouter_events.c index ee9ca94..ec7c72b 100644 --- a/src/e_mod_keyrouter_events.c +++ b/src/e_mod_keyrouter_events.c @@ -136,21 +136,20 @@ _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->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); + 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) => 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->surface, key_node_data->wc, pid, pname ?: "Unknown"); + 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); - } + 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; } diff --git a/src/e_mod_keyrouter_list.c b/src/e_mod_keyrouter_list.c index 693aa12..a48f175 100644 --- a/src/e_mod_keyrouter_list.c +++ b/src/e_mod_keyrouter_list.c @@ -160,7 +160,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; + new_keyptr->status = E_KRT_CSTAT_ALIVE; switch(mode) { @@ -230,7 +230,7 @@ e_keyrouter_find_and_remove_client_from_list(struct wl_resource *surface, struct { if (mode == TIZEN_KEYROUTER_MODE_PRESSED) { - key_node_data->deleted = EINA_TRUE; + key_node_data->status = E_KRT_CSTAT_UNGRAB; } else { @@ -244,7 +244,7 @@ e_keyrouter_find_and_remove_client_from_list(struct wl_resource *surface, struct { if (mode == TIZEN_KEYROUTER_MODE_PRESSED) { - key_node_data->deleted = EINA_TRUE; + key_node_data->status = E_KRT_CSTAT_UNGRAB; } else { @@ -357,13 +357,13 @@ e_keyrouter_remove_client_from_list(struct wl_resource *surface, struct wl_clien { if (surface == key_node_data->surface) { - key_node_data->deleted = EINA_TRUE; + key_node_data->status = E_KRT_CSTAT_DEAD; KLDBG("Remove a Pressed key(%d) by wl_surface(%p)", i, surface); } } else if ((wc == key_node_data->wc)) { - key_node_data->deleted = EINA_TRUE; + key_node_data->status = E_KRT_CSTAT_DEAD; KLDBG("Remove a Pressed key(%d) by wl_client(%p)", i, wc); } } @@ -526,7 +526,7 @@ _e_keyrouter_build_register_list(void) node->surface = surface; node->wc = NULL; node->focused = EINA_FALSE; - node->deleted = EINA_FALSE; + node->status = E_KRT_CSTAT_ALIVE; krt->HardKeys[*ddata].registered_ptr = node; KLDBG("%d key's register wl_surface is %p", *ddata, surface); diff --git a/src/e_mod_main_wl.h b/src/e_mod_main_wl.h index f8bf540..87536fb 100644 --- a/src/e_mod_main_wl.h +++ b/src/e_mod_main_wl.h @@ -66,6 +66,13 @@ typedef struct _E_Keyrouter_Config_Data E_Keyrouter_Config_Data; #define TIZEN_KEYROUTER_MODE_PRESSED TIZEN_KEYROUTER_MODE_REGISTERED+1 #define TIZEN_KEYROUTER_MODE_PICTURE_OFF TIZEN_KEYROUTER_MODE_REGISTERED+2 +typedef enum _E_Keyrouter_Client_Status +{ + E_KRT_CSTAT_DEAD = 0, + E_KRT_CSTAT_ALIVE, + E_KRT_CSTAT_UNGRAB +} E_Keyrouter_Client_Status; + typedef unsigned long Time; extern E_KeyrouterPtr krt; @@ -97,7 +104,7 @@ struct _E_Keyrouter_Key_List_Node struct wl_resource *surface; struct wl_client *wc; Eina_Bool focused; - Eina_Bool deleted; + E_Keyrouter_Client_Status status; }; struct _E_Keyrouter_Tizen_HWKey