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/input-manager.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/input-manager.c')
-rw-r--r-- | sway/input/input-manager.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/sway/input/input-manager.c b/sway/input/input-manager.c index c576a593..b900f666 100644 --- a/sway/input/input-manager.c +++ b/sway/input/input-manager.c | |||
@@ -558,13 +558,12 @@ void input_manager_reset_all_inputs() { | |||
558 | 558 | ||
559 | // If there is at least one keyboard using the default keymap, repeat delay, | 559 | // If there is at least one keyboard using the default keymap, repeat delay, |
560 | // and repeat rate, then it is possible that there is a keyboard group that | 560 | // and repeat rate, then it is possible that there is a keyboard group that |
561 | // needs to be reset. This will disarm the keyboards as well as exit and | 561 | // need their keyboard disarmed. |
562 | // re-enter any focus views. | ||
563 | struct sway_seat *seat; | 562 | struct sway_seat *seat; |
564 | wl_list_for_each(seat, &server.input->seats, link) { | 563 | wl_list_for_each(seat, &server.input->seats, link) { |
565 | struct sway_keyboard_group *group; | 564 | struct sway_keyboard_group *group; |
566 | wl_list_for_each(group, &seat->keyboard_groups, link) { | 565 | wl_list_for_each(group, &seat->keyboard_groups, link) { |
567 | seat_reset_device(seat, group->seat_device->input_device); | 566 | sway_keyboard_disarm_key_repeat(group->seat_device->keyboard); |
568 | } | 567 | } |
569 | } | 568 | } |
570 | } | 569 | } |