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;
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;
}
E_FREE_FUNC(ignores, eina_hash_free);
+ g_mutex_clear(&e_comp->input_key_grabs_mutex);
+
return 1;
}
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))
{
e_comp->input_mouse_grabs += mouse;
e_comp->input_key_grabs += kbd;
}
+ g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+
return ret;
}
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);
}
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))
{
}
}
+ g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+
/* update modifier state */
e_comp_wl_input_keyboard_state_update(keycode, EINA_TRUE);
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();
e_comp_wl_input_keyboard_state_update(keycode, pressed);
}
}
+ g_mutex_unlock(&e_comp->input_key_grabs_mutex);
return !!ec;
}