e_comp_wl: simplify code in _e_comp_wl_key_down/up() 03/324403/1
authorduna.oh <duna.oh@samsung.com>
Thu, 15 May 2025 11:41:56 +0000 (20:41 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Fri, 16 May 2025 09:02:35 +0000 (18:02 +0900)
Change-Id: I392d9f1956a90709deaba9d08b6ba00abd22c58e

src/bin/server/e_comp_wl.c
src/bin/server/e_devicemgr_wl.c

index 23274cf3d178562902f8070cb2efdf71aac4adef..7877c62467f35f5399c711c76a076c498d60f218 100644 (file)
@@ -4017,7 +4017,7 @@ e_comp_wl_output_remove(const char *id)
 }
 
 static void
-_e_comp_wl_key_send(Ecore_Event_Key *ev, E_Device *dev, enum wl_keyboard_key_state state, Eina_List *key_list, E_Client *ec)
+_e_comp_wl_key_send_to_focused_list(Ecore_Event_Key *ev, E_Device *dev, enum wl_keyboard_key_state state, E_Client *ec)
 {
    struct wl_resource *res;
    Eina_List *l;
@@ -4034,13 +4034,9 @@ _e_comp_wl_key_send(Ecore_Event_Key *ev, E_Device *dev, enum wl_keyboard_key_sta
 
    comp_conf = e_comp_config_get();
 
-   if (ec && ec->comp_data)
-     {
-        struct wl_resource *surface = e_comp_wl_client_surface_get(ec);
-
-        if (surface)
-          wc = wl_resource_get_client(surface);
-     }
+   struct wl_resource *surface = e_comp_wl_client_surface_get(ec);
+   if (surface)
+     wc = wl_resource_get_client(surface);
 
    if (e_config->key_input_ttrace_enable)
      {
@@ -4062,7 +4058,8 @@ _e_comp_wl_key_send(Ecore_Event_Key *ev, E_Device *dev, enum wl_keyboard_key_sta
           }
      }
 
-   EINA_LIST_FOREACH(key_list, l, res)
+   g_rec_mutex_lock(&e_comp_input_key->kbd.focused_mutex);
+   EINA_LIST_FOREACH(e_comp_input_key->kbd.focused, l, res)
      {
         if (wl_resource_get_client(res) != wc) continue;
 
@@ -4074,6 +4071,7 @@ _e_comp_wl_key_send(Ecore_Event_Key *ev, E_Device *dev, enum wl_keyboard_key_sta
                              keycode, state);
         TRACE_INPUT_END();
      }
+   g_rec_mutex_unlock(&e_comp_input_key->kbd.focused_mutex);
 
    if (e_config->key_input_ttrace_enable)
      {
@@ -4099,7 +4097,6 @@ _e_comp_wl_key_down(Ecore_Event_Key *ev, E_Device *dev)
      }
 
    keycode = (ev->keycode - 8);
-   if (!e_comp_wl_get()) return EINA_FALSE;
 
 #ifndef E_RELEASE_BUILD
    if ((ev->modifiers & ECORE_EVENT_MODIFIER_CTRL) &&
@@ -4134,29 +4131,28 @@ _e_comp_wl_key_down(Ecore_Event_Key *ev, E_Device *dev)
         ec = e_zone_focused_client_get(zone);
         ELOGF("INPUT", "Key Down. seat:%s zone_id:%d", ec, seat_name, e_zone_id_get(zone));
 
-        if (ec && ec->comp_data)
+        g_rec_mutex_lock(&e_comp_input_key->kbd.focused_mutex);
+        if (!e_comp_input_key->kbd.focused)
           {
-             g_rec_mutex_lock(&e_comp_input_key->kbd.focused_mutex);
-             if (e_comp_input_key->kbd.focused)
-               {
-                  _e_comp_wl_key_send(ev, dev, WL_KEYBOARD_KEY_STATE_PRESSED, e_comp_input_key->kbd.focused, ec);
+             g_rec_mutex_unlock(&e_comp_input_key->kbd.focused_mutex);
+             goto end;
+          }
+        g_rec_mutex_unlock(&e_comp_input_key->kbd.focused_mutex);
 
-                  /* A key only sent to clients is added to the list */
-                  e_comp_input_key->kbd.keys.size = (const char *)end - (const char *)e_comp_input_key->kbd.keys.data;
+        _e_comp_wl_key_send_to_focused_list(ev, dev, WL_KEYBOARD_KEY_STATE_PRESSED, ec);
 
-                  if (!(k = wl_array_add(&e_comp_input_key->kbd.keys, sizeof(*k))))
-                    {
-                       DBG("wl_array_add: Out of memory\n");
-                       g_rec_mutex_unlock(&e_comp_input_key->kbd.focused_mutex);
-                       return EINA_FALSE;
-                    }
-                  k->key = keycode;
-                  k->dev = ev->dev;
-               }
-             g_rec_mutex_unlock(&e_comp_input_key->kbd.focused_mutex);
+        /* A key only sent to clients is added to the list */
+        e_comp_input_key->kbd.keys.size = (const char *)end - (const char *)e_comp_input_key->kbd.keys.data;
+        if (!(k = wl_array_add(&e_comp_input_key->kbd.keys, sizeof(*k))))
+          {
+             DBG("wl_array_add: Out of memory\n");
+             return EINA_FALSE;
           }
+        k->key = keycode;
+        k->dev = ev->dev;
      }
 
+end:
    /* update modifier state */
    e_comp_wl_input_keyboard_state_update(keycode, EINA_TRUE);
 
@@ -4181,7 +4177,6 @@ _e_comp_wl_key_up(Ecore_Event_Key *ev, E_Device *dev)
 
    keycode = (ev->keycode - 8);
    delivered_key = 0;
-   if (!(e_comp_wl_get())) return EINA_FALSE;
 
    end = (E_Comp_Wl_Key_Data *)e_comp_input_key->kbd.keys.data + (e_comp_input_key->kbd.keys.size / sizeof(*k));
    for (k = e_comp_input_key->kbd.keys.data; k < end; k++)
@@ -4211,13 +4206,17 @@ _e_comp_wl_key_up(Ecore_Event_Key *ev, E_Device *dev)
         ELOGF("INPUT", "Key Up. seat:%s zone_id:%d", ec, seat_name, e_zone_id_get(zone));
 
         g_rec_mutex_lock(&e_comp_input_key->kbd.focused_mutex);
-        if (e_comp_input_key->kbd.focused)
+        if (!e_comp_input_key->kbd.focused)
           {
-             _e_comp_wl_key_send(ev, dev, WL_KEYBOARD_KEY_STATE_RELEASED, e_comp_input_key->kbd.focused, ec);
+             g_rec_mutex_unlock(&e_comp_input_key->kbd.focused_mutex);
+             goto end;
           }
         g_rec_mutex_unlock(&e_comp_input_key->kbd.focused_mutex);
+
+        _e_comp_wl_key_send_to_focused_list(ev, dev, WL_KEYBOARD_KEY_STATE_RELEASED, ec);
      }
 
+end:
    /* update modifier state */
    e_comp_wl_input_keyboard_state_update(keycode, EINA_FALSE);
 
index aaa6f118bce9bb03004995835f051d71e796de23..e54c1ace636db35df7c345b95430ddc94bdca8bf 100644 (file)
@@ -724,8 +724,6 @@ static const struct tizen_input_device_manager_interface _e_devicemgr_wl_impleme
 static void
 _e_devicemgr_wl_cb_unbind(struct wl_resource *resource)
 {
-   if(!e_comp_wl_get()) return;
-
    DMINF("Unbind tizen_input_device_manager: %u (client: %p)", wl_resource_get_id(resource), wl_resource_get_client(resource));
 
    g_tizen_devicemgr->mgr_resources = eina_list_remove(g_tizen_devicemgr->mgr_resources, resource);