E_Keyrouter_Key_List_NodePtr key_node_data;
Eina_List *l = NULL;
+ Eina_List *shared_ptr_list = NULL;
ec_focus = e_client_focused_get();
surface_focus = e_keyrouter_util_get_surface_from_eclient(ec_focus);
goto need_shared;
}
- if (krt->HardKeys[keycode].shared_ptr)
+ g_mutex_lock(&krt->grab_key_mutex);
+ shared_ptr_list = krt->HardKeys[keycode].shared_ptr;
+ g_mutex_unlock(&krt->grab_key_mutex);
+
+ if (shared_ptr_list)
{
need_shared:
res = _e_keyrouter_send_key_events_focus(type, surface_focus, ev, dev, &delivered_surface);
}
if (res)
{
- EINA_LIST_FOREACH(krt->HardKeys[keycode].shared_ptr, l, key_node_data)
+ g_mutex_lock(&krt->grab_key_mutex);
+ shared_ptr_list = krt->HardKeys[keycode].shared_ptr;
+ g_mutex_unlock(&krt->grab_key_mutex);
+ EINA_LIST_FOREACH(shared_ptr_list, l, key_node_data)
{
if (key_node_data)
{
{
if (ec_top == e_client_from_surface_resource(key_node_data->surface))
{
+ g_mutex_lock(&krt->grab_key_mutex);
krt->HardKeys[arr_idx].top_ptr = eina_list_promote_list(krt->HardKeys[arr_idx].top_ptr, l);
+ g_mutex_unlock(&krt->grab_key_mutex);
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);
return EINA_TRUE;