e_keyrouter: Separate surface/client params into individual functions 06/318206/1
authorTaeHyeon Jeong <thyeon.jeong@samsung.com>
Fri, 10 Jan 2025 02:41:14 +0000 (11:41 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Tue, 14 Jan 2025 07:14:43 +0000 (16:14 +0900)
- Refactored the code to separate parameters into individual functions, ensuring each function has a single responsibility.
- Improved code readability and maintainability by clearly defining the purpose of each function.
- Ensured that the refactored code maintains the same functionality as the original implementation.

Change-Id: I074fbb926272980024958c6a64bfb75a01da6ac6

src/bin/inputmgr/e_keyrouter_intern.h
src/bin/inputmgr/e_keyrouter_list.c
src/bin/server/e_keyrouter_wl.c
src/bin/server/e_keyrouter_wl_intern.h

index 40386e43d36964a03de241ae3184adf020e3be5b..0a1ff06c168bf62e482548d9ea49c15b172fa1b2 100644 (file)
@@ -116,8 +116,10 @@ EINTERN Eina_Bool e_keyrouter_query_tizen_key_table(void);
 
 EINTERN int e_keyrouter_set_keygrab_in_list(struct wl_resource *surface, struct wl_client *client, uint32_t key, uint32_t mode);
 EINTERN int e_keyrouter_prepend_to_keylist(struct wl_resource *surface, struct wl_client *wc, uint32_t key, uint32_t mode, Eina_Bool focused);
-EINTERN void e_keyrouter_remove_client_from_list(struct wl_resource *surface, struct wl_client *wc);
-EINTERN int e_keyrouter_find_keygrab_mode(struct wl_resource *surface, struct wl_client *wc, uint32_t key);
+EINTERN void e_keyrouter_remove_surface_from_list(struct wl_resource *surface);
+EINTERN void e_keyrouter_remove_client_from_list(struct wl_client *wc);
+EINTERN uint32_t e_keyrouter_find_keygrab_mode_with_surface(struct wl_resource *surface, uint32_t key);
+EINTERN uint32_t e_keyrouter_find_keygrab_mode_with_client(struct wl_client *wc, uint32_t key);
 EINTERN Eina_Bool e_keyrouter_process_key_event(void *event, int type);
 
 EINTERN int                 e_keyrouter_util_get_pid(struct wl_client *client, struct wl_resource *surface);
index 5f287ace4c57e6b0edec8d13a41df99718390f5b..29438774b077c9885b206fdd24bb846ffa9d68a7 100644 (file)
@@ -94,13 +94,13 @@ e_keyrouter_prepend_to_keylist(struct wl_resource *surface, struct wl_client *wc
 }
 
 EINTERN void
-e_keyrouter_remove_client_from_list(struct wl_resource *surface, struct wl_client *client)
+e_keyrouter_remove_surface_from_list(struct wl_resource *surface)
 {
-   int key;
+   uint32_t key;
 
-   EINA_SAFETY_ON_TRUE_RETURN(((!surface) && (!client)));
+   EINA_SAFETY_ON_NULL_RETURN(surface);
 
-   INF("[%s] surface(%p), client(%p)", __func__, surface, client);
+   INF("[%s] surface(%p)", __func__, surface);
 
    g_rec_mutex_lock(&krt->grab_key_mutex);
 
@@ -109,106 +109,106 @@ e_keyrouter_remove_client_from_list(struct wl_resource *surface, struct wl_clien
         if (!e_keyrouter_hardkeys_keycode_available(krt->HardKeys, key))
           continue;
 
-        if (!surface)
-          {
-             // EXCLUSIVE
-             e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_EXCLUSIVE, client);
-             // OVERRIDEABLE_EXCLUSIVE
-             e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE, client);
-             // TOPMOST
-             e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_TOPMOST, client);
-             // SHARED
-             e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_SHARED, client);
-             // PRESSED
-             e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PRESSED, client);
-             // PICTURE_OFF
-             e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PICTURE_OFF, client);
-          }
-        else
-          {
-             // EXCLUSIVE
-             e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_EXCLUSIVE, surface);
-             // OVERRIDEABLE_EXCLUSIVE
-             e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE, surface);
-             // TOPMOST
-             e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_TOPMOST, surface);
-             // SHARED
-             e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_SHARED, surface);
-             // PRESSED
-             e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PRESSED, surface);
-             // PICTURE_OFF
-             e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PICTURE_OFF, surface);
-          }
+        // EXCLUSIVE
+        e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_EXCLUSIVE, surface);
+        // OVERRIDEABLE_EXCLUSIVE
+        e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE, surface);
+        // TOPMOST
+        e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_TOPMOST, surface);
+        // SHARED
+        e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_SHARED, surface);
+        // PRESSED
+        e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PRESSED, surface);
+        // PICTURE_OFF
+        e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PICTURE_OFF, surface);
      }
 
    g_rec_mutex_unlock(&krt->grab_key_mutex);
 }
 
