input: reset modifiers in keyboard_leave()

Closes #2034
This commit is contained in:
Daniel Eklöf 2025-04-19 08:05:15 +02:00
parent cb2a64c585
commit ef4a680ae8
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 11 additions and 0 deletions

View file

@ -765,9 +765,17 @@ keyboard_leave(void *data, struct wl_keyboard *wl_keyboard, uint32_t serial,
seat->kbd.alt = false;
seat->kbd.ctrl = false;
seat->kbd.super = false;
if (seat->kbd.xkb_compose_state != NULL)
xkb_compose_state_reset(seat->kbd.xkb_compose_state);
if (seat->kbd.xkb_state != NULL && seat->kbd.xkb_keymap != NULL) {
const xkb_layout_index_t layout_count = xkb_keymap_num_layouts(seat->kbd.xkb_keymap);
for (xkb_layout_index_t i = 0; i < layout_count; i++)
xkb_state_update_mask(seat->kbd.xkb_state, 0, 0, 0, i, i, i);
}
if (old_focused != NULL) {
seat->pointer.hidden = false;
term_xcursor_update_for_seat(old_focused, seat);