_e_keyrouter_input_thread_keygrab_print(void *data)
{
char *log_path = (char *)data;
- Eina_List *l;
+ Eina_List *l, **hardkey_list;
+ Eina_List *excl_ptr_list, *or_excl_ptr_list, *top_ptr_list, *shared_ptr_list;
E_Keyrouter_Key_List_NodePtr kdata;
E_Client *ec_focus;
struct wl_resource *surface_focus;
if (!e_keyrouter_hardkeys_keycode_available(krt->HardKeys, i))
continue;
- if (!krt->HardKeys[i].excl_ptr &&
- !krt->HardKeys[i].or_excl_ptr &&
- !krt->HardKeys[i].top_ptr &&
- !krt->HardKeys[i].shared_ptr)
+ hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, i, TIZEN_KEYROUTER_MODE_EXCLUSIVE);
+ EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+ excl_ptr_list = *hardkey_list;
+
+ hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, i, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE);
+ EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+ or_excl_ptr_list = *hardkey_list;
+
+ hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, i, TIZEN_KEYROUTER_MODE_TOPMOST);
+ EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+ top_ptr_list = *hardkey_list;
+
+ hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, i, TIZEN_KEYROUTER_MODE_SHARED);
+ EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+ shared_ptr_list = *hardkey_list;
+
+ if (!excl_ptr_list && !or_excl_ptr_list &&
+ !top_ptr_list && !shared_ptr_list)
continue;
keyname = e_comp_wl_input_keymap_keycode_to_keyname(i);
free(keyname);
keyname = NULL;
- if (krt->HardKeys[i].excl_ptr)
+ if (excl_ptr_list)
{
fprintf(log_fl, " == Exclusive Grab ==\n");
- EINA_LIST_FOREACH(krt->HardKeys[i].excl_ptr, l, kdata)
+ EINA_LIST_FOREACH(excl_ptr_list, l, kdata)
{
pid = e_keyrouter_util_get_pid(kdata->wc, kdata->surface);
cmd = e_keyrouter_util_cmd_get_from_pid(pid);
}
}
- if (krt->HardKeys[i].or_excl_ptr)
+ if (or_excl_ptr_list)
{
fprintf(log_fl, " == Overidable Exclusive Grab ==\n");
- _e_keyrouter_keygrab_status_print(log_fl, krt->HardKeys[i].or_excl_ptr);
+ _e_keyrouter_keygrab_status_print(log_fl, or_excl_ptr_list);
}
- if (krt->HardKeys[i].top_ptr)
+ if (top_ptr_list)
{
fprintf(log_fl, " == Top Position Grab ==\n");
- _e_keyrouter_keygrab_status_print(log_fl, krt->HardKeys[i].top_ptr);
+ _e_keyrouter_keygrab_status_print(log_fl, top_ptr_list);
}
- if (krt->HardKeys[i].shared_ptr)
+ if (shared_ptr_list)
{
fprintf(log_fl, " == Shared Grab ==\n");
- _e_keyrouter_keygrab_status_print(log_fl, krt->HardKeys[i].shared_ptr);
+ _e_keyrouter_keygrab_status_print(log_fl, shared_ptr_list);
}
fprintf(log_fl, "\n");
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 **hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, keycode, TIZEN_KEYROUTER_MODE_PICTURE_OFF);
+ EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+ Eina_List *pic_off_ptr_list = *hardkey_list;
EINA_LIST_FOREACH(pic_off_ptr_list, l, key_node_data)
{
if (key_node_data)
/* 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 **hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, ev->keycode, TIZEN_KEYROUTER_MODE_PRESSED);
+ EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+ Eina_List *press_ptr_list = *hardkey_list;
EINA_LIST_FREE(press_ptr_list, key_node_data)
{
if (key_node_data->focused == EINA_TRUE)
E_FREE(key_node_data);
}
- krt->HardKeys[ev->keycode].press_ptr = NULL;
+ *hardkey_list = NULL;
g_rec_mutex_unlock(&krt->grab_key_mutex);
}
E_Keyrouter_Key_List_NodePtr key_node_data;
Eina_List *l = NULL;
Eina_List *shared_ptr_list = NULL;
+ Eina_List **hardkey_list = NULL;
ec_focus = e_client_focused_get();
surface_focus = e_comp_wl_client_surface_get(ec_focus);
key_event_log_type = KEY_EVENT_LOG_TYPE_KEY_UP;
g_rec_mutex_lock(&krt->grab_key_mutex);
- Eina_List *excl_ptr_list = krt->HardKeys[keycode].excl_ptr;
+ hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, keycode, TIZEN_KEYROUTER_MODE_EXCLUSIVE);
+ EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+ Eina_List *excl_ptr_list = *hardkey_list;
EINA_LIST_FOREACH(excl_ptr_list, l, key_node_data)
{
if (key_node_data)
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;
+ hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, keycode, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE);
+ EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+ Eina_List *or_excl_ptr = *hardkey_list;
EINA_LIST_FOREACH(or_excl_ptr, l, key_node_data)
{
if (key_node_data)
if (surface_focus)
{
g_rec_mutex_lock(&krt->grab_key_mutex);
- Eina_List *top_ptr_list = krt->HardKeys[keycode].top_ptr;
+ hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, keycode, TIZEN_KEYROUTER_MODE_TOPMOST);
+ EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+ Eina_List *top_ptr_list = *hardkey_list;
EINA_LIST_FOREACH(top_ptr_list, l, key_node_data)
{
if (key_node_data)
if (_e_keyrouter_check_top_visible_window(ec_focus, keycode))
{
- E_Keyrouter_Key_List_NodePtr top_key_node_data = eina_list_data_get(krt->HardKeys[keycode].top_ptr);
+ E_Keyrouter_Key_List_NodePtr top_key_node_data = eina_list_data_get(top_ptr_list);
_e_keyrouter_send_key_event(type, top_key_node_data->surface, NULL, ev, dev, top_key_node_data->focused,
TIZEN_KEYROUTER_MODE_TOPMOST);
}
g_rec_mutex_lock(&krt->grab_key_mutex);
- shared_ptr_list = krt->HardKeys[keycode].shared_ptr;
+ hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, keycode, TIZEN_KEYROUTER_MODE_SHARED);
+ EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+ shared_ptr_list = *hardkey_list;
g_rec_mutex_unlock(&krt->grab_key_mutex);
if (shared_ptr_list)
if (res)
{
g_rec_mutex_lock(&krt->grab_key_mutex);
- shared_ptr_list = krt->HardKeys[keycode].shared_ptr;
+ hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, keycode, TIZEN_KEYROUTER_MODE_SHARED);
+ EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+ shared_ptr_list = *hardkey_list;
EINA_LIST_FOREACH(shared_ptr_list, l, key_node_data)
{
if (key_node_data)
_e_keyrouter_check_top_visible_window(E_Client *ec_focus, int arr_idx)
{
E_Client *ec_top = NULL;
- Eina_List *l = NULL, *l_next = NULL;
+ Eina_List *l = NULL, *l_next = NULL, **hardkey_list = NULL;
E_Keyrouter_Key_List_NodePtr key_node_data = NULL;
ec_top = e_client_top_get();
/* 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;
+ hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, arr_idx, TIZEN_KEYROUTER_MODE_TOPMOST);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(hardkey_list, EINA_FALSE);
+ Eina_List *top_ptr_list = *hardkey_list;
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))
{
- krt->HardKeys[arr_idx].top_ptr = eina_list_promote_list(krt->HardKeys[arr_idx].top_ptr, l);
+ krt->HardKeys[arr_idx].top_ptr = eina_list_promote_list(top_ptr_list, 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);
#include "e_input_thread_client_intern.h"
#include "e_security.h"
#include "e_keyrouter_intern.h"
+#include "e_keyrouter_hardkeys_intern.h"
#include <tizen-extension-server-protocol.h>
EINA_SAFETY_ON_NULL_RETURN(wc);
g_rec_mutex_lock(&krt->grab_key_mutex);
- press_ptr_list = krt->HardKeys[key].press_ptr;
+ Eina_List **hardkey_list = e_keyrouter_hardkeys_get_list(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PRESSED);
+ EINA_SAFETY_ON_NULL_RETURN(hardkey_list);
+ press_ptr_list = *hardkey_list;
EINA_LIST_FOREACH(press_ptr_list, l, data)
{
if (surface)
EINTERN EINTERN Eina_Bool
e_keyrouter_wl_util_do_privilege_check(struct wl_client *client, uint32_t mode, uint32_t keycode)
{
- Eina_Bool res = EINA_FALSE;
+ Eina_Bool res = EINA_FALSE, no_privcheck;
Eina_List *l;
struct wl_client *wc_data;
pid_t pid = 0;
if (mode == TIZEN_KEYROUTER_MODE_TOPMOST)
return EINA_TRUE;
- if (krt->HardKeys[keycode].no_privcheck == EINA_TRUE &&
+ no_privcheck = e_keyrouter_hardkeys_no_privcheck_get(krt->HardKeys, keycode);
+ if (no_privcheck == EINA_TRUE &&
mode == TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE)
return EINA_TRUE;