Enable user to get keyboard modifiers 69/278169/1
authorSeunghun Lee <shiin.lee@samsung.com>
Mon, 18 Apr 2022 01:37:06 +0000 (10:37 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Mon, 18 Jul 2022 05:58:27 +0000 (14:58 +0900)
input-device-test take modifiers into account when handling key.

Change-Id: Ic72c3636c55dd9c43ddd14959ac442bd6cceaeed

include/libds/interfaces/keyboard.h
include/libds/keyboard.h
src/examples/input-device-test.c

index f68c9a7..3602fe5 100644 (file)
@@ -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;
index e226cb4..2a515e3 100644 (file)
@@ -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;
index 237d0b5..62fe8b0 100644 (file)
@@ -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);
+        }
     }
 }