aboutsummaryrefslogtreecommitdiff
path: root/include/sway/input
diff options
context:
space:
mode:
Diffstat (limited to 'include/sway/input')
-rw-r--r--include/sway/input/keyboard.h31
1 files changed, 25 insertions, 6 deletions
diff --git a/include/sway/input/keyboard.h b/include/sway/input/keyboard.h
index 8ec3eb35..e99a54b1 100644
--- a/include/sway/input/keyboard.h
+++ b/include/sway/input/keyboard.h
@@ -3,7 +3,26 @@
#include "sway/input/seat.h"
-#define SWAY_KEYBOARD_PRESSED_KEYSYMS_CAP 32
+#define SWAY_KEYBOARD_PRESSED_KEYS_CAP 32
+
+struct sway_shortcut_state {
+ /**
+ * A list of pressed key ids (either keysyms or keycodes),
+ * including duplicates when different keycodes produce the same key id.
+ *
+ * Each key id is associated with the keycode (in `pressed_keycodes`)
+ * whose press generated it, so that the key id can be removed on
+ * keycode release without recalculating the transient link between
+ * keycode and key id at the time of the key press.
+ */
+ uint32_t pressed_keys[SWAY_KEYBOARD_PRESSED_KEYS_CAP];
+ /**
+ * The list of keycodes associated to currently pressed key ids,
+ * including duplicates when a keycode generates multiple key ids.
+ */
+ uint32_t pressed_keycodes[SWAY_KEYBOARD_PRESSED_KEYS_CAP];
+ int last_key_index;
+};
struct sway_keyboard {
struct sway_seat_device *seat_device;
@@ -13,11 +32,11 @@ struct sway_keyboard {
struct wl_listener keyboard_key;
struct wl_listener keyboard_modifiers;
- xkb_keysym_t pressed_keysyms_translated[SWAY_KEYBOARD_PRESSED_KEYSYMS_CAP];
- uint32_t modifiers_translated;
-
- xkb_keysym_t pressed_keysyms_raw[SWAY_KEYBOARD_PRESSED_KEYSYMS_CAP];
- uint32_t modifiers_raw;
+ struct sway_shortcut_state state_keysyms_translated;
+ struct sway_shortcut_state state_keysyms_raw;
+ struct sway_shortcut_state state_keycodes;
+ struct sway_binding *held_binding;
+ uint32_t last_modifiers;
};
struct sway_keyboard *sway_keyboard_create(struct sway_seat *seat,