E_Keyrouter_Key_List_NodePtr key_node_data;
int pid = 0;
char *pname = NULL, *cmd = NULL;
+ Eina_List *press_ptr_list = NULL;
key_cancel = _e_keyrouter_key_create("Cancel");
EINA_SAFETY_ON_NULL_RETURN(key_cancel);
E_FREE(keyname);
EINA_SAFETY_ON_NULL_GOTO(key_release, failed);
- EINA_LIST_FREE(krt->HardKeys[keycode].press_ptr, key_node_data)
+ g_mutex_lock(&e_comp->input_key_grabs_mutex);
+ press_ptr_list = krt->HardKeys[keycode].press_ptr;
+ g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+
+ EINA_LIST_FREE(press_ptr_list, key_node_data)
{
_e_keyrouter_key_send(ECORE_EVENT_KEY_DOWN, key_cancel, NULL, key_node_data);
_e_keyrouter_key_send(ECORE_EVENT_KEY_UP, key_release, NULL, key_node_data);
E_FREE(key_node_data);
}
+
+ g_mutex_lock(&e_comp->input_key_grabs_mutex);
krt->HardKeys[keycode].press_ptr = NULL;
+ g_mutex_unlock(&e_comp->input_key_grabs_mutex);
_e_keyrouter_key_free(key_cancel);
_e_keyrouter_key_free(key_release);
struct wl_resource *resource = NULL;
struct wl_client *wc = NULL;
E_Keyrouter_Key_List_NodePtr data;
+ Eina_List *press_ptr_list = NULL;
if (surface) wc = wl_resource_get_client(surface);
else wc = client;
EINA_SAFETY_ON_NULL_RETURN(wc);
- EINA_LIST_FOREACH(krt->HardKeys[key].press_ptr, l, data)
+ g_mutex_lock(&e_comp->input_key_grabs_mutex);
+ press_ptr_list = krt->HardKeys[key].press_ptr;
+ g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+
+ EINA_LIST_FOREACH(press_ptr_list, l, data)
{
if (surface)
{