#include <tizen-extension-server-protocol.h>
+static uint32_t _modes[] = {TIZEN_KEYROUTER_MODE_NONE,
+ TIZEN_KEYROUTER_MODE_EXCLUSIVE,
+ TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE,
+ TIZEN_KEYROUTER_MODE_TOPMOST,
+ TIZEN_KEYROUTER_MODE_SHARED,
+ TIZEN_KEYROUTER_MODE_PRESSED,
+ TIZEN_KEYROUTER_MODE_PICTURE_OFF};
+
static int _e_keyrouter_find_duplicated_grabbed_key(struct wl_resource *surface, struct wl_client *wc, uint32_t key, uint32_t mode);
/* Function for checking whether the key has been grabbed already by the same wl_surface or not */
EINTERN void
e_keyrouter_remove_surface_from_list(struct wl_resource *surface)
{
- uint32_t key;
+ uint32_t key, mode;
EINA_SAFETY_ON_NULL_RETURN(surface);
if (!e_keyrouter_hardkeys_keycode_available(krt->HardKeys, key))
continue;
- // 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);
+ for (mode = EXCLUSIVE; mode <= PICTURE_OFF; ++mode)
+ e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, _modes[mode], surface);
}
g_rec_mutex_unlock(&krt->grab_key_mutex);
EINTERN void
e_keyrouter_remove_client_from_list(struct wl_client *client)
{
- uint32_t key;
+ uint32_t key, mode;
EINA_SAFETY_ON_NULL_RETURN(client);
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);
+ for (mode = EXCLUSIVE; mode <= PICTURE_OFF; ++mode)
+ e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, _modes[mode], client);
}
g_rec_mutex_unlock(&krt->grab_key_mutex);
EINTERN uint32_t
e_keyrouter_find_keygrab_mode_with_surface(struct wl_resource *surface, uint32_t key)
{
- uint32_t mode = TIZEN_KEYROUTER_MODE_NONE;
+ uint32_t mode;
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;
+ for (mode = EXCLUSIVE; mode <= SHARED; ++mode)
+ if (e_keyrouter_hardkeys_is_key_grabbed_by_surface(krt->HardKeys, key, surface, _modes[mode]))
+ break;
g_rec_mutex_unlock(&krt->grab_key_mutex);
- if (mode != TIZEN_KEYROUTER_MODE_NONE)
+ if (mode > SHARED)
+ mode = NONE;
+
+ if (mode != NONE)
KLDBG("Find %d key grabbed by (wl_surface: %p) in %s mode",
- key, surface, e_keyrouter_util_mode_to_string(mode));
+ key, surface, e_keyrouter_util_mode_to_string(_modes[mode]));
else
KLDBG("%d key is not grabbed by (wl_surface: %p)", key, surface);
- return mode;
+ return _modes[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;
+ uint32_t mode;
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;
+ for (mode = EXCLUSIVE; mode <= SHARED; ++mode)
+ if (e_keyrouter_hardkeys_is_key_grabbed_by_client(krt->HardKeys, key, client, _modes[mode]))
+ break;
g_rec_mutex_unlock(&krt->grab_key_mutex);
- if (mode != TIZEN_KEYROUTER_MODE_NONE)
+ if (mode > SHARED)
+ mode = NONE;
+
+ if (mode != NONE)
KLDBG("Find %d key grabbed by (wl_client: %p) in %s mode",
- key, client, e_keyrouter_util_mode_to_string(mode));
+ key, client, e_keyrouter_util_mode_to_string(_modes[mode]));
else
KLDBG("%d key is not grabbed by (wl_client: %p)", key, client);
- return mode;
+ return _modes[mode];
}
EINTERN int
g_rec_mutex_lock(&krt->grab_key_mutex);
- if (!surface)
+ for (uint32_t mode = EXCLUSIVE; mode <= PRESSED; ++mode)
{
- /* EXCLUSIVE grab */
- e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_EXCLUSIVE, client);
-
- /* OVERRIDABLE_EXCLUSIVE grab */
- e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE, client);
-
- /* SHARED grab */
- e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_SHARED, client);
+ if (mode == TOPMOST) continue;
- /* Press List */
- e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PRESSED, client);
+ if (!surface)
+ e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, _modes[mode], client);
+ else
+ e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, _modes[mode], surface);
}
- else
- {
- /* EXCLUSIVE grab */
- e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_EXCLUSIVE, surface);
-
- /* OVERRIDABLE_EXCLUSIVE grab */
- e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE, surface);
- /* SHARED grab */
- e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_SHARED, surface);
-
- /* Press List */
- e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_PRESSED, surface);
- }
g_rec_mutex_unlock(&krt->grab_key_mutex);
finish: