e_keyrouter: Apply getter methods for E_Keyrouter_Grabbed_Key 53/317553/1
authorTaeHyeon Jeong <thyeon.jeong@samsung.com>
Thu, 26 Dec 2024 07:16:59 +0000 (16:16 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Fri, 3 Jan 2025 06:58:20 +0000 (15:58 +0900)
TO-BE
- Apply getter methods to get values based on HardKeys and keycode.

Change-Id: Iedfb755f074471bafc0b3f23c512be5822cf838c

src/bin/inputmgr/e_keyrouter.c
src/bin/inputmgr/e_keyrouter_events.c
src/bin/server/e_keyrouter_wl.c

index 4105f1247a77239fef6d8330535bffcd223fc94d..1bfbe63c26b5e18d97fb4704d47329d2918bf151 100644 (file)
@@ -161,7 +161,8 @@ static void
 _e_keyrouter_input_thread_keygrab_print(void *data)
 {
    char *log_path = (char *)data;
-   Eina_List *l;
+   Eina_List *l, **hardkey_list;
+   Eina_List *excl_ptr_list, *or_excl_ptr_list, *top_ptr_list, *shared_ptr_list;
    E_Keyrouter_Key_List_NodePtr kdata;
    E_Client *ec_focus;
    struct wl_resource *surface_focus;
@@ -217,10 +218,24 @@ _e_keyrouter_input_thread_keygrab_print(void *data)
         if (!e_keyrouter_hardkeys_keycode_available(krt->HardKeys, i))
           continue;
 
-        if (!krt->HardKeys[i].excl_ptr &&
-            !krt->HardKeys[i].or_excl_ptr &&
-            !krt->HardKeys[i].top_ptr &&
-            !krt->HardKeys[i].shared_ptr)
+        hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, i, TIZEN_KEYROUTER_MODE_EXCLUSIVE);
+        EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+        excl_ptr_list = *hardkey_list;
+
+        hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, i, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE);
+        EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+        or_excl_ptr_list = *hardkey_list;
+
+        hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, i, TIZEN_KEYROUTER_MODE_TOPMOST);
+        EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+        top_ptr_list = *hardkey_list;
+
+        hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, i, TIZEN_KEYROUTER_MODE_SHARED);
+        EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+        shared_ptr_list = *hardkey_list;
+
+        if (!excl_ptr_list && !or_excl_ptr_list &&
+            !top_ptr_list && !shared_ptr_list)
           continue;
 
         keyname = e_comp_wl_input_keymap_keycode_to_keyname(i);
@@ -230,10 +245,10 @@ _e_keyrouter_input_thread_keygrab_print(void *data)
         free(keyname);
         keyname = NULL;
 
-        if (krt->HardKeys[i].excl_ptr)
+        if (excl_ptr_list)
           {
              fprintf(log_fl, "            == Exclusive Grab ==\n");
-             EINA_LIST_FOREACH(krt->HardKeys[i].excl_ptr, l, kdata)
+             EINA_LIST_FOREACH(excl_ptr_list, l, kdata)
                {
                   pid = e_keyrouter_util_get_pid(kdata->wc, kdata->surface);
                   cmd = e_keyrouter_util_cmd_get_from_pid(pid);
@@ -253,22 +268,22 @@ _e_keyrouter_input_thread_keygrab_print(void *data)
                }
             }
 
-        if (krt->HardKeys[i].or_excl_ptr)
+        if (or_excl_ptr_list)
           {
              fprintf(log_fl, "            == Overidable Exclusive Grab ==\n");
-             _e_keyrouter_keygrab_status_print(log_fl, krt->HardKeys[i].or_excl_ptr);
+             _e_keyrouter_keygrab_status_print(log_fl, or_excl_ptr_list);
           }
 
-        if (krt->HardKeys[i].top_ptr)
+        if (top_ptr_list)
           {
              fprintf(log_fl, "            == Top Position Grab ==\n");
-             _e_keyrouter_keygrab_status_print(log_fl, krt->HardKeys[i].top_ptr);
+             _e_keyrouter_keygrab_status_print(log_fl, top_ptr_list);
           }
 
-        if (krt->HardKeys[i].shared_ptr)
+        if (shared_ptr_list)
           {
              fprintf(log_fl, "            == Shared Grab ==\n");
-             _e_keyrouter_keygrab_status_print(log_fl, krt->HardKeys[i].shared_ptr);
+             _e_keyrouter_keygrab_status_print(log_fl, shared_ptr_list);
           }
 
         fprintf(log_fl, "\n");
