aboutsummaryrefslogtreecommitdiff
path: root/sway/input
diff options
context:
space:
mode:
Diffstat (limited to 'sway/input')
-rw-r--r--sway/input/keyboard.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/sway/input/keyboard.c b/sway/input/keyboard.c
index a42ce911..c4ce8246 100644
--- a/sway/input/keyboard.c
+++ b/sway/input/keyboard.c
@@ -675,9 +675,7 @@ static void sway_keyboard_group_remove(struct sway_keyboard *keyboard) {
struct sway_keyboard_group *sway_group = wlr_group->data;
wlr_group->data = NULL;
wl_list_remove(&sway_group->link);
- wl_list_remove(&sway_group->keyboard_key.link);
- wl_list_remove(&sway_group->keyboard_modifiers.link);
- free(sway_group->seat_device->keyboard);
+ sway_keyboard_destroy(sway_group->seat_device->keyboard);
free(sway_group->seat_device->input_device);
free(sway_group->seat_device);
free(sway_group);
@@ -921,6 +919,11 @@ void sway_keyboard_destroy(struct sway_keyboard *keyboard) {
if (keyboard->seat_device->input_device->wlr_device->keyboard->group) {
sway_keyboard_group_remove(keyboard);
}
+ struct wlr_seat *wlr_seat = keyboard->seat_device->sway_seat->wlr_seat;
+ struct sway_input_device *device = keyboard->seat_device->input_device;
+ if (wlr_seat_get_keyboard(wlr_seat) == device->wlr_device->keyboard) {
+ wlr_seat_set_keyboard(wlr_seat, NULL);
+ }
if (keyboard->keymap) {
xkb_keymap_unref(keyboard->keymap);
}