diff --git a/src/video/wayland/SDL_waylandevents.c b/src/video/wayland/SDL_waylandevents.c index bfbc775c30..8ade405c33 100644 --- a/src/video/wayland/SDL_waylandevents.c +++ b/src/video/wayland/SDL_waylandevents.c @@ -1393,21 +1393,21 @@ static void Wayland_UpdateKeymap(SDL_WaylandSeat *seat) xkb_mod_mask_t xkb_mask; } const keymod_masks[] = { { SDL_KMOD_NONE, 0 }, - { SDL_KMOD_SHIFT, seat->keyboard.xkb.idx_shift }, - { SDL_KMOD_CAPS, seat->keyboard.xkb.idx_caps }, - { SDL_KMOD_SHIFT | SDL_KMOD_CAPS, seat->keyboard.xkb.idx_shift | seat->keyboard.xkb.idx_caps }, - { SDL_KMOD_MODE, seat->keyboard.xkb.idx_mod5 }, - { SDL_KMOD_MODE | SDL_KMOD_SHIFT, seat->keyboard.xkb.idx_mod5 | seat->keyboard.xkb.idx_shift }, - { SDL_KMOD_MODE | SDL_KMOD_CAPS, seat->keyboard.xkb.idx_mod5 | seat->keyboard.xkb.idx_caps }, - { SDL_KMOD_MODE | SDL_KMOD_SHIFT | SDL_KMOD_CAPS, seat->keyboard.xkb.idx_mod5 | seat->keyboard.xkb.idx_shift | seat->keyboard.xkb.idx_caps }, - { SDL_KMOD_LEVEL5, seat->keyboard.xkb.idx_mod3 }, - { SDL_KMOD_LEVEL5 | SDL_KMOD_SHIFT, seat->keyboard.xkb.idx_mod3 | seat->keyboard.xkb.idx_shift }, - { SDL_KMOD_LEVEL5 | SDL_KMOD_CAPS, seat->keyboard.xkb.idx_mod3 | seat->keyboard.xkb.idx_caps }, - { SDL_KMOD_LEVEL5 | SDL_KMOD_SHIFT | SDL_KMOD_CAPS, seat->keyboard.xkb.idx_mod3 | seat->keyboard.xkb.idx_shift | seat->keyboard.xkb.idx_caps }, - { SDL_KMOD_LEVEL5 | SDL_KMOD_MODE, seat->keyboard.xkb.idx_mod3 | seat->keyboard.xkb.idx_mod5 }, - { SDL_KMOD_LEVEL5 | SDL_KMOD_MODE | SDL_KMOD_SHIFT, seat->keyboard.xkb.idx_mod3 | seat->keyboard.xkb.idx_mod5 | seat->keyboard.xkb.idx_shift }, - { SDL_KMOD_LEVEL5 | SDL_KMOD_MODE | SDL_KMOD_CAPS, seat->keyboard.xkb.idx_mod3 | seat->keyboard.xkb.idx_mod5 | seat->keyboard.xkb.idx_caps }, - { SDL_KMOD_LEVEL5 | SDL_KMOD_MODE | SDL_KMOD_SHIFT | SDL_KMOD_CAPS, seat->keyboard.xkb.idx_mod3 | seat->keyboard.xkb.idx_mod5 | seat->keyboard.xkb.idx_shift | seat->keyboard.xkb.idx_caps }, + { SDL_KMOD_SHIFT, seat->keyboard.xkb.shift_mask }, + { SDL_KMOD_CAPS, seat->keyboard.xkb.caps_mask }, + { SDL_KMOD_SHIFT | SDL_KMOD_CAPS, seat->keyboard.xkb.shift_mask | seat->keyboard.xkb.caps_mask }, + { SDL_KMOD_MODE, seat->keyboard.xkb.level3_mask }, + { SDL_KMOD_MODE | SDL_KMOD_SHIFT, seat->keyboard.xkb.level3_mask | seat->keyboard.xkb.shift_mask }, + { SDL_KMOD_MODE | SDL_KMOD_CAPS, seat->keyboard.xkb.level3_mask | seat->keyboard.xkb.caps_mask }, + { SDL_KMOD_MODE | SDL_KMOD_SHIFT | SDL_KMOD_CAPS, seat->keyboard.xkb.level3_mask | seat->keyboard.xkb.shift_mask | seat->keyboard.xkb.caps_mask }, + { SDL_KMOD_LEVEL5, seat->keyboard.xkb.level5_mask }, + { SDL_KMOD_LEVEL5 | SDL_KMOD_SHIFT, seat->keyboard.xkb.level5_mask | seat->keyboard.xkb.shift_mask }, + { SDL_KMOD_LEVEL5 | SDL_KMOD_CAPS, seat->keyboard.xkb.level5_mask | seat->keyboard.xkb.caps_mask }, + { SDL_KMOD_LEVEL5 | SDL_KMOD_SHIFT | SDL_KMOD_CAPS, seat->keyboard.xkb.level5_mask | seat->keyboard.xkb.shift_mask | seat->keyboard.xkb.caps_mask }, + { SDL_KMOD_LEVEL5 | SDL_KMOD_MODE, seat->keyboard.xkb.level5_mask | seat->keyboard.xkb.level3_mask }, + { SDL_KMOD_LEVEL5 | SDL_KMOD_MODE | SDL_KMOD_SHIFT, seat->keyboard.xkb.level5_mask | seat->keyboard.xkb.level3_mask | seat->keyboard.xkb.shift_mask }, + { SDL_KMOD_LEVEL5 | SDL_KMOD_MODE | SDL_KMOD_CAPS, seat->keyboard.xkb.level5_mask | seat->keyboard.xkb.level3_mask | seat->keyboard.xkb.caps_mask }, + { SDL_KMOD_LEVEL5 | SDL_KMOD_MODE | SDL_KMOD_SHIFT | SDL_KMOD_CAPS, seat->keyboard.xkb.level5_mask | seat->keyboard.xkb.level3_mask | seat->keyboard.xkb.shift_mask | seat->keyboard.xkb.caps_mask }, }; if (!seat->keyboard.is_virtual) { @@ -1428,8 +1428,8 @@ static void Wayland_UpdateKeymap(SDL_WaylandSeat *seat) for (int i = 0; i < SDL_arraysize(keymod_masks); ++i) { keymap.modstate = keymod_masks[i].sdl_mask; WAYLAND_xkb_state_update_mask(keymap.state, - keymod_masks[i].xkb_mask & (seat->keyboard.xkb.idx_shift | seat->keyboard.xkb.idx_mod5 | seat->keyboard.xkb.idx_mod3), 0, keymod_masks[i].xkb_mask & seat->keyboard.xkb.idx_caps, - 0, 0, seat->keyboard.xkb.current_group); + keymod_masks[i].xkb_mask & (seat->keyboard.xkb.shift_mask | seat->keyboard.xkb.level3_mask | seat->keyboard.xkb.level5_mask), 0, keymod_masks[i].xkb_mask & seat->keyboard.xkb.caps_mask, + 0, 0, seat->keyboard.xkb.current_layout); WAYLAND_xkb_keymap_key_for_each(seat->keyboard.xkb.keymap, Wayland_keymap_iter, &keymap); @@ -1490,25 +1490,26 @@ static void keyboard_handle_keymap(void *data, struct wl_keyboard *keyboard, } #if SDL_XKBCOMMON_CHECK_VERSION(1, 10, 0) - seat->keyboard.xkb.idx_shift = WAYLAND_xkb_keymap_mod_get_mask(seat->keyboard.xkb.keymap, XKB_MOD_NAME_SHIFT); - seat->keyboard.xkb.idx_ctrl = WAYLAND_xkb_keymap_mod_get_mask(seat->keyboard.xkb.keymap, XKB_MOD_NAME_CTRL); - seat->keyboard.xkb.idx_alt = WAYLAND_xkb_keymap_mod_get_mask(seat->keyboard.xkb.keymap, XKB_VMOD_NAME_ALT); - seat->keyboard.xkb.idx_gui = WAYLAND_xkb_keymap_mod_get_mask(seat->keyboard.xkb.keymap, XKB_VMOD_NAME_SUPER); - seat->keyboard.xkb.idx_mod5 = WAYLAND_xkb_keymap_mod_get_mask(seat->keyboard.xkb.keymap, XKB_VMOD_NAME_LEVEL3); - seat->keyboard.xkb.idx_mod3 = WAYLAND_xkb_keymap_mod_get_mask(seat->keyboard.xkb.keymap, XKB_VMOD_NAME_LEVEL5); - seat->keyboard.xkb.idx_num = WAYLAND_xkb_keymap_mod_get_mask(seat->keyboard.xkb.keymap, XKB_VMOD_NAME_NUM); - seat->keyboard.xkb.idx_caps = WAYLAND_xkb_keymap_mod_get_mask(seat->keyboard.xkb.keymap, XKB_MOD_NAME_CAPS); + seat->keyboard.xkb.shift_mask = WAYLAND_xkb_keymap_mod_get_mask(seat->keyboard.xkb.keymap, XKB_MOD_NAME_SHIFT); + seat->keyboard.xkb.ctrl_mask = WAYLAND_xkb_keymap_mod_get_mask(seat->keyboard.xkb.keymap, XKB_MOD_NAME_CTRL); + seat->keyboard.xkb.alt_mask = WAYLAND_xkb_keymap_mod_get_mask(seat->keyboard.xkb.keymap, XKB_VMOD_NAME_ALT); + seat->keyboard.xkb.gui_mask = WAYLAND_xkb_keymap_mod_get_mask(seat->keyboard.xkb.keymap, XKB_VMOD_NAME_SUPER); + seat->keyboard.xkb.level3_mask = WAYLAND_xkb_keymap_mod_get_mask(seat->keyboard.xkb.keymap, XKB_VMOD_NAME_LEVEL3); + seat->keyboard.xkb.level5_mask = WAYLAND_xkb_keymap_mod_get_mask(seat->keyboard.xkb.keymap, XKB_VMOD_NAME_LEVEL5); + seat->keyboard.xkb.num_mask = WAYLAND_xkb_keymap_mod_get_mask(seat->keyboard.xkb.keymap, XKB_VMOD_NAME_NUM); + seat->keyboard.xkb.caps_mask = WAYLAND_xkb_keymap_mod_get_mask(seat->keyboard.xkb.keymap, XKB_MOD_NAME_CAPS); #else #define GET_MOD_INDEX(mod) \ WAYLAND_xkb_keymap_mod_get_index(seat->keyboard.xkb.keymap, XKB_MOD_NAME_##mod) - seat->keyboard.xkb.idx_shift = 1 << GET_MOD_INDEX(SHIFT); - seat->keyboard.xkb.idx_ctrl = 1 << GET_MOD_INDEX(CTRL); - seat->keyboard.xkb.idx_alt = 1 << GET_MOD_INDEX(ALT); - seat->keyboard.xkb.idx_gui = 1 << GET_MOD_INDEX(LOGO); - seat->keyboard.xkb.idx_mod3 = 1 << GET_MOD_INDEX(MOD3); - seat->keyboard.xkb.idx_mod5 = 1 << GET_MOD_INDEX(MOD5); - seat->keyboard.xkb.idx_num = 1 << GET_MOD_INDEX(NUM); - seat->keyboard.xkb.idx_caps = 1 << GET_MOD_INDEX(CAPS); + seat->keyboard.xkb.shift_mask = 1 << GET_MOD_INDEX(SHIFT); + seat->keyboard.xkb.ctrl_mask = 1 << GET_MOD_INDEX(CTRL); + seat->keyboard.xkb.alt_mask = 1 << GET_MOD_INDEX(ALT); + seat->keyboard.xkb.gui_mask = 1 << GET_MOD_INDEX(LOGO); + // Note: This is correct: Mod3 is typically level 5 shift, and Mod5 is typically level 3 shift. + seat->keyboard.xkb.level3_mask = 1 << GET_MOD_INDEX(MOD5); + seat->keyboard.xkb.level5_mask = 1 << GET_MOD_INDEX(MOD3); + seat->keyboard.xkb.num_mask = 1 << GET_MOD_INDEX(NUM); + seat->keyboard.xkb.caps_mask = 1 << GET_MOD_INDEX(CAPS); #undef GET_MOD_INDEX #endif @@ -1534,7 +1535,7 @@ static void keyboard_handle_keymap(void *data, struct wl_keyboard *keyboard, seat->keyboard.is_virtual = WAYLAND_xkb_keymap_layout_get_name(seat->keyboard.xkb.keymap, 0) == NULL; // Update the keymap if changed. - if (seat->keyboard.xkb.current_group != XKB_GROUP_INVALID) { + if (seat->keyboard.xkb.current_layout != XKB_LAYOUT_INVALID) { Wayland_UpdateKeymap(seat); } @@ -1590,7 +1591,7 @@ static SDL_Scancode Wayland_GetScancodeForKey(SDL_WaylandSeat *seat, uint32_t ke scancode = SDL_GetScancodeFromTable(SDL_SCANCODE_TABLE_XFREE86_2, key); } else { const xkb_keysym_t *syms; - if (WAYLAND_xkb_keymap_key_get_syms_by_level(seat->keyboard.xkb.keymap, key + 8, seat->keyboard.xkb.current_group, 0, &syms) > 0) { + if (WAYLAND_xkb_keymap_key_get_syms_by_level(seat->keyboard.xkb.keymap, key + 8, seat->keyboard.xkb.current_layout, 0, &syms) > 0) { scancode = SDL_GetScancodeFromKeySym(syms[0], key); } } @@ -1606,7 +1607,7 @@ static void Wayland_ReconcileModifiers(SDL_WaylandSeat *seat, bool key_pressed) * pressed state via means other than pressing the physical key. */ if (!key_pressed) { - if (seat->keyboard.xkb.wl_pressed_modifiers & seat->keyboard.xkb.idx_shift) { + if (seat->keyboard.xkb.wl_pressed_modifiers & seat->keyboard.xkb.shift_mask) { if (!(seat->keyboard.pressed_modifiers & SDL_KMOD_SHIFT)) { seat->keyboard.pressed_modifiers |= SDL_KMOD_SHIFT; } @@ -1614,7 +1615,7 @@ static void Wayland_ReconcileModifiers(SDL_WaylandSeat *seat, bool key_pressed) seat->keyboard.pressed_modifiers &= ~SDL_KMOD_SHIFT; } - if (seat->keyboard.xkb.wl_pressed_modifiers & seat->keyboard.xkb.idx_ctrl) { + if (seat->keyboard.xkb.wl_pressed_modifiers & seat->keyboard.xkb.ctrl_mask) { if (!(seat->keyboard.pressed_modifiers & SDL_KMOD_CTRL)) { seat->keyboard.pressed_modifiers |= SDL_KMOD_CTRL; } @@ -1622,7 +1623,7 @@ static void Wayland_ReconcileModifiers(SDL_WaylandSeat *seat, bool key_pressed) seat->keyboard.pressed_modifiers &= ~SDL_KMOD_CTRL; } - if (seat->keyboard.xkb.wl_pressed_modifiers & seat->keyboard.xkb.idx_alt) { + if (seat->keyboard.xkb.wl_pressed_modifiers & seat->keyboard.xkb.alt_mask) { if (!(seat->keyboard.pressed_modifiers & SDL_KMOD_ALT)) { seat->keyboard.pressed_modifiers |= SDL_KMOD_ALT; } @@ -1630,7 +1631,7 @@ static void Wayland_ReconcileModifiers(SDL_WaylandSeat *seat, bool key_pressed) seat->keyboard.pressed_modifiers &= ~SDL_KMOD_ALT; } - if (seat->keyboard.xkb.wl_pressed_modifiers & seat->keyboard.xkb.idx_gui) { + if (seat->keyboard.xkb.wl_pressed_modifiers & seat->keyboard.xkb.gui_mask) { if (!(seat->keyboard.pressed_modifiers & SDL_KMOD_GUI)) { seat->keyboard.pressed_modifiers |= SDL_KMOD_GUI; } @@ -1638,24 +1639,21 @@ static void Wayland_ReconcileModifiers(SDL_WaylandSeat *seat, bool key_pressed) seat->keyboard.pressed_modifiers &= ~SDL_KMOD_GUI; } - /* Note: This is not backwards: in the default keymap, Mod5 is typically - * level 3 shift, and Mod3 is typically level 5 shift. - */ - if (seat->keyboard.xkb.wl_pressed_modifiers & seat->keyboard.xkb.idx_mod3) { - if (!(seat->keyboard.pressed_modifiers & SDL_KMOD_LEVEL5)) { - seat->keyboard.pressed_modifiers |= SDL_KMOD_LEVEL5; - } - } else { - seat->keyboard.pressed_modifiers &= ~SDL_KMOD_LEVEL5; - } - - if (seat->keyboard.xkb.wl_pressed_modifiers & seat->keyboard.xkb.idx_mod5) { + if (seat->keyboard.xkb.wl_pressed_modifiers & seat->keyboard.xkb.level3_mask) { if (!(seat->keyboard.pressed_modifiers & SDL_KMOD_MODE)) { seat->keyboard.pressed_modifiers |= SDL_KMOD_MODE; } } else { seat->keyboard.pressed_modifiers &= ~SDL_KMOD_MODE; } + + if (seat->keyboard.xkb.wl_pressed_modifiers & seat->keyboard.xkb.level5_mask) { + if (!(seat->keyboard.pressed_modifiers & SDL_KMOD_LEVEL5)) { + seat->keyboard.pressed_modifiers |= SDL_KMOD_LEVEL5; + } + } else { + seat->keyboard.pressed_modifiers &= ~SDL_KMOD_LEVEL5; + } } /* If a latch or lock was activated by a keypress, the latch/lock will @@ -1665,7 +1663,7 @@ static void Wayland_ReconcileModifiers(SDL_WaylandSeat *seat, bool key_pressed) * The modifier will remain active until the latch/lock is released by * the system. */ - if (seat->keyboard.xkb.wl_locked_modifiers & seat->keyboard.xkb.idx_shift) { + if (seat->keyboard.xkb.wl_locked_modifiers & seat->keyboard.xkb.shift_mask) { if (seat->keyboard.pressed_modifiers & SDL_KMOD_SHIFT) { seat->keyboard.locked_modifiers &= ~SDL_KMOD_SHIFT; seat->keyboard.locked_modifiers |= (seat->keyboard.pressed_modifiers & SDL_KMOD_SHIFT); @@ -1676,7 +1674,7 @@ static void Wayland_ReconcileModifiers(SDL_WaylandSeat *seat, bool key_pressed) seat->keyboard.locked_modifiers &= ~SDL_KMOD_SHIFT; } - if (seat->keyboard.xkb.wl_locked_modifiers & seat->keyboard.xkb.idx_ctrl) { + if (seat->keyboard.xkb.wl_locked_modifiers & seat->keyboard.xkb.ctrl_mask) { if (seat->keyboard.pressed_modifiers & SDL_KMOD_CTRL) { seat->keyboard.locked_modifiers &= ~SDL_KMOD_CTRL; seat->keyboard.locked_modifiers |= (seat->keyboard.pressed_modifiers & SDL_KMOD_CTRL); @@ -1687,7 +1685,7 @@ static void Wayland_ReconcileModifiers(SDL_WaylandSeat *seat, bool key_pressed) seat->keyboard.locked_modifiers &= ~SDL_KMOD_CTRL; } - if (seat->keyboard.xkb.wl_locked_modifiers & seat->keyboard.xkb.idx_alt) { + if (seat->keyboard.xkb.wl_locked_modifiers & seat->keyboard.xkb.alt_mask) { if (seat->keyboard.pressed_modifiers & SDL_KMOD_ALT) { seat->keyboard.locked_modifiers &= ~SDL_KMOD_ALT; seat->keyboard.locked_modifiers |= (seat->keyboard.pressed_modifiers & SDL_KMOD_ALT); @@ -1698,7 +1696,7 @@ static void Wayland_ReconcileModifiers(SDL_WaylandSeat *seat, bool key_pressed) seat->keyboard.locked_modifiers &= ~SDL_KMOD_ALT; } - if (seat->keyboard.xkb.wl_locked_modifiers & seat->keyboard.xkb.idx_gui) { + if (seat->keyboard.xkb.wl_locked_modifiers & seat->keyboard.xkb.gui_mask) { if (seat->keyboard.pressed_modifiers & SDL_KMOD_GUI) { seat->keyboard.locked_modifiers &= ~SDL_KMOD_GUI; seat->keyboard.locked_modifiers |= (seat->keyboard.pressed_modifiers & SDL_KMOD_GUI); @@ -1709,27 +1707,26 @@ static void Wayland_ReconcileModifiers(SDL_WaylandSeat *seat, bool key_pressed) seat->keyboard.locked_modifiers &= ~SDL_KMOD_GUI; } - // As above, this is correct: Mod3 is typically level 5 shift, and Mod5 is typically level 3 shift. - if (seat->keyboard.xkb.wl_locked_modifiers & seat->keyboard.xkb.idx_mod3) { - seat->keyboard.locked_modifiers |= SDL_KMOD_LEVEL5; - } else { - seat->keyboard.locked_modifiers &= ~SDL_KMOD_LEVEL5; - } - - if (seat->keyboard.xkb.wl_locked_modifiers & seat->keyboard.xkb.idx_mod5) { + if (seat->keyboard.xkb.wl_locked_modifiers & seat->keyboard.xkb.level3_mask) { seat->keyboard.locked_modifiers |= SDL_KMOD_MODE; } else { seat->keyboard.locked_modifiers &= ~SDL_KMOD_MODE; } + if (seat->keyboard.xkb.wl_locked_modifiers & seat->keyboard.xkb.level5_mask) { + seat->keyboard.locked_modifiers |= SDL_KMOD_LEVEL5; + } else { + seat->keyboard.locked_modifiers &= ~SDL_KMOD_LEVEL5; + } + // Capslock and Numlock can only be locked, not pressed. - if (seat->keyboard.xkb.wl_locked_modifiers & seat->keyboard.xkb.idx_caps) { + if (seat->keyboard.xkb.wl_locked_modifiers & seat->keyboard.xkb.caps_mask) { seat->keyboard.locked_modifiers |= SDL_KMOD_CAPS; } else { seat->keyboard.locked_modifiers &= ~SDL_KMOD_CAPS; } - if (seat->keyboard.xkb.wl_locked_modifiers & seat->keyboard.xkb.idx_num) { + if (seat->keyboard.xkb.wl_locked_modifiers & seat->keyboard.xkb.num_mask) { seat->keyboard.locked_modifiers |= SDL_KMOD_NUM; } else { seat->keyboard.locked_modifiers &= ~SDL_KMOD_NUM; @@ -2055,12 +2052,12 @@ static void keyboard_handle_modifiers(void *data, struct wl_keyboard *keyboard, } } - if (group == seat->keyboard.xkb.current_group) { + if (group == seat->keyboard.xkb.current_layout) { return; } // The layout changed, remap and fire an event. Virtual keyboards use the default keymap. - seat->keyboard.xkb.current_group = group; + seat->keyboard.xkb.current_layout = group; Wayland_UpdateKeymap(seat); } @@ -3368,7 +3365,7 @@ void Wayland_DisplayCreateSeat(SDL_VideoData *display, struct wl_seat *wl_seat, seat->wl_seat = wl_seat; seat->display = display; seat->registry_id = id; - seat->keyboard.xkb.current_group = XKB_GROUP_INVALID; + seat->keyboard.xkb.current_layout = XKB_LAYOUT_INVALID; Wayland_SeatCreateDataDevice(seat); Wayland_SeatCreatePrimarySelectionDevice(seat); diff --git a/src/video/wayland/SDL_waylandevents_c.h b/src/video/wayland/SDL_waylandevents_c.h index 19f3cee025..79a334e318 100644 --- a/src/video/wayland/SDL_waylandevents_c.h +++ b/src/video/wayland/SDL_waylandevents_c.h @@ -94,22 +94,22 @@ typedef struct SDL_WaylandSeat struct xkb_compose_table *compose_table; struct xkb_compose_state *compose_state; - // Keyboard layout "group" - Uint32 current_group; + // Current keyboard layout (aka 'group') + xkb_layout_index_t current_layout; // Modifier bitshift values - Uint32 idx_shift; - Uint32 idx_ctrl; - Uint32 idx_alt; - Uint32 idx_gui; - Uint32 idx_mod3; - Uint32 idx_mod5; - Uint32 idx_num; - Uint32 idx_caps; + xkb_mod_mask_t shift_mask; + xkb_mod_mask_t ctrl_mask; + xkb_mod_mask_t alt_mask; + xkb_mod_mask_t gui_mask; + xkb_mod_mask_t level3_mask; + xkb_mod_mask_t level5_mask; + xkb_mod_mask_t num_mask; + xkb_mod_mask_t caps_mask; // Current system modifier flags - Uint32 wl_pressed_modifiers; - Uint32 wl_locked_modifiers; + xkb_mod_mask_t wl_pressed_modifiers; + xkb_mod_mask_t wl_locked_modifiers; } xkb; } keyboard;