23c64ab22d
This attempts to use the default keymap when the one defined in the input config fails to compile. The goal is to make it so the keyboard is always in a usable state, even if it is not the user's requested settings as usability is more important. This also removes the calls to `getenv` for the `XKB_DEFAULT_*` family of environment variables. The reasoning is libxkbcommon will fallback to using those (and then the system defaults) when any of the rule names are `NULL` or an empty string anyway so there is no need for sway to duplicate the efforts.
79 lines
2.2 KiB
C
79 lines
2.2 KiB
C
#ifndef _SWAY_INPUT_KEYBOARD_H
|
|
#define _SWAY_INPUT_KEYBOARD_H
|
|
|
|
#include "sway/input/seat.h"
|
|
|
|
#define SWAY_KEYBOARD_PRESSED_KEYS_CAP 32
|
|
|
|
/**
|
|
* Get modifier mask from modifier name.
|
|
*
|
|
* Returns the modifer mask or 0 if the name isn't found.
|
|
*/
|
|
uint32_t get_modifier_mask_by_name(const char *name);
|
|
|
|
/**
|
|
* Get modifier name from modifier mask.
|
|
*
|
|
* Returns the modifier name or NULL if it isn't found.
|
|
*/
|
|
const char *get_modifier_name_by_mask(uint32_t modifier);
|
|
|
|
/**
|
|
* Get an array of modifier names from modifier_masks
|
|
*
|
|
* Populates the names array and return the number of names added.
|
|
*/
|
|
int get_modifier_names(const char **names, uint32_t modifier_masks);
|
|
|
|
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];
|
|
uint32_t last_keycode;
|
|
uint32_t last_raw_modifiers;
|
|
size_t npressed;
|
|
uint32_t current_key;
|
|
};
|
|
|
|
struct sway_keyboard {
|
|
struct sway_seat_device *seat_device;
|
|
|
|
struct xkb_keymap *keymap;
|
|
|
|
struct wl_listener keyboard_key;
|
|
struct wl_listener keyboard_modifiers;
|
|
|
|
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;
|
|
|
|
struct wl_event_source *key_repeat_source;
|
|
struct sway_binding *repeat_binding;
|
|
};
|
|
|
|
struct xkb_keymap *sway_keyboard_compile_keymap(struct input_config *ic);
|
|
|
|
struct sway_keyboard *sway_keyboard_create(struct sway_seat *seat,
|
|
struct sway_seat_device *device);
|
|
|
|
void sway_keyboard_configure(struct sway_keyboard *keyboard);
|
|
|
|
void sway_keyboard_destroy(struct sway_keyboard *keyboard);
|
|
|
|
void sway_keyboard_disarm_key_repeat(struct sway_keyboard *keyboard);
|
|
#endif
|