-EINTERN int
-e_keyrouter_find_keygrab_mode(struct wl_resource *surface, struct wl_client *client, uint32_t key)
+EINTERN void
+e_keyrouter_remove_client_from_list(struct wl_client *client)
 {
-   int mode;
+   uint32_t key;
+
+   EINA_SAFETY_ON_NULL_RETURN(client);
+
+   INF("[%s] client(%p)", __func__, client);
 
    g_rec_mutex_lock(&krt->grab_key_mutex);
 
-   if (!surface)
-     {
-        if (e_keyrouter_hardkeys_is_key_grabbed_by_client(krt->HardKeys, key, client, TIZEN_KEYROUTER_MODE_EXCLUSIVE))
-          {
-             mode = TIZEN_KEYROUTER_MODE_EXCLUSIVE;
-             goto finish;
-          }
-        if (e_keyrouter_hardkeys_is_key_grabbed_by_client(krt->HardKeys, key, client, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE))
-          {
-             mode = TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE;
-             goto finish;
-          }
-        if (e_keyrouter_hardkeys_is_key_grabbed_by_client(krt->HardKeys, key, client, TIZEN_KEYROUTER_MODE_TOPMOST))
-          {
-             mode = TIZEN_KEYROUTER_MODE_TOPMOST;
-             goto finish;
-          }
-        if (e_keyrouter_hardkeys_is_key_grabbed_by_client(krt->HardKeys, key, client, TIZEN_KEYROUTER_MODE_SHARED))
-          {
-             mode = TIZEN_KEYROUTER_MODE_SHARED;
-             goto finish;
-          }
-     }
-   else
+   for (key = 0; key <= krt->max_tizen_hwkeys; key++)
      {
-        if (e_keyrouter_hardkeys_is_key_grabbed_by_surface(krt->HardKeys, key, surface, TIZEN_KEYROUTER_MODE_EXCLUSIVE))
-          {
-             mode = TIZEN_KEYROUTER_MODE_EXCLUSIVE;
-             goto finish;
-          }
-        if (e_keyrouter_hardkeys_is_key_grabbed_by_surface(krt->HardKeys, key, surface, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE))
-          {
-             mode = TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE;
-             goto finish;
-          }
-        if (e_keyrouter_hardkeys_is_key_grabbed_by_surface(krt->HardKeys, key, surface, TIZEN_KEYROUTER_MODE_TOPMOST))
-          {
-             mode = TIZEN_KEYROUTER_MODE_TOPMOST;
-             goto finish;
-          }
-        if (e_keyrouter_hardkeys_is_key_grabbed_by_surface(krt->HardKeys, key, surface, TIZEN_KEYROUTER_MODE_SHARED))
-          {
-             mode = TIZEN_KEYROUTER_MODE_SHARED;
-             goto finish;
-          }
+        if (!e_keyrouter_hardkeys_keycode_available(krt->HardKeys, key))
+          continue;
+
+        // EXCLUSIVE
+        e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_EXCLUSIVE, client);
+        // OVERRIDEABLE_EXCLUSIVE
+        e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE, client);
+        // TOPMOST
+        e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_TOPMOST, client);
+        // SHARED
+        e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_SHARED, client);
+        // PRESSED
+        e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PRESSED, client);
+        // PICTURE_OFF
+        e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PICTURE_OFF, client);
      }
 
    g_rec_mutex_unlock(&krt->grab_key_mutex);
+}
 
