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.
This commit is contained in:
frsfnrrg 2018-05-31 19:35:17 -04:00
parent f5ed65e633
commit a056419ad7
2 changed files with 168 additions and 265 deletions

View file

@ -3,7 +3,13 @@
#include "sway/input/seat.h"
#define SWAY_KEYBOARD_PRESSED_KEYSYMS_CAP 32
#define SWAY_KEYBOARD_PRESSED_KEYS_CAP 32
struct sway_shortcut_state {
uint32_t pressed_keys[SWAY_KEYBOARD_PRESSED_KEYS_CAP];
uint32_t pressed_keycodes[SWAY_KEYBOARD_PRESSED_KEYS_CAP];
int last_key_index;
};
struct sway_keyboard {
struct sway_seat_device *seat_device;
@ -13,11 +19,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,