From 71b3fd98f69b10a59aacaec5e04a51f5c329e6f2 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Mon, 5 Jun 2023 16:28:04 +0900 Subject: [PATCH] Add mutex for input_key_grabs list Change-Id: I0815d8d882adfbe301b334403d2b39f915f2dc58 Signed-off-by: Jihoon Kim --- src/bin/e_client.c | 8 +++++++- src/bin/e_comp.c | 15 +++++++++++++++ src/bin/e_comp_wl.c | 3 +++ src/bin/e_keyrouter_wl.c | 2 ++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/bin/e_client.c b/src/bin/e_client.c index e5f8b09..1b6bbc1 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -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; diff --git a/src/bin/e_comp.c b/src/bin/e_comp.c index b4a6fde..3971def 100644 --- a/src/bin/e_comp.c +++ b/src/bin/e_comp.c @@ -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); diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index 225acae..12d5b68 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -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); diff --git a/src/bin/e_keyrouter_wl.c b/src/bin/e_keyrouter_wl.c index 2ec87e4..45081e4 100644 --- a/src/bin/e_keyrouter_wl.c +++ b/src/bin/e_keyrouter_wl.c @@ -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; } -- 2.7.4