fprintf(log_fl, " ----- End -----\n\n");
fprintf(log_fl, " ----- Grabbed keys Info -----\n\n");
- g_rec_mutex_lock(&krt->grab_key_mutex);
for (i = 8; i <= krt->max_tizen_hwkeys; i++)
{
if (!krt->HardKeys[i].keycode) continue;
fprintf(log_fl, "\n");
}
- g_rec_mutex_unlock(&krt->grab_key_mutex);
-
fprintf(log_fl, " ----- End -----\n\n");
fclose(log_fl);
static void
_e_keyrouter_keygrab_print(void *data EINA_UNUSED, const char *log_path)
{
- _e_keyrouter_input_thread_keygrab_print((void *)log_path);
+ e_input_backend_thread_safe_call(_e_keyrouter_input_thread_keygrab_print, (void *)log_path, strlen(log_path)+1);
}
static Eina_Bool
krt->HardKeys = E_NEW(E_Keyrouter_Grabbed_Key, kconf->max_keycode + 1);
EINA_SAFETY_ON_NULL_RETURN_VAL(krt->HardKeys, EINA_FALSE);
- g_rec_mutex_lock(&krt->grab_key_mutex);
-
krt->numTizenHWKeys = kconf->num_keycode;
krt->max_tizen_hwkeys = kconf->max_keycode;
}
}
- g_rec_mutex_unlock(&krt->grab_key_mutex);
-
if (e_comp_wl_input_keymap_cache_file_use_get() == EINA_FALSE)
{
KLINF("Server create a new cache file: %s", e_comp_wl_input_keymap_path_get(names));
krt = E_NEW(E_Keyrouter, 1);
EINA_SAFETY_ON_NULL_GOTO(krt, err);
- g_rec_mutex_init(&krt->grab_key_mutex);
-
kconfig = E_NEW(E_Keyrouter_Config_Data, 1);
EINA_SAFETY_ON_NULL_GOTO(kconfig, err);
krt->conf = kconfig;
_e_keyrouter_deinit_handlers();
- 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_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);
/* TODO: free allocated memory */
E_API void
e_keyrouter_keygrab_list_lock()
{
- g_rec_mutex_lock(&krt->grab_key_mutex);
}
E_API void
e_keyrouter_keygrab_list_unlock()
{
- g_rec_mutex_unlock(&krt->grab_key_mutex);
}
static Eina_Bool
_e_keyrouter_is_key_grabbed(int key)
{
- g_rec_mutex_lock(&krt->grab_key_mutex);
-
if (!krt->HardKeys[key].keycode)
{
- 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_rec_mutex_unlock(&krt->grab_key_mutex);
return EINA_TRUE;
}
- g_rec_mutex_unlock(&krt->grab_key_mutex);
-
return EINA_FALSE;
}
return EINA_FALSE;
}
- g_rec_mutex_lock(&krt->grab_key_mutex);
-
if (!krt->HardKeys[ev->keycode].keycode)
{
- g_rec_mutex_unlock(&krt->grab_key_mutex);
return EINA_FALSE;
}
- g_rec_mutex_unlock(&krt->grab_key_mutex);
-
return EINA_TRUE;
}
E_FREE(keyname);
EINA_SAFETY_ON_NULL_GOTO(key_release, failed);
- g_rec_mutex_lock(&krt->grab_key_mutex);
press_ptr_list = krt->HardKeys[keycode].press_ptr;
EINA_LIST_FREE(press_ptr_list, key_node_data)
{
}
krt->HardKeys[keycode].press_ptr = NULL;
- 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_rec_mutex_lock(&krt->grab_key_mutex);
Eina_List *pic_off_ptr_list = krt->HardKeys[keycode].pic_off_ptr;
EINA_LIST_FOREACH(pic_off_ptr_list, l, 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_rec_mutex_lock(&krt->grab_key_mutex);
Eina_List *press_ptr_list = krt->HardKeys[ev->keycode].press_ptr;
EINA_LIST_FREE(press_ptr_list, key_node_data)
{
E_FREE(key_node_data);
}
krt->HardKeys[ev->keycode].press_ptr = NULL;
- g_rec_mutex_unlock(&krt->grab_key_mutex);
}
static void
return;
}
- g_rec_mutex_lock(&krt->grab_key_mutex);
Eina_List *excl_ptr_list = krt->HardKeys[keycode].excl_ptr;
EINA_LIST_FOREACH(excl_ptr_list, l, 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_rec_mutex_lock(&krt->grab_key_mutex);
Eina_List *or_excl_ptr = krt->HardKeys[keycode].or_excl_ptr;
EINA_LIST_FOREACH(or_excl_ptr, l, 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_rec_mutex_lock(&krt->grab_key_mutex);
Eina_List *top_ptr_list = krt->HardKeys[keycode].top_ptr;
EINA_LIST_FOREACH(top_ptr_list, l, 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_rec_mutex_lock(&krt->grab_key_mutex);
shared_ptr_list = krt->HardKeys[keycode].shared_ptr;
- g_rec_mutex_unlock(&krt->grab_key_mutex);
-
if (shared_ptr_list)
{
need_shared:
}
if (res)
{
- g_rec_mutex_lock(&krt->grab_key_mutex);
shared_ptr_list = krt->HardKeys[keycode].shared_ptr;
EINA_LIST_FOREACH(shared_ptr_list, l, key_node_data)
{
}
}
}
- g_rec_mutex_unlock(&krt->grab_key_mutex);
}
}
}
}
/* TODO: Check this client is located inside a display boundary */
- g_rec_mutex_lock(&krt->grab_key_mutex);
Eina_List *top_ptr_list = krt->HardKeys[arr_idx].top_ptr;
EINA_LIST_FOREACH_SAFE(top_ptr_list, l, l_next, key_node_data)
{
krt->HardKeys[arr_idx].top_ptr = eina_list_promote_list(krt->HardKeys[arr_idx].top_ptr, l);
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);
E_Input_Event_Handler *_key_down_handler;
E_Input_Event_Handler *_key_up_handler;
EINA_DEPRECATED GMutex event_handler_mutex;
- GRecMutex grab_key_mutex;
+ EINA_DEPRECATED GRecMutex grab_key_mutex;
};
struct _E_Keyrouter_Grab_Request {
if (mode == TIZEN_KEYROUTER_MODE_EXCLUSIVE)
{
- g_rec_mutex_lock(&krt->grab_key_mutex);
if (krt->HardKeys[key].excl_ptr != NULL)
{
- g_rec_mutex_unlock(&krt->grab_key_mutex);
return TIZEN_KEYROUTER_ERROR_GRABBED_ALREADY;
}
- g_rec_mutex_unlock(&krt->grab_key_mutex);
}
if (mode == TIZEN_KEYROUTER_MODE_TOPMOST)
Eina_List *keylist_ptr = NULL, *l = NULL;
E_Keyrouter_Key_List_NodePtr key_node_data = NULL;
- g_rec_mutex_lock(&krt->grab_key_mutex);
switch(mode)
{
case TIZEN_KEYROUTER_MODE_EXCLUSIVE:
- 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_rec_mutex_unlock(&krt->grab_key_mutex);
return TIZEN_KEYROUTER_ERROR_INVALID_MODE;
}
{
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_SAFETY_ON_TRUE_RETURN_VAL(((!surface) && (!wc)), EINA_FALSE);
- g_rec_mutex_lock(&krt->grab_key_mutex);
list = _e_keyrouter_get_list(mode, key);
if (!list)
{
}
end:
- g_rec_mutex_unlock(&krt->grab_key_mutex);
return ret;
}
new_keyptr->focused = focused;
new_keyptr->status = E_KRT_CSTAT_ALIVE;
- g_rec_mutex_lock(&krt->grab_key_mutex);
-
switch(mode)
{
case TIZEN_KEYROUTER_MODE_EXCLUSIVE:
default:
KLWRN("Unknown key(%d) and grab mode(%d)", key, mode);
E_FREE(new_keyptr);
- g_rec_mutex_unlock(&krt->grab_key_mutex);
return TIZEN_KEYROUTER_ERROR_INVALID_MODE;
}
- 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_rec_mutex_lock(&krt->grab_key_mutex);
list = _e_keyrouter_get_list(mode, key);
if (!list)
{
- g_rec_mutex_unlock(&krt->grab_key_mutex);
return;
}
KLDBG("Remove a %s Mode Grabbed key(%d) by wc(%p)", e_keyrouter_mode_to_string(mode), key, wc);
}
}
-
- g_rec_mutex_unlock(&krt->grab_key_mutex);
}
static void
EINA_SAFETY_ON_TRUE_RETURN(((!surface) && (!wc)));
- g_rec_mutex_lock(&krt->grab_key_mutex);
-
for (i = 0; i <= krt->max_tizen_hwkeys; i++)
{
if (0 == krt->HardKeys[i].keycode) continue;
}
}
}
- g_rec_mutex_unlock(&krt->grab_key_mutex);
}
void
keygrab_data.client = wc;
INF("[%s] surface(%p), client(%p)\n", __func__, surface, wc);
- _e_keyrouter_remove_client_from_list(&keygrab_data);
+ e_input_backend_thread_safe_call(_e_keyrouter_remove_client_from_list, &keygrab_data, sizeof(E_Input_Thread_Request_Keygrab_Data));
}
int
EINA_SAFETY_ON_NULL_RETURN(wc);
- g_rec_mutex_lock(&krt->grab_key_mutex);
press_ptr_list = krt->HardKeys[key].press_ptr;
EINA_LIST_FOREACH(press_ptr_list, l, data)
{
}
}
}
- g_rec_mutex_unlock(&krt->grab_key_mutex);
}
static int
keygrab_data->client, keygrab_data->surface, e_keyrouter_util_get_pid(keygrab_data->client, keygrab_data->surface), res);
tizen_keyrouter_send_keygrab_notify(keygrab_data->resource, keygrab_data->surface, keygrab_data->key, keygrab_data->mode, res);
+
+ e_input_wl_events_flush();
}
/* tizen_keyrouter_set_keygrab request handler */
keygrab_data.mode = mode;
INF("client: %p, surface: %p, key: %d, mode: %d\n", keygrab_data.client, keygrab_data.surface, keygrab_data.key, keygrab_data.mode);
- _e_keyrouter_input_thread_keygrab_set(&keygrab_data);
+ e_input_backend_thread_safe_call(_e_keyrouter_input_thread_keygrab_set, &keygrab_data, sizeof(E_Input_Thread_Request_Keygrab_Data));
}
static void
e_keyrouter_util_get_pid(keygrab_data->client, keygrab_data->surface), res);
tizen_keyrouter_send_keygrab_notify(keygrab_data->resource, keygrab_data->surface, keygrab_data->key, TIZEN_KEYROUTER_MODE_NONE, res);
+
+ e_input_wl_events_flush();
}
/* tizen_keyrouter unset_keygrab request handler */
keygrab_data.mode = TIZEN_KEYROUTER_MODE_NONE; /* UNUSED */
INF("client: %p, surface: %p, key: %d\n", keygrab_data.client, keygrab_data.surface, keygrab_data.key);
- _e_keyrouter_input_thread_keygrab_unset(&keygrab_data);
+ e_input_backend_thread_safe_call(_e_keyrouter_input_thread_keygrab_unset, &keygrab_data, sizeof(E_Input_Thread_Request_Keygrab_Data));
}
/* tizen_keyrouter get_keygrab_status request handler */