src/bin/inputmgr/e_devicemgr_input.c \
src/bin/inputmgr/e_devicemgr_inputgen.c \
src/bin/inputmgr/e_keyrouter_event.c \
-src/bin/inputmgr/e_keyrouter_list.c \
+src/bin/inputmgr/e_keyrouter_keygrab.c \
src/bin/inputmgr/e_keyrouter_conf.c \
src/bin/inputmgr/e_keyrouter.c \
src/bin/inputmgr/e_keyrouter_hardkeys.c \
--- /dev/null
+#include "e_keyrouter_keygrab_intern.h"
+#include "e_keyrouter_hardkeys_intern.h"
+#include "e_input_thread_client_intern.h"
+#include "e_input_backend_intern.h"
+#include "e_keyrouter_wl_intern.h"
+
+#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 */
+static int
+_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;
+
+ g_rec_mutex_lock(&krt->grab_key_mutex);
+
+ 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);
+
+ if (!is_grabbed)
+ {
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
+ return TIZEN_KEYROUTER_ERROR_NONE;
+ }
+
+ if (surface)
+ DBG("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
+ DBG("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;
+}
+
+/* Function for prepending a new key grab information in the keyrouting list */
+EINTERN int
+e_keyrouter_keygrab_prepend_to_keylist(struct wl_resource *surface, struct wl_client *wc, uint32_t key, uint32_t mode, Eina_Bool focused)
+{
+ int res = TIZEN_KEYROUTER_ERROR_NONE;
+
+ res = _e_keyrouter_find_duplicated_grabbed_key(surface, wc, key, mode);
+ if (TIZEN_KEYROUTER_ERROR_NONE != res) return res;
+
+ E_Keyrouter_Key_List_NodePtr new_keyptr = E_NEW(E_Keyrouter_Key_List_Node, 1);
+
+ if (!new_keyptr)
+ {
+ ERR("Failled to allocate memory for new_keyptr");
+ return TIZEN_KEYROUTER_ERROR_NO_SYSTEM_RESOURCES;
+ }
+
+ new_keyptr->surface = surface;
+ new_keyptr->wc = wc;
+ new_keyptr->focused = focused;
+ new_keyptr->status = E_KRT_CSTAT_ALIVE;
+
+ g_rec_mutex_lock(&krt->grab_key_mutex);
+
+ if (!e_keyrouter_hardkeys_prepend(krt->HardKeys, new_keyptr, 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)
+ {
+ if (surface)
+ {
+ e_keyrouter_wl_add_surface_destroy_listener(surface);
+ /* TODO: if failed add surface_destroy_listener, remove keygrabs */
+ }
+ else if (wc)
+ {
+ e_keyrouter_wl_add_client_destroy_listener(wc);
+ /* TODO: if failed add client_destroy_listener, remove keygrabs */
+ }
+ }
+
+ return TIZEN_KEYROUTER_ERROR_NONE;
+}
+
+EINTERN void
+e_keyrouter_keygrab_remove_surface_from_list(struct wl_resource *surface)
+{
+ uint32_t key, mode;
+
+ EINA_SAFETY_ON_NULL_RETURN(surface);
+
+ INF("[%s] surface(%p)", __func__, surface);
+
+ g_rec_mutex_lock(&krt->grab_key_mutex);
+
+ for (key = 0; key <= krt->max_tizen_hwkeys; key++)
+ {
+ if (!e_keyrouter_hardkeys_keycode_available(krt->HardKeys, key))
+ continue;
+
+ 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_keygrab_remove_client_from_list(struct wl_client *client)
+{
+ uint32_t key, mode;
+
+ EINA_SAFETY_ON_NULL_RETURN(client);
+
+ INF("[%s] client(%p)", __func__, client);
+
+ g_rec_mutex_lock(&krt->grab_key_mutex);
+
+ for (key = 0; key <= krt->max_tizen_hwkeys; key++)
+ {
+ if (!e_keyrouter_hardkeys_keycode_available(krt->HardKeys, key))
+ continue;
+
+ 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_keygrab_find_mode_with_surface(struct wl_resource *surface, uint32_t key)
+{
+ uint32_t mode;
+
+ g_rec_mutex_lock(&krt->grab_key_mutex);
+
+ 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 > SHARED)
+ mode = NONE;
+
+ if (mode != NONE)
+ DBG("Find %d key grabbed by (wl_surface: %p) in %s mode",
+ key, surface, e_keyrouter_util_mode_to_string(_modes[mode]));
+ else
+ DBG("%d key is not grabbed by (wl_surface: %p)", key, surface);
+
+ return _modes[mode];
+}
+
+EINTERN uint32_t
+e_keyrouter_keygrab_find_mode_with_client(struct wl_client *client, uint32_t key)
+{
+ uint32_t mode;
+
+ g_rec_mutex_lock(&krt->grab_key_mutex);
+
+ 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 > SHARED)
+ mode = NONE;
+
+ if (mode != NONE)
+ DBG("Find %d key grabbed by (wl_client: %p) in %s mode",
+ key, client, e_keyrouter_util_mode_to_string(_modes[mode]));
+ else
+ DBG("%d key is not grabbed by (wl_client: %p)", key, client);
+
+ return _modes[mode];
+}
+
+EINTERN int
+e_keyrouter_keygrab_set(struct wl_client *client, struct wl_resource *surface, int key, int mode)
+{
+ Eina_List *excl_ptr_list;
+ int res;
+
+#ifdef HAVE_CYNARA
+ if (EINA_FALSE == e_keyrouter_wl_util_do_privilege_check(client, mode, key))
+ {
+ INF("No permission for %d grab mode ! (key=%d)", mode, key);
+ return TIZEN_KEYROUTER_ERROR_NO_PERMISSION;
+ }
+#endif
+
+ if (!surface)
+ {
+ /* Regarding topmost mode, a client must request to grab a key with a valid surface. */
+ if (mode == TIZEN_KEYROUTER_MODE_TOPMOST)
+ {
+ WRN("Invalid surface for %d grab mode ! (key=%d)", mode, key);
+
+ return TIZEN_KEYROUTER_ERROR_INVALID_SURFACE;
+ }
+ }
+
+ /* Check the given key range */
+ if (krt->max_tizen_hwkeys < key)
+ {
+ WRN("Invalid range of key ! (keycode:%d) maximum value(%d)", key, krt->max_tizen_hwkeys);
+ return TIZEN_KEYROUTER_ERROR_INVALID_KEY;
+ }
+
+ /* Check whether the key can be grabbed or not !
+ * Only key listed in Tizen key layout file can be grabbed. */
+ if (!e_keyrouter_hardkeys_keycode_available(krt->HardKeys, key))
+ {
+ WRN("Invalid key ! Disabled to set keygrab ! (keycode:%d)", key);
+ return TIZEN_KEYROUTER_ERROR_INVALID_KEY;
+ }
+
+ /* Check whether the request key can be grabbed or not */
+ if (mode == TIZEN_KEYROUTER_MODE_EXCLUSIVE)
+ {
+ g_rec_mutex_lock(&krt->grab_key_mutex);
+ excl_ptr_list = e_keyrouter_hardkeys_list_get(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_EXCLUSIVE);
+ if (excl_ptr_list != NULL)
+ {
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
+ return TIZEN_KEYROUTER_ERROR_GRABBED_ALREADY;
+ }
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
+ }
+
+ res = e_keyrouter_keygrab_prepend_to_keylist(surface,
+ surface ? NULL : client,
+ key,
+ mode,
+ EINA_FALSE);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(res == TIZEN_KEYROUTER_ERROR_NONE, res);
+
+
+ return res;
+}
+
+int
+e_keyrouter_keygrab_unset(struct wl_client *client, struct wl_resource *surface, int key)
+{
+ /* Check the given key range */
+ if (krt->max_tizen_hwkeys < key)
+ {
+ WRN("Invalid range of key ! (keycode:%d) maximum value(%d)", key, krt->max_tizen_hwkeys);
+ return TIZEN_KEYROUTER_ERROR_INVALID_KEY;
+ }
+
+ g_rec_mutex_lock(&krt->grab_key_mutex);
+
+ /* Check whether the key can be unset or not !
+ * Only key listed in Tizen key layout file can be unset. */
+ if (!e_keyrouter_hardkeys_keycode_available(krt->HardKeys, key))
+ {
+ WRN("Invalid key ! Disabled to unset keygrab! (keycode:%d)", key);
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
+
+ return TIZEN_KEYROUTER_ERROR_INVALID_KEY;
+ }
+
+ /* Ungrab top position grabs first. This grab mode do not need privilege */
+ if (!surface)
+ e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_TOPMOST, client);
+ else
+ e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_TOPMOST, surface);
+
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
+
+#ifdef HAVE_CYNARA
+ if (!e_keyrouter_wl_util_do_privilege_check(client, TIZEN_KEYROUTER_MODE_NONE, key))
+ goto finish;
+#endif
+
+ g_rec_mutex_lock(&krt->grab_key_mutex);
+
+ for (uint32_t mode = EXCLUSIVE; mode <= PRESSED; ++mode)
+ {
+ if (mode == TOPMOST) continue;
+
+ 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);
+ }
+
+ g_rec_mutex_unlock(&krt->grab_key_mutex);
+
+finish:
+ if (!surface)
+ e_keyrouter_keycancel_send_with_client(client, key);
+ else
+ e_keyrouter_keycancel_send_with_surface(surface, key);
+
+ return TIZEN_KEYROUTER_ERROR_NONE;
+}
+++ /dev/null
-#include "e_keyrouter_keygrab_intern.h"
-#include "e_keyrouter_hardkeys_intern.h"
-#include "e_input_thread_client_intern.h"
-#include "e_input_backend_intern.h"
-#include "e_keyrouter_wl_intern.h"
-
-#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 */
-static int
-_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;
-
- g_rec_mutex_lock(&krt->grab_key_mutex);
-
- 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);
-
- if (!is_grabbed)
- {
- g_rec_mutex_unlock(&krt->grab_key_mutex);
- return TIZEN_KEYROUTER_ERROR_NONE;
- }
-
- if (surface)
- DBG("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
- DBG("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;
-}
-
-/* Function for prepending a new key grab information in the keyrouting list */
-EINTERN int
-e_keyrouter_keygrab_prepend_to_keylist(struct wl_resource *surface, struct wl_client *wc, uint32_t key, uint32_t mode, Eina_Bool focused)
-{
- int res = TIZEN_KEYROUTER_ERROR_NONE;
-
- res = _e_keyrouter_find_duplicated_grabbed_key(surface, wc, key, mode);
- if (TIZEN_KEYROUTER_ERROR_NONE != res) return res;
-
- E_Keyrouter_Key_List_NodePtr new_keyptr = E_NEW(E_Keyrouter_Key_List_Node, 1);
-
- if (!new_keyptr)
- {
- ERR("Failled to allocate memory for new_keyptr");
- return TIZEN_KEYROUTER_ERROR_NO_SYSTEM_RESOURCES;
- }
-
- new_keyptr->surface = surface;
- new_keyptr->wc = wc;
- new_keyptr->focused = focused;
- new_keyptr->status = E_KRT_CSTAT_ALIVE;
-
- g_rec_mutex_lock(&krt->grab_key_mutex);
-
- if (!e_keyrouter_hardkeys_prepend(krt->HardKeys, new_keyptr, 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)
- {
- if (surface)
- {
- e_keyrouter_wl_add_surface_destroy_listener(surface);
- /* TODO: if failed add surface_destroy_listener, remove keygrabs */
- }
- else if (wc)
- {
- e_keyrouter_wl_add_client_destroy_listener(wc);
- /* TODO: if failed add client_destroy_listener, remove keygrabs */
- }
- }
-
- return TIZEN_KEYROUTER_ERROR_NONE;
-}
-
-EINTERN void
-e_keyrouter_keygrab_remove_surface_from_list(struct wl_resource *surface)
-{
- uint32_t key, mode;
-
- EINA_SAFETY_ON_NULL_RETURN(surface);
-
- INF("[%s] surface(%p)", __func__, surface);
-
- g_rec_mutex_lock(&krt->grab_key_mutex);
-
- for (key = 0; key <= krt->max_tizen_hwkeys; key++)
- {
- if (!e_keyrouter_hardkeys_keycode_available(krt->HardKeys, key))
- continue;
-
- 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_keygrab_remove_client_from_list(struct wl_client *client)
-{
- uint32_t key, mode;
-
- EINA_SAFETY_ON_NULL_RETURN(client);
-
- INF("[%s] client(%p)", __func__, client);
-
- g_rec_mutex_lock(&krt->grab_key_mutex);
-
- for (key = 0; key <= krt->max_tizen_hwkeys; key++)
- {
- if (!e_keyrouter_hardkeys_keycode_available(krt->HardKeys, key))
- continue;
-
- 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_keygrab_find_mode_with_surface(struct wl_resource *surface, uint32_t key)
-{
- uint32_t mode;
-
- g_rec_mutex_lock(&krt->grab_key_mutex);
-
- 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 > SHARED)
- mode = NONE;
-
- if (mode != NONE)
- DBG("Find %d key grabbed by (wl_surface: %p) in %s mode",
- key, surface, e_keyrouter_util_mode_to_string(_modes[mode]));
- else
- DBG("%d key is not grabbed by (wl_surface: %p)", key, surface);
-
- return _modes[mode];
-}
-
-EINTERN uint32_t
-e_keyrouter_keygrab_find_mode_with_client(struct wl_client *client, uint32_t key)
-{
- uint32_t mode;
-
- g_rec_mutex_lock(&krt->grab_key_mutex);
-
- 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 > SHARED)
- mode = NONE;
-
- if (mode != NONE)
- DBG("Find %d key grabbed by (wl_client: %p) in %s mode",
- key, client, e_keyrouter_util_mode_to_string(_modes[mode]));
- else
- DBG("%d key is not grabbed by (wl_client: %p)", key, client);
-
- return _modes[mode];
-}
-
-EINTERN int
-e_keyrouter_keygrab_set(struct wl_client *client, struct wl_resource *surface, int key, int mode)
-{
- Eina_List *excl_ptr_list;
- int res;
-
-#ifdef HAVE_CYNARA
- if (EINA_FALSE == e_keyrouter_wl_util_do_privilege_check(client, mode, key))
- {
- INF("No permission for %d grab mode ! (key=%d)", mode, key);
- return TIZEN_KEYROUTER_ERROR_NO_PERMISSION;
- }
-#endif
-
- if (!surface)
- {
- /* Regarding topmost mode, a client must request to grab a key with a valid surface. */
- if (mode == TIZEN_KEYROUTER_MODE_TOPMOST)
- {
- WRN("Invalid surface for %d grab mode ! (key=%d)", mode, key);
-
- return TIZEN_KEYROUTER_ERROR_INVALID_SURFACE;
- }
- }
-
- /* Check the given key range */
- if (krt->max_tizen_hwkeys < key)
- {
- WRN("Invalid range of key ! (keycode:%d) maximum value(%d)", key, krt->max_tizen_hwkeys);
- return TIZEN_KEYROUTER_ERROR_INVALID_KEY;
- }
-
- /* Check whether the key can be grabbed or not !
- * Only key listed in Tizen key layout file can be grabbed. */
- if (!e_keyrouter_hardkeys_keycode_available(krt->HardKeys, key))
- {
- WRN("Invalid key ! Disabled to set keygrab ! (keycode:%d)", key);
- return TIZEN_KEYROUTER_ERROR_INVALID_KEY;
- }
-
- /* Check whether the request key can be grabbed or not */
- if (mode == TIZEN_KEYROUTER_MODE_EXCLUSIVE)
- {
- g_rec_mutex_lock(&krt->grab_key_mutex);
- excl_ptr_list = e_keyrouter_hardkeys_list_get(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_EXCLUSIVE);
- if (excl_ptr_list != NULL)
- {
- g_rec_mutex_unlock(&krt->grab_key_mutex);
- return TIZEN_KEYROUTER_ERROR_GRABBED_ALREADY;
- }
- g_rec_mutex_unlock(&krt->grab_key_mutex);
- }
-
- res = e_keyrouter_keygrab_prepend_to_keylist(surface,
- surface ? NULL : client,
- key,
- mode,
- EINA_FALSE);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(res == TIZEN_KEYROUTER_ERROR_NONE, res);
-
-
- return res;
-}
-
-int
-e_keyrouter_keygrab_unset(struct wl_client *client, struct wl_resource *surface, int key)
-{
- /* Check the given key range */
- if (krt->max_tizen_hwkeys < key)
- {
- WRN("Invalid range of key ! (keycode:%d) maximum value(%d)", key, krt->max_tizen_hwkeys);
- return TIZEN_KEYROUTER_ERROR_INVALID_KEY;
- }
-
- g_rec_mutex_lock(&krt->grab_key_mutex);
-
- /* Check whether the key can be unset or not !
- * Only key listed in Tizen key layout file can be unset. */
- if (!e_keyrouter_hardkeys_keycode_available(krt->HardKeys, key))
- {
- WRN("Invalid key ! Disabled to unset keygrab! (keycode:%d)", key);
- g_rec_mutex_unlock(&krt->grab_key_mutex);
-
- return TIZEN_KEYROUTER_ERROR_INVALID_KEY;
- }
-
- /* Ungrab top position grabs first. This grab mode do not need privilege */
- if (!surface)
- e_keyrouter_hardkeys_remove_keynode_with_client(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_TOPMOST, client);
- else
- e_keyrouter_hardkeys_remove_keynode_with_surface(krt->HardKeys, key, TIZEN_KEYROUTER_MODE_TOPMOST, surface);
-
- g_rec_mutex_unlock(&krt->grab_key_mutex);
-
-#ifdef HAVE_CYNARA
- if (!e_keyrouter_wl_util_do_privilege_check(client, TIZEN_KEYROUTER_MODE_NONE, key))
- goto finish;
-#endif
-
- g_rec_mutex_lock(&krt->grab_key_mutex);
-
- for (uint32_t mode = EXCLUSIVE; mode <= PRESSED; ++mode)
- {
- if (mode == TOPMOST) continue;
-
- 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);
- }
-
- g_rec_mutex_unlock(&krt->grab_key_mutex);
-
-finish:
- if (!surface)
- e_keyrouter_keycancel_send_with_client(client, key);
- else
- e_keyrouter_keycancel_send_with_surface(surface, key);
-
- return TIZEN_KEYROUTER_ERROR_NONE;
-}