From: jeon Date: Thu, 9 May 2019 08:36:39 +0000 (+0900) Subject: pepper-keyboard: do not process a keyboard event if a grab returns false X-Git-Tag: submit/tizen/20190530.092249~17 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b2709da8c2e7601feee209fc4c14720874b17a3e;p=platform%2Fcore%2Fuifw%2Fpepper.git pepper-keyboard: do not process a keyboard event if a grab returns false Change-Id: I2cf66c669a14db798f0c171b2b57e22f83d1d7d4 --- diff --git a/src/lib/desktop-shell/shell.c b/src/lib/desktop-shell/shell.c index 888d94d..ffa83b1 100644 --- a/src/lib/desktop-shell/shell.c +++ b/src/lib/desktop-shell/shell.c @@ -209,27 +209,32 @@ pointer_remove_callback(pepper_event_listener_t *listener, /* Nothing to do. */ } -static void +static pepper_bool_t default_keyboard_grab_key(pepper_keyboard_t *keyboard, void *data, uint32_t time, uint32_t key, uint32_t state) { pepper_keyboard_send_key(keyboard, pepper_keyboard_get_focus(keyboard), time, key, state); + + return PEPPER_TRUE; } -static void +static pepper_bool_t default_keyboard_grab_modifiers(pepper_keyboard_t *keyboard, void *data, uint32_t mods_depressed, uint32_t mods_latched, uint32_t mods_locked, uint32_t group) { pepper_keyboard_send_modifiers(keyboard, pepper_keyboard_get_focus(keyboard), mods_depressed, mods_latched, mods_locked, group); + + return PEPPER_TRUE; } -static void +static pepper_bool_t default_keyboard_grab_cancel(pepper_keyboard_t *keyboard, void *data) { /* Nothing to do. */ + return PEPPER_TRUE; } static const pepper_keyboard_grab_t default_keyboard_grab = { diff --git a/src/lib/pepper/keyboard.c b/src/lib/pepper/keyboard.c index 79fa442..804a8a2 100644 --- a/src/lib/pepper/keyboard.c +++ b/src/lib/pepper/keyboard.c @@ -48,6 +48,8 @@ static const struct wl_keyboard_interface keyboard_impl = { static void update_modifiers(pepper_keyboard_t *keyboard) { + pepper_bool_t res = PEPPER_TRUE; + if ((keyboard->pending.mods_depressed != keyboard->mods_depressed) || (keyboard->pending.mods_latched != keyboard->mods_latched) || (keyboard->pending.mods_locked != keyboard->mods_locked) || @@ -58,11 +60,13 @@ update_modifiers(pepper_keyboard_t *keyboard) keyboard->mods_locked = keyboard->pending.mods_locked; keyboard->group = keyboard->pending.group; - keyboard->grab->modifiers(keyboard, - keyboard->data, - keyboard->mods_depressed, - keyboard->mods_latched, - keyboard->mods_locked, keyboard->group); + res = keyboard->grab->modifiers(keyboard, + keyboard->data, + keyboard->mods_depressed, + keyboard->mods_latched, + keyboard->mods_locked, keyboard->group); + + if (!res) return; } } @@ -106,6 +110,7 @@ pepper_keyboard_handle_event(pepper_keyboard_t *keyboard, uint32_t id, uint32_t *keys = keyboard->keys.data; unsigned int num_keys = keyboard->keys.size / sizeof(uint32_t); unsigned int i; + pepper_bool_t res = PEPPER_TRUE; if (id != PEPPER_EVENT_INPUT_DEVICE_KEYBOARD_KEY) return; @@ -123,9 +128,11 @@ pepper_keyboard_handle_event(pepper_keyboard_t *keyboard, uint32_t id, if (event->state == PEPPER_KEY_STATE_PRESSED) *(uint32_t *) wl_array_add(&keyboard->keys, sizeof(uint32_t)) = event->key; - if (keyboard->grab) - keyboard->grab->key(keyboard, keyboard->data, event->time, event->key, - event->state); + if (keyboard->grab) { + res = keyboard->grab->key(keyboard, keyboard->data, event->time, event->key, + event->state); + if (!res) return; + } if (keyboard->need_update_keymap && keyboard->keys.size == 0) { pepper_object_emit_event(&keyboard->base, diff --git a/src/lib/pepper/pepper.h b/src/lib/pepper/pepper.h index 3d8484e..b293386 100644 --- a/src/lib/pepper/pepper.h +++ b/src/lib/pepper/pepper.h @@ -1088,9 +1088,9 @@ struct pepper_keyboard_grab { * @param key key code * @param state state flag (ex. WL_KEYBOARD_KEY_STATE_PRESSED) **/ - void (*key)(pepper_keyboard_t *keyboard, void *data, uint32_t time, - uint32_t key, - uint32_t state); + pepper_bool_t (*key)(pepper_keyboard_t *keyboard, void *data, uint32_t time, + uint32_t key, + uint32_t state); /** * Handler for keyboard modifier event @@ -1102,9 +1102,9 @@ struct pepper_keyboard_grab { * @param mods_locked locked mods * @param group (none) **/ - void (*modifiers)(pepper_keyboard_t *keyboard, void *data, - uint32_t mods_depressed, - uint32_t mods_latched, uint32_t mods_locked, uint32_t group); + pepper_bool_t (*modifiers)(pepper_keyboard_t *keyboard, void *data, + uint32_t mods_depressed, + uint32_t mods_latched, uint32_t mods_locked, uint32_t group); /** * Handler for grab cancel @@ -1112,7 +1112,7 @@ struct pepper_keyboard_grab { * @param keyboard keyboard object * @param data data registered for the grab (@see pepper_keyboard_set_grab) **/ - void (*cancel)(pepper_keyboard_t *keyboard, void *data); + pepper_bool_t (*cancel)(pepper_keyboard_t *keyboard, void *data); }; PEPPER_API struct wl_list *