diff options
author | emersion <contact@emersion.fr> | 2018-06-02 09:18:07 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-02 09:18:07 +0100 |
commit | 2d480e754e8287ba747faf1b21d8ecb927d565a1 (patch) | |
tree | cf71dc112c1b4acb944073d93b73f76ee957ceac /include/sway/input/keyboard.h | |
parent | a064317d9772aab2760cf6da8a65dfe92867d0f9 (diff) | |
parent | 78b7b468954c561bb9f800aef54afacbbe6d3d40 (diff) |
Merge pull request #2080 from frsfnrrg/keyboard-remodeling
Reduce work duplication in keyboard and binding code
Diffstat (limited to 'include/sway/input/keyboard.h')
-rw-r--r-- | include/sway/input/keyboard.h | 31 |
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, |