Separate client's life status 69/119469/1
authorJengHyun Kang <jhyuni.kang@samsung.com>
Fri, 17 Mar 2017 05:40:54 +0000 (14:40 +0900)
committerJengHyun Kang <jhyuni.kang@samsung.com>
Fri, 17 Mar 2017 05:40:59 +0000 (14:40 +0900)
  - Distinguish ungrab and dead status
  - Send released key to e_comp for clean up state

Change-Id: I6a8146a5f7c70bce2886f6b0cfd5d93423e7b3b0

src/e_mod_keyrouter_events.c
src/e_mod_keyrouter_list.c
src/e_mod_main_wl.h

index ee9ca94..ec7c72b 100644 (file)
@@ -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;
      }
index 693aa12..a48f175 100644 (file)
@@ -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);
index f8bf540..87536fb 100644 (file)
@@ -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