-   KLDBG("%d key is not grabbed by (wl_surface: %p, wl_client: %p)", key, surface, client);
+EINTERN uint32_t
+e_keyrouter_find_keygrab_mode_with_surface(struct wl_resource *surface, uint32_t key)
+{
+   uint32_t mode = TIZEN_KEYROUTER_MODE_NONE;
 
-   return TIZEN_KEYROUTER_MODE_NONE;
+   g_rec_mutex_lock(&krt->grab_key_mutex);
+
+   if (e_keyrouter_hardkeys_is_key_grabbed_by_surface(krt->HardKeys, key, surface, TIZEN_KEYROUTER_MODE_EXCLUSIVE))
+     mode = TIZEN_KEYROUTER_MODE_EXCLUSIVE;
+   else if (e_keyrouter_hardkeys_is_key_grabbed_by_surface(krt->HardKeys, key, surface, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE))
+     mode = TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE;
+   else if (e_keyrouter_hardkeys_is_key_grabbed_by_surface(krt->HardKeys, key, surface, TIZEN_KEYROUTER_MODE_TOPMOST))
+     mode = TIZEN_KEYROUTER_MODE_TOPMOST;
+   else if (e_keyrouter_hardkeys_is_key_grabbed_by_surface(krt->HardKeys, key, surface, TIZEN_KEYROUTER_MODE_SHARED))
+     mode = TIZEN_KEYROUTER_MODE_SHARED;
 
-finish:
    g_rec_mutex_unlock(&krt->grab_key_mutex);
 
-   KLDBG("Find %d key grabbed by (wl_surface: %p, wl_client: %p) in %s mode",
-         key, surface, client, e_keyrouter_util_mode_to_string(mode));
+   if (mode != TIZEN_KEYROUTER_MODE_NONE)
+     KLDBG("Find %d key grabbed by (wl_surface: %p) in %s mode",
+           key, surface, e_keyrouter_util_mode_to_string(mode));
+   else
+     KLDBG("%d key is not grabbed by (wl_surface: %p)", key, surface);
+
+   return mode;
+}
+
+EINTERN uint32_t
+e_keyrouter_find_keygrab_mode_with_client(struct wl_client *client, uint32_t key)
+{
+   uint32_t mode = TIZEN_KEYROUTER_MODE_NONE;
+
+   g_rec_mutex_lock(&krt->grab_key_mutex);
+
+   if (e_keyrouter_hardkeys_is_key_grabbed_by_client(krt->HardKeys, key, client, TIZEN_KEYROUTER_MODE_EXCLUSIVE))
+      mode = TIZEN_KEYROUTER_MODE_EXCLUSIVE;
+   else if (e_keyrouter_hardkeys_is_key_grabbed_by_client(krt->HardKeys, key, client, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE))
+      mode = TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE;
+   else if (e_keyrouter_hardkeys_is_key_grabbed_by_client(krt->HardKeys, key, client, TIZEN_KEYROUTER_MODE_TOPMOST))
+      mode = TIZEN_KEYROUTER_MODE_TOPMOST;
+   else if (e_keyrouter_hardkeys_is_key_grabbed_by_client(krt->HardKeys, key, client, TIZEN_KEYROUTER_MODE_SHARED))
+      mode = TIZEN_KEYROUTER_MODE_SHARED;
+
+   g_rec_mutex_unlock(&krt->grab_key_mutex);
+
+   if (mode != TIZEN_KEYROUTER_MODE_NONE)
+     KLDBG("Find %d key grabbed by (wl_client: %p) in %s mode",
+           key, client, e_keyrouter_util_mode_to_string(mode));
+   else
+     KLDBG("%d key is not grabbed by (wl_client: %p)", key, client);
 
    return mode;
 }
@@ -345,7 +345,10 @@ e_keyrouter_keygrab_unset(struct wl_client *client, struct wl_resource *surface,
    g_rec_mutex_unlock(&krt->grab_key_mutex);
 
 finish:
-   e_keyrouter_keycancel_send(client, surface, key);
+   if (!surface)
+     e_keyrouter_keycancel_send_with_client(client, key);
+   else
+     e_keyrouter_keycancel_send_with_surface(surface, key);
 
    return TIZEN_KEYROUTER_ERROR_NONE;
 }
index ce6300fe206bf7dec250974f55a85a01861b4fbc..555c8e32f7ac197558bea4089150a671a4aa9aa6 100644 (file)
@@ -187,7 +187,7 @@ e_keyrouter_wl_key_send(Ecore_Event_Key *ev, E_Device *dev, Eina_Bool pressed, s
 }
 
 EINTERN void