index 70a4ae8d0d06fd14a29133113f5b7bf0ca129156..ccc957f9866c0419fd148f809ded5fa1748a88a7 100644 (file)
@@ -239,7 +239,9 @@ _e_keyrouter_send_key_events(int type, Ecore_Event_Key *ev, E_Device *dev)
    if (krt->isPictureOffEnabled == 1)
      {
         g_rec_mutex_lock(&krt->grab_key_mutex);
-        Eina_List *pic_off_ptr_list = krt->HardKeys[keycode].pic_off_ptr;
+        Eina_List **hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, keycode, TIZEN_KEYROUTER_MODE_PICTURE_OFF);
+        EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+        Eina_List *pic_off_ptr_list = *hardkey_list;
         EINA_LIST_FOREACH(pic_off_ptr_list, l, key_node_data)
           {
              if (key_node_data)
@@ -277,7 +279,9 @@ _e_keyrouter_send_key_events_release(int type, Ecore_Event_Key *ev, E_Device *de
 
    /* Deliver release  clean up pressed key list */
    g_rec_mutex_lock(&krt->grab_key_mutex);
-   Eina_List *press_ptr_list = krt->HardKeys[ev->keycode].press_ptr;
+   Eina_List **hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, ev->keycode, TIZEN_KEYROUTER_MODE_PRESSED);
+   EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+   Eina_List *press_ptr_list = *hardkey_list;
    EINA_LIST_FREE(press_ptr_list, key_node_data)
      {
         if (key_node_data->focused == EINA_TRUE)
@@ -341,7 +345,7 @@ _e_keyrouter_send_key_events_release(int type, Ecore_Event_Key *ev, E_Device *de
 
         E_FREE(key_node_data);
      }
-   krt->HardKeys[ev->keycode].press_ptr = NULL;
+   *hardkey_list = NULL;
    g_rec_mutex_unlock(&krt->grab_key_mutex);
 }
 
@@ -359,6 +363,7 @@ _e_keyrouter_send_key_events_press(int type, Ecore_Event_Key *ev, E_Device *dev)
    E_Keyrouter_Key_List_NodePtr key_node_data;
    Eina_List *l = NULL;
    Eina_List *shared_ptr_list = NULL;
+   Eina_List **hardkey_list = NULL;
 
    ec_focus = e_client_focused_get();
    surface_focus = e_comp_wl_client_surface_get(ec_focus);
@@ -378,7 +383,9 @@ _e_keyrouter_send_key_events_press(int type, Ecore_Event_Key *ev, E_Device *dev)
      key_event_log_type = KEY_EVENT_LOG_TYPE_KEY_UP;
 
    g_rec_mutex_lock(&krt->grab_key_mutex);
-   Eina_List *excl_ptr_list = krt->HardKeys[keycode].excl_ptr;
+   hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, keycode, TIZEN_KEYROUTER_MODE_EXCLUSIVE);
+   EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+   Eina_List *excl_ptr_list = *hardkey_list;
    EINA_LIST_FOREACH(excl_ptr_list, l, key_node_data)
      {
         if (key_node_data)
@@ -401,7 +408,9 @@ _e_keyrouter_send_key_events_press(int type, Ecore_Event_Key *ev, E_Device *dev)
    g_rec_mutex_unlock(&krt->grab_key_mutex);
 
    g_rec_mutex_lock(&krt->grab_key_mutex);
-   Eina_List *or_excl_ptr = krt->HardKeys[keycode].or_excl_ptr;
+   hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, keycode, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE);
+   EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+   Eina_List *or_excl_ptr = *hardkey_list;
    EINA_LIST_FOREACH(or_excl_ptr, l, key_node_data)
      {
         if (key_node_data)
@@ -427,7 +436,9 @@ _e_keyrouter_send_key_events_press(int type, Ecore_Event_Key *ev, E_Device *dev)
    if (surface_focus)
      {
         g_rec_mutex_lock(&krt->grab_key_mutex);
-        Eina_List *top_ptr_list = krt->HardKeys[keycode].top_ptr;
+        hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, keycode, TIZEN_KEYROUTER_MODE_TOPMOST);
+        EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+        Eina_List *top_ptr_list = *hardkey_list;
         EINA_LIST_FOREACH(top_ptr_list, l, key_node_data)
           {
              if (key_node_data)
@@ -452,7 +463,7 @@ _e_keyrouter_send_key_events_press(int type, Ecore_Event_Key *ev, E_Device *dev)
 
                   if (_e_keyrouter_check_top_visible_window(ec_focus, keycode))
                     {
-                       E_Keyrouter_Key_List_NodePtr top_key_node_data = eina_list_data_get(krt->HardKeys[keycode].top_ptr);
+                       E_Keyrouter_Key_List_NodePtr top_key_node_data = eina_list_data_get(top_ptr_list);
 
                        _e_keyrouter_send_key_event(type, top_key_node_data->surface, NULL, ev, dev, top_key_node_data->focused,
                                                    TIZEN_KEYROUTER_MODE_TOPMOST);
@@ -477,7 +488,9 @@ _e_keyrouter_send_key_events_press(int type, Ecore_Event_Key *ev, E_Device *dev)
      }
 
    g_rec_mutex_lock(&krt->grab_key_mutex);
-   shared_ptr_list = krt->HardKeys[keycode].shared_ptr;
+   hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, keycode, TIZEN_KEYROUTER_MODE_SHARED);
+   EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+   shared_ptr_list = *hardkey_list;
    g_rec_mutex_unlock(&krt->grab_key_mutex);
 
    if (shared_ptr_list)
@@ -495,7 +508,9 @@ need_shared:
         if (res)
           {
              g_rec_mutex_lock(&krt->grab_key_mutex);
-             shared_ptr_list = krt->HardKeys[keycode].shared_ptr;
+             hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, keycode, TIZEN_KEYROUTER_MODE_SHARED);
+             EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+             shared_ptr_list = *hardkey_list;
              EINA_LIST_FOREACH(shared_ptr_list, l, key_node_data)
                {
                   if (key_node_data)
@@ -592,7 +607,7 @@ static Eina_Bool
 _e_keyrouter_check_top_visible_window(E_Client *ec_focus, int arr_idx)
 {
    E_Client *ec_top = NULL;
-   Eina_List *l = NULL, *l_next = NULL;
+   Eina_List *l = NULL, *l_next = NULL, **hardkey_list = NULL;
    E_Keyrouter_Key_List_NodePtr key_node_data = NULL;
 
    ec_top = e_client_top_get();
@@ -612,14 +627,16 @@ _e_keyrouter_check_top_visible_window(E_Client *ec_focus, int arr_idx)
 
         /* TODO: Check this client is located inside a display boundary */
         g_rec_mutex_lock(&krt->grab_key_mutex);
-        Eina_List *top_ptr_list = krt->HardKeys[arr_idx].top_ptr;
+        hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, arr_idx, TIZEN_KEYROUTER_MODE_TOPMOST);
+        EINA_SAFETY_ON_NULL_RETURN_VAL(hardkey_list, EINA_FALSE);
+        Eina_List *top_ptr_list = *hardkey_list;
         EINA_LIST_FOREACH_SAFE(top_ptr_list, l, l_next, key_node_data)
           {
              if (key_node_data)
                {
                   if (ec_top == e_client_from_surface_resource(key_node_data->surface))
                     {
-                       krt->HardKeys[arr_idx].top_ptr = eina_list_promote_list(krt->HardKeys[arr_idx].top_ptr, l);
+                       krt->HardKeys[arr_idx].top_ptr = eina_list_promote_list(top_ptr_list, l);
                        KLDBG("Move a client(e_client: %p, wl_surface: %p) to first index of list(key: %d)",
                                 ec_top, key_node_data->surface, arr_idx);
                        g_rec_mutex_unlock(&krt->grab_key_mutex);
index 50be76f9edda011957fed6e649211d84e4d7f927..56e66ee8058bf693b570b247486bcc9cc9ed4453 100644 (file)
@@ -10,6 +10,7 @@
 #include "e_input_thread_client_intern.h"
 #include "e_security.h"
 #include "e_keyrouter_intern.h"
+#include "e_keyrouter_hardkeys_intern.h"
 
 #include <tizen-extension-server-protocol.h>
 
@@ -200,7 +201,9 @@ e_keyrouter_keycancel_send(struct wl_client *client, struct wl_resource *surface
    EINA_SAFETY_ON_NULL_RETURN(wc);
 
    g_rec_mutex_lock(&krt->grab_key_mutex);
-   press_ptr_list = krt->HardKeys[key].press_ptr;
+   Eina_List **hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PRESSED);
+   EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+   press_ptr_list = *hardkey_list;
    EINA_LIST_FOREACH(press_ptr_list, l, data)
      {
         if (surface)
@@ -599,7 +602,7 @@ e_keyrouter_wl_add_surface_destroy_listener(struct wl_resource *surface)
 EINTERN EINTERN Eina_Bool
 e_keyrouter_wl_util_do_privilege_check(struct wl_client *client, uint32_t mode, uint32_t keycode)
 {
-   Eina_Bool res = EINA_FALSE;
+   Eina_Bool res = EINA_FALSE, no_privcheck;
    Eina_List *l;
    struct wl_client *wc_data;
    pid_t pid = 0;
@@ -610,7 +613,8 @@ e_keyrouter_wl_util_do_privilege_check(struct wl_client *client, uint32_t mode,
    if (mode == TIZEN_KEYROUTER_MODE_TOPMOST)
      return EINA_TRUE;
 
-   if (krt->HardKeys[keycode].no_privcheck == EINA_TRUE &&
+   no_privcheck = e_keyrouter_hardkeys_no_privcheck_get(krt->HardKeys, keycode);
+   if (no_privcheck == EINA_TRUE &&
        mode == TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE)
      return EINA_TRUE;