summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorLibravatar frsfnrrg <frsfnrrg@users.noreply.github.com>2018-05-31 19:35:17 -0400
committerLibravatar frsfnrrg <frsfnrrg@users.noreply.github.com>2018-06-01 18:52:36 -0400
commita056419ad720e20fdc04f3a7d05bce62fa639755 (patch)
tree5248788d8b24cbcea07897b884c243700997e460 /include
parentUse XKB keycode numbering for bindcode (diff)
downloadsway-a056419ad720e20fdc04f3a7d05bce62fa639755.tar.gz
sway-a056419ad720e20fdc04f3a7d05bce62fa639755.tar.zst
sway-a056419ad720e20fdc04f3a7d05bce62fa639755.zip
Rewrite shortcut handling code to avoid hardcoded values
The same shortcut algorithm is now used for keycodes, raw keysyms, and translated keysyms. Pressed keysyms are now stored in association with the keycodes that generated them. Modifier keycodes (and associated keysyms) are identified retroactively by the subsequent change to the modifier flags.
Diffstat (limited to 'include')
-rw-r--r--include/sway/input/keyboard.h18
1 files changed, 12 insertions, 6 deletions
diff --git a/include/sway/input/keyboard.h b/include/sway/input/keyboard.h
index 8ec3eb35..c9a8d514 100644
--- a/include/sway/input/keyboard.h
+++ b/include/sway/input/keyboard.h
@@ -3,7 +3,13 @@
3 3
4#include "sway/input/seat.h" 4#include "sway/input/seat.h"
5 5
6#define SWAY_KEYBOARD_PRESSED_KEYSYMS_CAP 32 6#define SWAY_KEYBOARD_PRESSED_KEYS_CAP 32
7
8struct sway_shortcut_state {
9 uint32_t pressed_keys[SWAY_KEYBOARD_PRESSED_KEYS_CAP];
10 uint32_t pressed_keycodes[SWAY_KEYBOARD_PRESSED_KEYS_CAP];
11 int last_key_index;
12};
7 13
8struct sway_keyboard { 14struct sway_keyboard {
9 struct sway_seat_device *seat_device; 15 struct sway_seat_device *seat_device;
@@ -13,11 +19,11 @@ struct sway_keyboard {
13 struct wl_listener keyboard_key; 19 struct wl_listener keyboard_key;
14 struct wl_listener keyboard_modifiers; 20 struct wl_listener keyboard_modifiers;
15 21
16 xkb_keysym_t pressed_keysyms_translated[SWAY_KEYBOARD_PRESSED_KEYSYMS_CAP]; 22 struct sway_shortcut_state state_keysyms_translated;
17 uint32_t modifiers_translated; 23 struct sway_shortcut_state state_keysyms_raw;
18 24 struct sway_shortcut_state state_keycodes;
19 xkb_keysym_t pressed_keysyms_raw[SWAY_KEYBOARD_PRESSED_KEYSYMS_CAP]; 25 struct sway_binding *held_binding;
20 uint32_t modifiers_raw; 26 uint32_t last_modifiers;
21}; 27};
22 28
23struct sway_keyboard *sway_keyboard_create(struct sway_seat *seat, 29struct sway_keyboard *sway_keyboard_create(struct sway_seat *seat,