e_keyrouter_event: reduce duplicate code related to keygrab event 99/322999/1
authorJihoon Kim <jihoon48.kim@samsung.com>
Thu, 17 Apr 2025 10:55:28 +0000 (19:55 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 21 Apr 2025 08:26:31 +0000 (17:26 +0900)
Change-Id: I500a6ddd8b3fba79dba6701e600fbc39ac2db4a5
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
src/bin/inputmgr/e_keyrouter_event.c

index 932171a06f2c7df079a5194d0717e2a53922862a..5d5a43ad952220671a895cae81501aaa219e4a15 100644 (file)
@@ -228,35 +228,53 @@ finish:
    return res;
 }
 
-/* Function for sending key events to wl_client(s) */
-static void
-_e_keyrouter_send_key_events(int type, Ecore_Event_Key *ev, E_Device *dev)
+static Eina_Bool
+_e_keyrouter_send_key_event_in_list(int type, Ecore_Event_Key *ev, E_Device *dev, unsigned int keyrouter_list_mode,
+                                    unsigned int keyrouter_send_mode, const char *mode_str, int key_event_log_type)
 {
+   Eina_Bool ret = EINA_FALSE;
+   Eina_List *l = NULL, *ptr_list = NULL;
    E_Keyrouter_Key_List_NodePtr key_node_data;
-   Eina_List *l = NULL, *pic_off_ptr_list = NULL;
-   int keycode = 0;
-
-   keycode = ev->keycode;
 
-   if (krt->isPictureOffEnabled == 1)
+   g_rec_mutex_lock(&krt->grab_key_mutex);
+   ptr_list = e_keyrouter_hardkeys_list_get(krt->HardKeys, ev->keycode, keyrouter_list_mode);
+   EINA_LIST_FOREACH(ptr_list, l, key_node_data)
      {
-        g_rec_mutex_lock(&krt->grab_key_mutex);
-        pic_off_ptr_list = e_keyrouter_hardkeys_list_get(krt->HardKeys, keycode, TIZEN_KEYROUTER_MODE_PICTURE_OFF);
-        EINA_LIST_FOREACH(pic_off_ptr_list, l, key_node_data)
+        if (key_node_data)
           {
-             if (key_node_data)
+             _e_keyrouter_send_key_event(type, key_node_data->surface, key_node_data->wc, ev, dev,
+                                         key_node_data->focused, keyrouter_send_mode);
+
+             _e_keyrouter_log_key_event(key_event_log_type, mode_str,
+                                        ev->keycode,
+                                        key_node_data->focused,
+                                        key_node_data->status,
+                                        key_node_data->surface,
+                                        key_node_data->wc);
+
+             if ((keyrouter_list_mode == TIZEN_KEYROUTER_MODE_EXCLUSIVE) ||
+                 (keyrouter_list_mode == TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE))
                {
-                  _e_keyrouter_send_key_event(type, key_node_data->surface, key_node_data->wc, ev, dev, key_node_data->focused, TIZEN_KEYROUTER_MODE_SHARED);
-
-                  _e_keyrouter_log_key_event(KEY_EVENT_LOG_TYPE_PICTURE_OFF, "SHARED",
-                                             ev->keycode,
-                                             key_node_data->focused,
-                                             key_node_data->status,
-                                             key_node_data->surface,
-                                             key_node_data->wc);
+                  ret = EINA_TRUE;
+                  goto end;
                }
           }
-        g_rec_mutex_unlock(&krt->grab_key_mutex);
+     }
+
+end:
+   g_rec_mutex_unlock(&krt->grab_key_mutex);
+
+   return ret;
+}
+
+/* Function for sending key events to wl_client(s) */
+static void
+_e_keyrouter_send_key_events(int type, Ecore_Event_Key *ev, E_Device *dev)
+{
+   if (krt->isPictureOffEnabled == 1)
+     {
+        _e_keyrouter_send_key_event_in_list(type, ev, dev, TIZEN_KEYROUTER_MODE_PICTURE_OFF, TIZEN_KEYROUTER_MODE_SHARED,
+                                            "SHARED", KEY_EVENT_LOG_TYPE_PICTURE_OFF);
         return;
      }
 
@@ -389,51 +407,13 @@ _e_keyrouter_send_key_events_press(int type, Ecore_Event_Key *ev, E_Device *dev)
    else
      key_event_log_type = KEY_EVENT_LOG_TYPE_KEY_UP;
 
-   g_rec_mutex_lock(&krt->grab_key_mutex);
-   Eina_List *excl_ptr_list = e_keyrouter_hardkeys_list_get(krt->HardKeys, keycode, TIZEN_KEYROUTER_MODE_EXCLUSIVE);
-   EINA_LIST_FOREACH(excl_ptr_list, l, key_node_data)
-     {
-        if (key_node_data)
-          {
-             _e_keyrouter_send_key_event(type, key_node_data->surface, key_node_data->wc, ev, dev,
-                                        key_node_data->focused, TIZEN_KEYROUTER_MODE_EXCLUSIVE);
-
-             _e_keyrouter_log_key_event(key_event_log_type, "EXCLUSIVE",
-                                        ev->keycode,
-                                        key_node_data->focused,
-                                        key_node_data->status,
-                                        key_node_data->surface,
-                                        key_node_data->wc);
-
-             g_rec_mutex_unlock(&krt->grab_key_mutex);
-
-             return;
-          }
-     }
-   g_rec_mutex_unlock(&krt->grab_key_mutex);
-
-   g_rec_mutex_lock(&krt->grab_key_mutex);
-   Eina_List *or_excl_ptr = e_keyrouter_hardkeys_list_get(krt->HardKeys, keycode, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE);
-   EINA_LIST_FOREACH(or_excl_ptr, l, key_node_data)
-     {
-        if (key_node_data)
-          {
-             _e_keyrouter_send_key_event(type, key_node_data->surface, key_node_data->wc, ev, dev,
-                                         key_node_data->focused, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE);
-
-             _e_keyrouter_log_key_event(key_event_log_type, "OVERRIDABLE_EXCLUSIVE",
-                                        ev->keycode,
-                                        key_node_data->focused,
-                                        key_node_data->status,
-                                        key_node_data->surface,
-                                        key_node_data->wc);
-
-             g_rec_mutex_unlock(&krt->grab_key_mutex);
+   if (_e_keyrouter_send_key_event_in_list(type, ev, dev, TIZEN_KEYROUTER_MODE_EXCLUSIVE, TIZEN_KEYROUTER_MODE_EXCLUSIVE,
+                                           "EXCLUSIVE", key_event_log_type))
+     return;
 
-             return;
-          }
-     }
-   g_rec_mutex_unlock(&krt->grab_key_mutex);
+   if (_e_keyrouter_send_key_event_in_list(type, ev, dev, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE,
+                                           "OVERRIDABLE_EXCLUSIVE", key_event_log_type))
+     return;
 
    // Top position grab must need a focus client.
    if (ec_focus)