}
EINTERN void
-e_keyrouter_remove_client_from_list(struct wl_resource *surface, struct wl_client *client)
+e_keyrouter_remove_surface_from_list(struct wl_resource *surface)
{
- int key;
+ uint32_t key;
- EINA_SAFETY_ON_TRUE_RETURN(((!surface) && (!client)));
+ EINA_SAFETY_ON_NULL_RETURN(surface);
- INF("[%s] surface(%p), client(%p)", __func__, surface, client);
+ INF("[%s] surface(%p)", __func__, surface);
g_rec_mutex_lock(&krt->grab_key_mutex);
if (!e_keyrouter_hardkeys_keycode_available(krt->HardKeys, key))
continue;
- if (!surface)
- {
- // EXCLUSIVE
- e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_EXCLUSIVE, client);
- // OVERRIDEABLE_EXCLUSIVE
- e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE, client);
- // TOPMOST
- e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_TOPMOST, client);
- // SHARED
- e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_SHARED, client);
- // PRESSED
- e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PRESSED, client);
- // PICTURE_OFF
- e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PICTURE_OFF, client);
- }
- else
- {
- // EXCLUSIVE
- e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_EXCLUSIVE, surface);
- // OVERRIDEABLE_EXCLUSIVE
- e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE, surface);
- // TOPMOST
- e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_TOPMOST, surface);
- // SHARED
- e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_SHARED, surface);
- // PRESSED
- e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PRESSED, surface);
- // PICTURE_OFF
- e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PICTURE_OFF, surface);
- }
+ // EXCLUSIVE
+ e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_EXCLUSIVE, surface);
+ // OVERRIDEABLE_EXCLUSIVE
+ e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE, surface);
+ // TOPMOST
+ e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_TOPMOST, surface);
+ // SHARED
+ e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_SHARED, surface);
+ // PRESSED
+ e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PRESSED, surface);
+ // PICTURE_OFF
+ e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PICTURE_OFF, surface);
}
g_rec_mutex_unlock(&krt->grab_key_mutex);
}
-EINTERN int
-e_keyrouter_find_keygrab_mode(struct wl_resource *surface, struct wl_client *client, uint32_t key)
+EINTERN void
+e_keyrouter_remove_client_from_list(struct wl_client *client)
{
- int mode;
+ uint32_t key;
+
+ EINA_SAFETY_ON_NULL_RETURN(client);
+
+ INF("[%s] client(%p)", __func__, client);
g_rec_mutex_lock(&krt->grab_key_mutex);
- if (!surface)
- {
- if (e_keyrouter_hardkeys_is_key_grabbed_by_client(krt->HardKeys, key, client, TIZEN_KEYROUTER_MODE_EXCLUSIVE))
- {
- mode = TIZEN_KEYROUTER_MODE_EXCLUSIVE;
- goto finish;
- }
- if (e_keyrouter_hardkeys_is_key_grabbed_by_client(krt->HardKeys, key, client, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE))
- {
- mode = TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE;
- goto finish;
- }
- if (e_keyrouter_hardkeys_is_key_grabbed_by_client(krt->HardKeys, key, client, TIZEN_KEYROUTER_MODE_TOPMOST))
- {
- mode = TIZEN_KEYROUTER_MODE_TOPMOST;
- goto finish;
- }
- if (e_keyrouter_hardkeys_is_key_grabbed_by_client(krt->HardKeys, key, client, TIZEN_KEYROUTER_MODE_SHARED))
- {
- mode = TIZEN_KEYROUTER_MODE_SHARED;
- goto finish;
- }
- }
- else
+ for (key = 0; key <= krt->max_tizen_hwkeys; key++)
{
- if (e_keyrouter_hardkeys_is_key_grabbed_by_surface(krt->HardKeys, key, surface, TIZEN_KEYROUTER_MODE_EXCLUSIVE))
- {
- mode = TIZEN_KEYROUTER_MODE_EXCLUSIVE;
- goto finish;
- }
- if (e_keyrouter_hardkeys_is_key_grabbed_by_surface(krt->HardKeys, key, surface, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE))
- {
- mode = TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE;
- goto finish;
- }
- if (e_keyrouter_hardkeys_is_key_grabbed_by_surface(krt->HardKeys, key, surface, TIZEN_KEYROUTER_MODE_TOPMOST))
- {
- mode = TIZEN_KEYROUTER_MODE_TOPMOST;
- goto finish;
- }
- if (e_keyrouter_hardkeys_is_key_grabbed_by_surface(krt->HardKeys, key, surface, TIZEN_KEYROUTER_MODE_SHARED))
- {
- mode = TIZEN_KEYROUTER_MODE_SHARED;
- goto finish;
- }
+ if (!e_keyrouter_hardkeys_keycode_available(krt->HardKeys, key))
+ continue;
+
+ // EXCLUSIVE
+ e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_EXCLUSIVE, client);
+ // OVERRIDEABLE_EXCLUSIVE
+ e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE, client);
+ // TOPMOST
+ e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_TOPMOST, client);
+ // SHARED
+ e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_SHARED, client);
+ // PRESSED
+ e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PRESSED, client);
+ // PICTURE_OFF
+ e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PICTURE_OFF, client);
}
g_rec_mutex_unlock(&krt->grab_key_mutex);
+}
- KLDBG("%d key is not grabbed by (wl_surface: %p, wl_client: %p)", key, surface, client);
+EINTERN uint32_t
+e_keyrouter_find_keygrab_mode_with_surface(struct wl_resource *surface, uint32_t key)
+{
+ uint32_t mode = TIZEN_KEYROUTER_MODE_NONE;
- return TIZEN_KEYROUTER_MODE_NONE;
+ g_rec_mutex_lock(&krt->grab_key_mutex);
+
+ if (e_keyrouter_hardkeys_is_key_grabbed_by_surface(krt->HardKeys, key, surface, TIZEN_KEYROUTER_MODE_EXCLUSIVE))
+ mode = TIZEN_KEYROUTER_MODE_EXCLUSIVE;
+ else if (e_keyrouter_hardkeys_is_key_grabbed_by_surface(krt->HardKeys, key, surface, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE))
+ mode = TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE;
+ else if (e_keyrouter_hardkeys_is_key_grabbed_by_surface(krt->HardKeys, key, surface, TIZEN_KEYROUTER_MODE_TOPMOST))
+ mode = TIZEN_KEYROUTER_MODE_TOPMOST;
+ else if (e_keyrouter_hardkeys_is_key_grabbed_by_surface(krt->HardKeys, key, surface, TIZEN_KEYROUTER_MODE_SHARED))
+ mode = TIZEN_KEYROUTER_MODE_SHARED;
-finish:
g_rec_mutex_unlock(&krt->grab_key_mutex);
- KLDBG("Find %d key grabbed by (wl_surface: %p, wl_client: %p) in %s mode",
- key, surface, client, e_keyrouter_util_mode_to_string(mode));
+ if (mode != TIZEN_KEYROUTER_MODE_NONE)
+ KLDBG("Find %d key grabbed by (wl_surface: %p) in %s mode",
+ key, surface, e_keyrouter_util_mode_to_string(mode));
+ else
+ KLDBG("%d key is not grabbed by (wl_surface: %p)", key, surface);
+
+ return mode;
+}
+
+EINTERN uint32_t
+e_keyrouter_find_keygrab_mode_with_client(struct wl_client *client, uint32_t key)
+{
+ uint32_t mode = TIZEN_KEYROUTER_MODE_NONE;
+
+ g_rec_mutex_lock(&krt->grab_key_mutex);
+
+ if (e_keyrouter_hardkeys_is_key_grabbed_by_client(krt->HardKeys, key, client, TIZEN_KEYROUTER_MODE_EXCLUSIVE))
+ mode = TIZEN_KEYROUTER_MODE_EXCLUSIVE;
+ else if (e_keyrouter_hardkeys_is_key_grabbed_by_client(krt->HardKeys, key, client, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE))
+ mode = TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE;
+ else if (e_keyrouter_hardkeys_is_key_grabbed_by_client(krt->HardKeys, key, client, TIZEN_KEYROUTER_MODE_TOPMOST))
+ mode = TIZEN_KEYROUTER_MODE_TOPMOST;
+ else if (e_keyrouter_hardkeys_is_key_grabbed_by_client(krt->HardKeys, key, client, TIZEN_KEYROUTER_MODE_SHARED))
+ mode = TIZEN_KEYROUTER_MODE_SHARED;
+
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
+
+ if (mode != TIZEN_KEYROUTER_MODE_NONE)
+ KLDBG("Find %d key grabbed by (wl_client: %p) in %s mode",
+ key, client, e_keyrouter_util_mode_to_string(mode));
+ else
+ KLDBG("%d key is not grabbed by (wl_client: %p)", key, client);
return mode;
}
g_rec_mutex_unlock(&krt->grab_key_mutex);
finish:
- e_keyrouter_keycancel_send(client, surface, key);
+ if (!surface)
+ e_keyrouter_keycancel_send_with_client(client, key);
+ else
+ e_keyrouter_keycancel_send_with_surface(surface, key);
return TIZEN_KEYROUTER_ERROR_NONE;
}
}
EINTERN void
-e_keyrouter_keycancel_send(struct wl_client *client, struct wl_resource *surface, unsigned int key)
+e_keyrouter_keycancel_send_with_surface(struct wl_resource *surface, unsigned int key)
{
Eina_List *l;
struct wl_resource *resource = NULL;
E_Keyrouter_Key_List_NodePtr data;
Eina_List *press_ptr_list = NULL;
- if (surface) wc = wl_resource_get_client(surface);
- else wc = client;
+ if (surface)
+ wc = wl_resource_get_client(surface);
EINA_SAFETY_ON_NULL_RETURN(wc);
press_ptr_list = e_keyrouter_hardkeys_list_get(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PRESSED);
EINA_LIST_FOREACH(press_ptr_list, l, data)
{
- if (surface)
+ if (surface == data->surface)
{
- if (surface == data->surface)
+ g_rec_mutex_lock(&g_tizen_keyrouter->resource_list_mutex);
+ EINA_LIST_FOREACH(g_tizen_keyrouter->resources, l, resource)
{
- g_rec_mutex_lock(&g_tizen_keyrouter->resource_list_mutex);
- EINA_LIST_FOREACH(g_tizen_keyrouter->resources, l, resource)
- {
- if (wl_resource_get_client(resource) != wc) continue;
+ if (wl_resource_get_client(resource) != wc) continue;
- tizen_keyrouter_send_key_cancel(resource, key-8);
- }
- g_rec_mutex_unlock(&g_tizen_keyrouter->resource_list_mutex);
+ tizen_keyrouter_send_key_cancel(resource, key-8);
}
+ g_rec_mutex_unlock(&g_tizen_keyrouter->resource_list_mutex);
}
- else if (client == data->wc)
+ }
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
+}
+
+
+EINTERN void
+e_keyrouter_keycancel_send_with_client(struct wl_client *client, unsigned int key)
+{
+ Eina_List *l;
+ struct wl_resource *resource = NULL;
+ E_Keyrouter_Key_List_NodePtr data;
+ Eina_List *press_ptr_list = NULL;
+
+ EINA_SAFETY_ON_NULL_RETURN(client);
+
+ g_rec_mutex_lock(&krt->grab_key_mutex);
+ press_ptr_list = e_keyrouter_hardkeys_list_get(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PRESSED);
+ EINA_LIST_FOREACH(press_ptr_list, l, data)
+ {
+ if (client == data->wc)
{
g_rec_mutex_lock(&g_tizen_keyrouter->resource_list_mutex);
EINA_LIST_FOREACH(g_tizen_keyrouter->resources, l, resource)
{
- if (wl_resource_get_client(resource) != wc) continue;
+ if (wl_resource_get_client(resource) != client) continue;
tizen_keyrouter_send_key_cancel(resource, key-8);
}
(void) resource;
(void) surface;
(void) key;
- int mode = TIZEN_KEYROUTER_MODE_NONE;
+ int mode;
TRACE_INPUT_BEGIN(_e_keyrouter_cb_get_keygrab_status);
- mode = e_keyrouter_find_keygrab_mode(surface, client, key);
+
+ mode = surface ? e_keyrouter_find_keygrab_mode_with_surface(surface, key)
+ : e_keyrouter_find_keygrab_mode_with_client(client, key);
TRACE_INPUT_END();
tizen_keyrouter_send_keygrab_notify(resource, surface, key, mode, TIZEN_KEYROUTER_ERROR_NONE);
struct wl_client *client = data;
KLDBG("Listener(%p) called: wl_client: %p is died", l, client);
- e_keyrouter_remove_client_from_list(NULL, client);
+ e_keyrouter_remove_client_from_list(client);
wl_list_remove(&l->link);
E_FREE(l);
struct wl_resource *surface = (struct wl_resource *)data;
KLDBG("Listener(%p) called: surface: %p is died", l, surface);
- e_keyrouter_remove_client_from_list(surface, NULL);
+ e_keyrouter_remove_surface_from_list(surface);
wl_list_remove(&l->link);
E_FREE(l);