aboutsummaryrefslogtreecommitdiffstats
path: root/sway/input/input-manager.c
diff options
context:
space:
mode:
authorLibravatar Brian Ashworth <bosrsf04@gmail.com>2020-05-18 17:52:13 -0400
committerLibravatar Tudor Brindus <me@tbrindus.ca>2020-05-19 15:42:32 -0400
commit5c32a4845354e59133b1d213928d8cee1b8691bd (patch)
tree2b1aded3991d25558a91f8ec3b4b24dbd36e6ae4 /sway/input/input-manager.c
parentbash completion: swaymsg accepts --version, not --verbose (diff)
downloadsway-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.c5
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}