Add mutex for input_key_grabs list 92/295192/2
authorJihoon Kim <jihoon48.kim@samsung.com>
Mon, 5 Jun 2023 07:28:04 +0000 (16:28 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Tue, 4 Jul 2023 07:32:31 +0000 (07:32 +0000)
Change-Id: I0815d8d882adfbe301b334403d2b39f915f2dc58
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
src/bin/e_client.c
src/bin/e_comp.c
src/bin/e_comp_wl.c
src/bin/e_keyrouter_wl.c

index e5f8b09..1b6bbc1 100644 (file)
@@ -5493,7 +5493,13 @@ e_client_refocus(void)
    EINA_LIST_FOREACH(e_client_focus_stack_get(), l, ec)
      if (ec->desk && ec->desk->visible && (!ec->iconic))
        {
-          if (e_comp->input_key_grabs || e_comp->input_mouse_grabs) break;
+          g_mutex_lock(&e_comp->input_key_grabs_mutex);
+          if (e_comp->input_key_grabs || e_comp->input_mouse_grabs)
+            {
+               g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+               break;
+            }
+          g_mutex_unlock(&e_comp->input_key_grabs_mutex);
           ELOGF("FOCUS", "focus set   | refocus", ec);
           e_client_frame_focus_set(ec, EINA_TRUE);
           break;
index b4a6fde..3971def 100644 (file)
@@ -454,6 +454,8 @@ e_comp_init(void)
    E_LIST_HANDLER_APPEND(handlers, ECORE_EVENT_SIGNAL_USER, _e_comp_signal_user,     NULL);
    E_LIST_HANDLER_APPEND(handlers, E_EVENT_COMP_OBJECT_ADD, _e_comp_object_add,      NULL);
 
+   g_mutex_init(&e_comp->input_key_grabs_mutex);
+
    return EINA_TRUE;
 }
 
@@ -522,6 +524,8 @@ e_comp_shutdown(void)
 
    E_FREE_FUNC(ignores, eina_hash_free);
 
+   g_mutex_clear(&e_comp->input_key_grabs_mutex);
+
    return 1;
 }
 
@@ -786,6 +790,7 @@ e_comp_grab_input(Eina_Bool mouse, Eina_Bool kbd)
    if (kbd || e_comp->input_mouse_grabs)
      kwin = e_comp->ee_win;
    //e_comp_override_add(); //nocomp condition
+   g_mutex_lock(&e_comp->input_key_grabs_mutex);
    if ((e_comp->input_mouse_grabs && e_comp->input_key_grabs) ||
        e_grabinput_get(mwin, 0, kwin))
      {
@@ -793,6 +798,8 @@ e_comp_grab_input(Eina_Bool mouse, Eina_Bool kbd)
         e_comp->input_mouse_grabs += mouse;
         e_comp->input_key_grabs += kbd;
      }
+   g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+
    return ret;
 }
 
@@ -805,12 +812,20 @@ e_comp_ungrab_input(Eina_Bool mouse, Eina_Bool kbd)
    kbd = !!kbd;
    if (e_comp->input_mouse_grabs)
      e_comp->input_mouse_grabs -= mouse;
+
+   g_mutex_lock(&e_comp->input_key_grabs_mutex);
    if (e_comp->input_key_grabs)
      e_comp->input_key_grabs -= kbd;
+   g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+
    if (mouse && (!e_comp->input_mouse_grabs))
      mwin = e_comp->ee_win;
+
+   g_mutex_lock(&e_comp->input_key_grabs_mutex);
    if (kbd && (!e_comp->input_key_grabs))
      kwin = e_comp->ee_win;
+   g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+
    //e_comp_override_timed_pop(); //nocomp condition
    if ((!mwin) && (!kwin)) return;
    e_grabinput_release(mwin, kwin);
index 225acae..12d5b68 100644 (file)
@@ -5300,6 +5300,7 @@ e_comp_wl_key_down(Ecore_Event_Key *ev, E_Device *dev)
      }
 
    g_mutex_unlock(&e_comp_wl->kbd.keys_mutex);
+   g_mutex_lock(&e_comp->input_key_grabs_mutex);
 
    if ((!e_client_action_get()) && (!e_comp->input_key_grabs))
      {
@@ -5330,6 +5331,8 @@ e_comp_wl_key_down(Ecore_Event_Key *ev, E_Device *dev)
           }
      }
 
+   g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+
    /* update modifier state */
    e_comp_wl_input_keyboard_state_update(keycode, EINA_TRUE);
 
index 2ec87e4..45081e4 100644 (file)
@@ -106,6 +106,7 @@ e_keyrouter_wl_key_send(Ecore_Event_Key *ev, E_Device *dev, Eina_Bool pressed, s
         return EINA_FALSE;
      }
 
+   g_mutex_lock(&e_comp->input_key_grabs_mutex);
    if ((!e_client_action_get()) && (!e_comp->input_key_grabs))
      {
         ec = e_client_focused_get();
@@ -129,6 +130,7 @@ e_keyrouter_wl_key_send(Ecore_Event_Key *ev, E_Device *dev, Eina_Bool pressed, s
              e_comp_wl_input_keyboard_state_update(keycode, pressed);
           }
      }
+   g_mutex_unlock(&e_comp->input_key_grabs_mutex);
    return !!ec;
 }