From 071a5b3593726ede2b307238e55753e1ea988b11 Mon Sep 17 00:00:00 2001 From: Seunghun Lee Date: Mon, 18 Apr 2022 10:37:06 +0900 Subject: [PATCH] Enable user to get keyboard modifiers input-device-test take modifiers into account when handling key. Change-Id: Ic72c3636c55dd9c43ddd14959ac442bd6cceaeed --- include/libds/interfaces/keyboard.h | 13 ------------- include/libds/keyboard.h | 13 +++++++++++++ src/examples/input-device-test.c | 36 ++++++++++++++++++++++++++++-------- 3 files changed, 41 insertions(+), 21 deletions(-) diff --git a/include/libds/interfaces/keyboard.h b/include/libds/interfaces/keyboard.h index f68c9a7..3602fe5 100644 --- a/include/libds/interfaces/keyboard.h +++ b/include/libds/interfaces/keyboard.h @@ -14,19 +14,6 @@ enum ds_keyboard_led { DS_LED_SCROLL_LOCK = 1 << 2, }; -#define DS_MODIFIER_COUNT 8 - -enum ds_keyboard_modifier { - DS_MODIFIER_SHIFT = 1 << 0, - DS_MODIFIER_CAPS = 1 << 1, - DS_MODIFIER_CTRL = 1 << 2, - DS_MODIFIER_ALT = 1 << 3, - DS_MODIFIER_MOD2 = 1 << 4, - DS_MODIFIER_MOD3 = 1 << 5, - DS_MODIFIER_LOGO = 1 << 6, - DS_MODIFIER_MOD5 = 1 << 7, -}; - #define DS_KEYBOARD_KEYS_CAP 32 struct ds_keyboard; diff --git a/include/libds/keyboard.h b/include/libds/keyboard.h index e226cb4..2a515e3 100644 --- a/include/libds/keyboard.h +++ b/include/libds/keyboard.h @@ -9,6 +9,19 @@ struct ds_keyboard; +#define DS_MODIFIER_COUNT 8 + +enum ds_keyboard_modifier { + DS_MODIFIER_SHIFT = 1 << 0, + DS_MODIFIER_CAPS = 1 << 1, + DS_MODIFIER_CTRL = 1 << 2, + DS_MODIFIER_ALT = 1 << 3, + DS_MODIFIER_MOD2 = 1 << 4, + DS_MODIFIER_MOD3 = 1 << 5, + DS_MODIFIER_LOGO = 1 << 6, + DS_MODIFIER_MOD5 = 1 << 7, +}; + struct ds_event_keyboard_key { uint32_t time_msec; diff --git a/src/examples/input-device-test.c b/src/examples/input-device-test.c index 237d0b5..62fe8b0 100644 --- a/src/examples/input-device-test.c +++ b/src/examples/input-device-test.c @@ -230,12 +230,26 @@ keyboard_handle_device_destroy(struct wl_listener *listener, void *data) static void keyboard_handle_modifiers(struct wl_listener *listener, void *data) { - struct keyboard_device *keyboard; struct ds_keyboard *ds_keyboard = data; - - keyboard = wl_container_of(listener, keyboard, destroy); - - ds_inf("Keyboard(%p) event modifiers", ds_keyboard); + uint32_t modifiers; + + modifiers = ds_keyboard_get_modifiers(ds_keyboard); + if (modifiers & DS_MODIFIER_CTRL) + ds_inf("Keyboard(%p) modifier: Ctrl", ds_keyboard); + if (modifiers & DS_MODIFIER_SHIFT) + ds_inf("Keyboard(%p) modifier: Shift", ds_keyboard); + if (modifiers & DS_MODIFIER_CAPS) + ds_inf("Keyboard(%p) modifier: Caps", ds_keyboard); + if (modifiers & DS_MODIFIER_ALT) + ds_inf("Keyboard(%p) modifier: Alt", ds_keyboard); + if (modifiers & DS_MODIFIER_MOD2) + ds_inf("Keyboard(%p) modifier: Mod2", ds_keyboard); + if (modifiers & DS_MODIFIER_MOD3) + ds_inf("Keyboard(%p) modifier: Mod3", ds_keyboard); + if (modifiers & DS_MODIFIER_LOGO) + ds_inf("Keyboard(%p) modifier: Logo", ds_keyboard); + if (modifiers & DS_MODIFIER_MOD5) + ds_inf("Keyboard(%p) modifier: Mod5", ds_keyboard); } static void @@ -245,6 +259,7 @@ keyboard_handle_key(struct wl_listener *listener, void *data) struct keyboard_device *keyboard; struct xkb_state *xkb_state; const xkb_keysym_t *syms; + uint32_t modifiers; int nsyms = 0; keyboard = wl_container_of(listener, keyboard, key); @@ -260,9 +275,14 @@ keyboard_handle_key(struct wl_listener *listener, void *data) nsyms = xkb_state_key_get_syms(xkb_state, event->keycode + 8, &syms); - for (int i = 0; i < nsyms; i++) { - if (syms[i] == XKB_KEY_Escape) - wl_display_terminate(keyboard->server->display); + modifiers = ds_keyboard_get_modifiers(keyboard->ds_keyboard); + if ((modifiers & DS_MODIFIER_CTRL) && + (modifiers & DS_MODIFIER_ALT) && + event->state == WL_KEYBOARD_KEY_STATE_PRESSED) { + for (int i = 0; i < nsyms; i++) { + if (syms[i] == XKB_KEY_BackSpace) + wl_display_terminate(keyboard->server->display); + } } } -- 2.7.4