diff options
author | Brian Ashworth <bosrsf04@gmail.com> | 2020-05-18 17:52:13 -0400 |
---|---|---|
committer | Tudor Brindus <me@tbrindus.ca> | 2020-05-19 15:42:32 -0400 |
commit | 5c32a4845354e59133b1d213928d8cee1b8691bd (patch) | |
tree | 2b1aded3991d25558a91f8ec3b4b24dbd36e6ae4 /sway/input/keyboard.c | |
parent | bash completion: swaymsg accepts --version, not --verbose (diff) | |
download | sway-5c32a4845354e59133b1d213928d8cee1b8691bd.tar.gz sway-5c32a4845354e59133b1d213928d8cee1b8691bd.tar.zst sway-5c32a4845354e59133b1d213928d8cee1b8691bd.zip |
input: fix reloading crash due to keyboard group configuring
Keyboard group keyboards should not call sway_keyboard_configure. They
do not have an input config and they derive their state from the
keyboards within the group.
For some reason, I got sway_keyboard_configure and
seat_configure_keyboard mixed up and thought seat_reset_device called
the latter.
Calling sway_keyboard_configure with a keyboard group's keyboard is not
supported and can cause issues. If any clients are listening to the ipc
input event, a sigsegv will occur due to not every property - such as
identifier - being wired up for keyboard group keyboard's.
This also adds an assertion to sway_keyboard_configure to ensure that
this does not occur in the future and any instances are quickly caught.
Diffstat (limited to 'sway/input/keyboard.c')
-rw-r--r-- | sway/input/keyboard.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/sway/input/keyboard.c b/sway/input/keyboard.c index 1002698e..ba0e020c 100644 --- a/sway/input/keyboard.c +++ b/sway/input/keyboard.c | |||
@@ -853,6 +853,12 @@ void sway_keyboard_configure(struct sway_keyboard *keyboard) { | |||
853 | struct wlr_input_device *wlr_device = | 853 | struct wlr_input_device *wlr_device = |
854 | keyboard->seat_device->input_device->wlr_device; | 854 | keyboard->seat_device->input_device->wlr_device; |
855 | 855 | ||
856 | if (!sway_assert(!wlr_keyboard_group_from_wlr_keyboard(wlr_device->keyboard), | ||
857 | "sway_keyboard_configure should not be called with a " | ||
858 | "keyboard group's keyboard")) { | ||
859 | return; | ||
860 | } | ||
861 | |||
856 | struct xkb_keymap *keymap = sway_keyboard_compile_keymap(input_config, NULL); | 862 | struct xkb_keymap *keymap = sway_keyboard_compile_keymap(input_config, NULL); |
857 | if (!keymap) { | 863 | if (!keymap) { |
858 | sway_log(SWAY_ERROR, "Failed to compile keymap. Attempting defaults"); | 864 | sway_log(SWAY_ERROR, "Failed to compile keymap. Attempting defaults"); |