#include <tizen-extension-server-protocol.h>
-static int _e_keyrouter_find_duplicated_client(struct wl_resource *surface, struct wl_client *wc, uint32_t key, uint32_t mode);
+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 */
static int
-_e_keyrouter_find_duplicated_client(struct wl_resource *surface, struct wl_client *wc, uint32_t key, uint32_t mode)
+_e_keyrouter_find_duplicated_grabbed_key(struct wl_resource *surface, struct wl_client *wc, uint32_t key, uint32_t mode)
{
if (mode == TIZEN_KEYROUTER_MODE_EXCLUSIVE)
- return TIZEN_KEYROUTER_ERROR_NONE;
+ return TIZEN_KEYROUTER_ERROR_NONE;
g_rec_mutex_lock(&krt->grab_key_mutex);
- if (surface)
- {
- if (e_keyrouter_hardkeys_is_key_grabbed_by_surface(krt->HardKeys, key, surface, mode))
- {
- KLDBG("The key(%d) is already grabbed same mode(%s) on the same wl_surface %p",
- key, e_keyrouter_util_mode_to_string(mode), surface);
- g_rec_mutex_unlock(&krt->grab_key_mutex);
- return TIZEN_KEYROUTER_ERROR_GRABBED_ALREADY;
- }
- }
- else
- {
- if (e_keyrouter_hardkeys_is_key_grabbed_by_client(krt->HardKeys, key, wc, mode))
- {
- KLDBG("The key(%d) is already grabbed same mode(%s) on the same wl_client %p",
- key, e_keyrouter_util_mode_to_string(mode), wc);
- g_rec_mutex_unlock(&krt->grab_key_mutex);
- return TIZEN_KEYROUTER_ERROR_GRABBED_ALREADY;
- }
- }
+ Eina_Bool is_grabbed;
+ is_grabbed = surface ? e_keyrouter_hardkeys_is_key_grabbed_by_surface(krt->HardKeys, key, surface, mode)
+ : e_keyrouter_hardkeys_is_key_grabbed_by_client(krt->HardKeys, key, wc, mode);
g_rec_mutex_unlock(&krt->grab_key_mutex);
- return TIZEN_KEYROUTER_ERROR_NONE;
+ if (!is_grabbed)
+ return TIZEN_KEYROUTER_ERROR_NONE;
+
+ if (surface)
+ KLDBG("The key(%d) is already grabbed same mode(%s) on the same wl_surface %p",
+ key, e_keyrouter_util_mode_to_string(mode), surface);
+ else
+ KLDBG("The key(%d) is already grabbed same mode(%s) on the same wl_client %p",
+ key, e_keyrouter_util_mode_to_string(mode), wc);
+
+ return TIZEN_KEYROUTER_ERROR_GRABBED_ALREADY;
}
/* Function for prepending a new key grab information in the keyrouting list */
{
int res = TIZEN_KEYROUTER_ERROR_NONE;
- res = _e_keyrouter_find_duplicated_client(surface, wc, key, mode);
+ res = _e_keyrouter_find_duplicated_grabbed_key(surface, wc, key, mode);
CHECK_ERR_VAL(res);
E_Keyrouter_Key_List_NodePtr new_keyptr = E_NEW(E_Keyrouter_Key_List_Node, 1);