-e_keyrouter_keycancel_send(struct wl_client *client, struct wl_resource *surface, unsigned int key)
+e_keyrouter_keycancel_send_with_surface(struct wl_resource *surface, unsigned int key)
 {
    Eina_List *l;
    struct wl_resource *resource = NULL;
@@ -195,8 +195,8 @@ e_keyrouter_keycancel_send(struct wl_client *client, struct wl_resource *surface
    E_Keyrouter_Key_List_NodePtr data;
    Eina_List *press_ptr_list = NULL;
 
-   if (surface) wc = wl_resource_get_client(surface);
-   else wc = client;
+   if (surface)
+     wc = wl_resource_get_client(surface);
 
    EINA_SAFETY_ON_NULL_RETURN(wc);
 
@@ -204,26 +204,42 @@ e_keyrouter_keycancel_send(struct wl_client *client, struct wl_resource *surface
    press_ptr_list = e_keyrouter_hardkeys_list_get(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PRESSED);
    EINA_LIST_FOREACH(press_ptr_list, l, data)
      {
-        if (surface)
+        if (surface == data->surface)
           {
-             if (surface == data->surface)
+             g_rec_mutex_lock(&g_tizen_keyrouter->resource_list_mutex);
+             EINA_LIST_FOREACH(g_tizen_keyrouter->resources, l, resource)
                {
-                  g_rec_mutex_lock(&g_tizen_keyrouter->resource_list_mutex);
-                  EINA_LIST_FOREACH(g_tizen_keyrouter->resources, l, resource)
-                    {
-                       if (wl_resource_get_client(resource) != wc) continue;
+                  if (wl_resource_get_client(resource) != wc) continue;
 
-                       tizen_keyrouter_send_key_cancel(resource, key-8);
-                    }
-                  g_rec_mutex_unlock(&g_tizen_keyrouter->resource_list_mutex);
+                  tizen_keyrouter_send_key_cancel(resource, key-8);
                }
+             g_rec_mutex_unlock(&g_tizen_keyrouter->resource_list_mutex);
           }
-        else if (client == data->wc)
+     }
+   g_rec_mutex_unlock(&krt->grab_key_mutex);
+}
+
+
+EINTERN void
+e_keyrouter_keycancel_send_with_client(struct wl_client *client, unsigned int key)
+{
+   Eina_List *l;
+   struct wl_resource *resource = NULL;
+   E_Keyrouter_Key_List_NodePtr data;
+   Eina_List *press_ptr_list = NULL;
+
+   EINA_SAFETY_ON_NULL_RETURN(client);
+
+   g_rec_mutex_lock(&krt->grab_key_mutex);
+   press_ptr_list = e_keyrouter_hardkeys_list_get(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PRESSED);
+   EINA_LIST_FOREACH(press_ptr_list, l, data)
+     {
+        if (client == data->wc)
           {
              g_rec_mutex_lock(&g_tizen_keyrouter->resource_list_mutex);
              EINA_LIST_FOREACH(g_tizen_keyrouter->resources, l, resource)
                {
-                  if (wl_resource_get_client(resource) != wc) continue;
+                  if (wl_resource_get_client(resource) != client) continue;
 
                   tizen_keyrouter_send_key_cancel(resource, key-8);
                }
@@ -301,10 +317,12 @@ _e_keyrouter_cb_get_keygrab_status(struct wl_client *client, struct wl_resource
    (void) resource;
    (void) surface;
    (void) key;
-   int mode = TIZEN_KEYROUTER_MODE_NONE;
+   int mode;
 
    TRACE_INPUT_BEGIN(_e_keyrouter_cb_get_keygrab_status);
-   mode = e_keyrouter_find_keygrab_mode(surface, client, key);
+
+   mode = surface ? e_keyrouter_find_keygrab_mode_with_surface(surface, key)
+                  : e_keyrouter_find_keygrab_mode_with_client(client, key);
 
    TRACE_INPUT_END();
    tizen_keyrouter_send_keygrab_notify(resource, surface, key, mode, TIZEN_KEYROUTER_ERROR_NONE);
@@ -503,7 +521,7 @@ _e_keyrouter_wl_client_cb_destroy(struct wl_listener *l, void *data)
    struct wl_client *client = data;
 
    KLDBG("Listener(%p) called: wl_client: %p is died", l, client);
-   e_keyrouter_remove_client_from_list(NULL, client);
+   e_keyrouter_remove_client_from_list(client);
 
    wl_list_remove(&l->link);
    E_FREE(l);
@@ -517,7 +535,7 @@ _e_keyrouter_wl_surface_cb_destroy(struct wl_listener *l, void *data)
    struct wl_resource *surface = (struct wl_resource *)data;
 
    KLDBG("Listener(%p) called: surface: %p is died", l, surface);
-   e_keyrouter_remove_client_from_list(surface, NULL);
+   e_keyrouter_remove_surface_from_list(surface);
 
    wl_list_remove(&l->link);
    E_FREE(l);
index 60bde8c34c7343ae695119fa577ee2c63dda8db3..9cf7505f4ecaa45d82aa02298f4d532678ced77c 100644 (file)
@@ -14,7 +14,8 @@ EINTERN void               e_keyrouter_wl_shutdown(void);
 EINTERN int       e_keyrouter_wl_add_client_destroy_listener(struct wl_client *client);
 EINTERN int       e_keyrouter_wl_add_surface_destroy_listener(struct wl_resource *surface);
 EINTERN Eina_Bool e_keyrouter_wl_key_send(Ecore_Event_Key *ev, E_Device *dev, Eina_Bool pressed, struct wl_client *client, struct wl_resource *surface, Eina_Bool focused);
-EINTERN void      e_keyrouter_keycancel_send(struct wl_client *client, struct wl_resource *surface, unsigned int key);
+EINTERN void      e_keyrouter_keycancel_send_with_surface(struct wl_resource *surface, unsigned int key);
+EINTERN void      e_keyrouter_keycancel_send_with_client(struct wl_client *client, unsigned int key);
 EINTERN void      e_keyrouter_wl_event_surface_send(struct wl_resource *surface, int key, int mode);
 
 EINTERN Eina_Bool e_keyrouter_wl_util_do_privilege_check(struct wl_client *client, uint32_t mode, uint32_t keycode);