krt->HardKeys = E_NEW(E_Keyrouter_Grabbed_Key, kconf->max_keycode + 1);
EINA_SAFETY_ON_NULL_RETURN_VAL(krt->HardKeys, EINA_FALSE);
- g_mutex_lock(&krt->grab_key_mutex);
+ g_rec_mutex_lock(&krt->grab_key_mutex);
krt->numTizenHWKeys = kconf->num_keycode;
krt->max_tizen_hwkeys = kconf->max_keycode;
}
}
- g_mutex_unlock(&krt->grab_key_mutex);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
if (e_comp_wl_input_keymap_cache_file_use_get() == EINA_FALSE)
{
if (e_input_thread_mode_get())
g_mutex_init(&krt->event_handler_mutex);
- g_mutex_init(&krt->grab_key_mutex);
+ g_rec_mutex_init(&krt->grab_key_mutex);
kconfig = E_NEW(E_Keyrouter_Config_Data, 1);
EINA_SAFETY_ON_NULL_GOTO(kconfig, err);
_e_keyrouter_deinit_handlers();
- g_mutex_lock(&krt->grab_key_mutex);
+ g_rec_mutex_lock(&krt->grab_key_mutex);
for (i = 0; i <= krt->max_tizen_hwkeys; i++)
{
if (krt->HardKeys[i].keyname)
E_FREE(keycode_data);
}
E_FREE(krt->HardKeys);
- g_mutex_unlock(&krt->grab_key_mutex);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
EINA_LIST_FREE(krt->ignore_list, keycode_data)
E_FREE(keycode_data);
krt->longkey.timer = 0;
}
+ g_rec_mutex_clear(&krt->grab_key_mutex);
+
e_keyrouter_wl_shutdown();
E_FREE(krt);
static Eina_Bool
_e_keyrouter_is_key_grabbed(int key)
{
- g_mutex_lock(&krt->grab_key_mutex);
+ g_rec_mutex_lock(&krt->grab_key_mutex);
if (!krt->HardKeys[key].keycode)
{
- g_mutex_unlock(&krt->grab_key_mutex);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
return EINA_FALSE;
}
if (krt->HardKeys[key].excl_ptr ||
krt->HardKeys[key].top_ptr ||
krt->HardKeys[key].shared_ptr)
{
- g_mutex_unlock(&krt->grab_key_mutex);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
return EINA_TRUE;
}
- g_mutex_unlock(&krt->grab_key_mutex);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
return EINA_FALSE;
}
return EINA_FALSE;
}
- g_mutex_lock(&krt->grab_key_mutex);
+ g_rec_mutex_lock(&krt->grab_key_mutex);
if (!krt->HardKeys[ev->keycode].keycode)
{
- g_mutex_unlock(&krt->grab_key_mutex);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
return EINA_FALSE;
}
- g_mutex_unlock(&krt->grab_key_mutex);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
return EINA_TRUE;
}
E_FREE(keyname);
EINA_SAFETY_ON_NULL_GOTO(key_release, failed);
- g_mutex_lock(&krt->grab_key_mutex);
+ g_rec_mutex_lock(&krt->grab_key_mutex);
press_ptr_list = krt->HardKeys[keycode].press_ptr;
- g_mutex_unlock(&krt->grab_key_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_FREE(key_node_data);
}
- g_mutex_lock(&krt->grab_key_mutex);
krt->HardKeys[keycode].press_ptr = NULL;
- g_mutex_unlock(&krt->grab_key_mutex);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
_e_keyrouter_key_free(key_cancel);
_e_keyrouter_key_free(key_release);
if (krt->isPictureOffEnabled == 1)
{
- g_mutex_lock(&krt->grab_key_mutex);
+ g_rec_mutex_lock(&krt->grab_key_mutex);
Eina_List *pic_off_ptr_list = krt->HardKeys[keycode].pic_off_ptr;
- g_mutex_unlock(&krt->grab_key_mutex);
-
EINA_LIST_FOREACH(pic_off_ptr_list, l, key_node_data)
{
if (key_node_data)
if(cmd) E_FREE(cmd);
}
}
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
return;
}
E_Keyrouter_Event_Data *key_data = NULL;
/* Deliver release clean up pressed key list */
- g_mutex_lock(&krt->grab_key_mutex);
+ g_rec_mutex_lock(&krt->grab_key_mutex);
Eina_List *press_ptr_list = krt->HardKeys[ev->keycode].press_ptr;
- g_mutex_unlock(&krt->grab_key_mutex);
EINA_LIST_FREE(press_ptr_list, key_node_data)
{
if (key_node_data->focused == EINA_TRUE)
E_FREE(key_node_data);
}
- g_mutex_lock(&krt->grab_key_mutex);
krt->HardKeys[ev->keycode].press_ptr = NULL;
- g_mutex_unlock(&krt->grab_key_mutex);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
}
static void
return;
}
- g_mutex_lock(&krt->grab_key_mutex);
+ g_rec_mutex_lock(&krt->grab_key_mutex);
Eina_List *excl_ptr_list = krt->HardKeys[keycode].excl_ptr;
- g_mutex_unlock(&krt->grab_key_mutex);
EINA_LIST_FOREACH(excl_ptr_list, l, key_node_data)
{
if (key_node_data)
key_node_data->surface, key_node_data->wc, pid, pname ?: "Unknown");
if(pname) E_FREE(pname);
if(cmd) E_FREE(cmd);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
return;
}
}
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
- g_mutex_lock(&krt->grab_key_mutex);
+ g_rec_mutex_lock(&krt->grab_key_mutex);
Eina_List *or_excl_ptr = krt->HardKeys[keycode].or_excl_ptr;
- g_mutex_unlock(&krt->grab_key_mutex);
EINA_LIST_FOREACH(or_excl_ptr, l, key_node_data)
{
if (key_node_data)
key_node_data->surface, key_node_data->wc, pid, pname ?: "Unknown");
if(pname) E_FREE(pname);
if(cmd) E_FREE(cmd);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
return;
}
}
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
// Top position grab must need a focus surface.
if (surface_focus)
{
- g_mutex_lock(&krt->grab_key_mutex);
+ g_rec_mutex_lock(&krt->grab_key_mutex);
Eina_List *top_ptr_list = krt->HardKeys[keycode].top_ptr;
- g_mutex_unlock(&krt->grab_key_mutex);
EINA_LIST_FOREACH(top_ptr_list, l, key_node_data)
{
if (key_node_data)
if(pname) E_FREE(pname);
if(cmd) E_FREE(cmd);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
return;
}
krt->isWindowStackChanged = EINA_FALSE;
if(pname) E_FREE(pname);
if(cmd) E_FREE(cmd);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
return;
}
break;
}
}
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
goto need_shared;
}
- g_mutex_lock(&krt->grab_key_mutex);
+ g_rec_mutex_lock(&krt->grab_key_mutex);
shared_ptr_list = krt->HardKeys[keycode].shared_ptr;
- g_mutex_unlock(&krt->grab_key_mutex);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
if (shared_ptr_list)
{
}
if (res)
{
- g_mutex_lock(&krt->grab_key_mutex);
+ g_rec_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)
}
}
}
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
}
}
}
}
/* TODO: Check this client is located inside a display boundary */
- g_mutex_lock(&krt->grab_key_mutex);
+ g_rec_mutex_lock(&krt->grab_key_mutex);
Eina_List *top_ptr_list = krt->HardKeys[arr_idx].top_ptr;
- g_mutex_unlock(&krt->grab_key_mutex);
EINA_LIST_FOREACH_SAFE(top_ptr_list, l, l_next, 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);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
return EINA_TRUE;
}
}
}
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
+
if (ec_top == ec_focus)
{
KLDBG("The e_client(%p) is a focus client", ec_top);
Eina_List *keylist_ptr = NULL, *l = NULL;
E_Keyrouter_Key_List_NodePtr key_node_data = NULL;
- g_mutex_lock(&krt->grab_key_mutex);
+ g_rec_mutex_lock(&krt->grab_key_mutex);
switch(mode)
{
case TIZEN_KEYROUTER_MODE_EXCLUSIVE:
- g_mutex_unlock(&krt->grab_key_mutex);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
return TIZEN_KEYROUTER_ERROR_NONE;
case TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE:
break;
default:
KLWRN("Unknown key(%d) and grab mode(%d)", key, mode);
- g_mutex_unlock(&krt->grab_key_mutex);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
return TIZEN_KEYROUTER_ERROR_INVALID_MODE;
}
- g_mutex_unlock(&krt->grab_key_mutex);
EINA_LIST_FOREACH(keylist_ptr, l, key_node_data)
{
{
KLDBG("The key(%d) is already grabbed same mode(%s) on the same wl_surface %p",
key, e_keyrouter_mode_to_string(mode), surface);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
return TIZEN_KEYROUTER_ERROR_GRABBED_ALREADY;
}
}
{
KLDBG("The key(%d) is already grabbed same mode(%s) on the same wl_client %p",
key, e_keyrouter_mode_to_string(mode), wc);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
return TIZEN_KEYROUTER_ERROR_GRABBED_ALREADY;
}
}
}
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
return TIZEN_KEYROUTER_ERROR_NONE;
}
Eina_List **list = NULL;
Eina_List *l = NULL, *l_next = NULL;
E_Keyrouter_Key_List_NodePtr key_node_data = NULL;
+ Eina_Bool ret = EINA_FALSE;
EINA_SAFETY_ON_TRUE_RETURN_VAL(((!surface) && (!wc)), EINA_FALSE);
- g_mutex_lock(&krt->grab_key_mutex);
+ g_rec_mutex_lock(&krt->grab_key_mutex);
list = _e_keyrouter_get_list(mode, key);
if (!list)
{
- g_mutex_unlock(&krt->grab_key_mutex);
- return EINA_FALSE;
+ ret = EINA_FALSE;
+ goto end;
}
EINA_LIST_FOREACH_SAFE(*list, l, l_next, key_node_data)
if ((surface) && (surface == key_node_data->surface))
{
- g_mutex_unlock(&krt->grab_key_mutex);
- return EINA_TRUE;
+ ret = EINA_TRUE;
+ goto end;
}
else if ((wc == key_node_data->wc))
{
- g_mutex_unlock(&krt->grab_key_mutex);
- return EINA_TRUE;
+ ret = EINA_TRUE;
+ goto end;
}
}
- g_mutex_unlock(&krt->grab_key_mutex);
+end:
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
- return EINA_FALSE;
+ return ret;
}
new_keyptr->focused = focused;
new_keyptr->status = E_KRT_CSTAT_ALIVE;
- g_mutex_lock(&krt->grab_key_mutex);
+ g_rec_mutex_lock(&krt->grab_key_mutex);
switch(mode)
{
default:
KLWRN("Unknown key(%d) and grab mode(%d)", key, mode);
E_FREE(new_keyptr);
- g_mutex_unlock(&krt->grab_key_mutex);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
return TIZEN_KEYROUTER_ERROR_INVALID_MODE;
}
- g_mutex_unlock(&krt->grab_key_mutex);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
if (TIZEN_KEYROUTER_MODE_PRESSED != mode)
{
Eina_List *l = NULL, *l_next = NULL;
E_Keyrouter_Key_List_NodePtr key_node_data = NULL;
- g_mutex_lock(&krt->grab_key_mutex);
+ g_rec_mutex_lock(&krt->grab_key_mutex);
list = _e_keyrouter_get_list(mode, key);
if (!list)
{
- g_mutex_unlock(&krt->grab_key_mutex);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
return;
}
}
}
- g_mutex_unlock(&krt->grab_key_mutex);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
}
void
EINA_SAFETY_ON_TRUE_RETURN(((!surface) && (!wc)));
- g_mutex_lock(&krt->grab_key_mutex);
+ g_rec_mutex_lock(&krt->grab_key_mutex);
for (i = 0; i <= krt->max_tizen_hwkeys; i++)
{
}
}
- g_mutex_unlock(&krt->grab_key_mutex);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
}
int