diff --git a/src/video/wayland/SDL_waylandevents.c b/src/video/wayland/SDL_waylandevents.c index a2d1ef43a2..eb3083187d 100644 --- a/src/video/wayland/SDL_waylandevents.c +++ b/src/video/wayland/SDL_waylandevents.c @@ -1556,13 +1556,14 @@ static void Wayland_KeymapIterator(struct xkb_keymap *keymap, xkb_keycode_t key, { SDL_WaylandSeat *seat = (SDL_WaylandSeat *)data; const xkb_keysym_t *syms; + SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN; + + // Only the shift, alt, level 3, level 5 and caps lock modifiers affect SDL keymaps. const xkb_mod_mask_t xkb_valid_mod_mask = seat->keyboard.xkb.shift_mask | seat->keyboard.xkb.alt_mask | - seat->keyboard.xkb.gui_mask | seat->keyboard.xkb.level3_mask | seat->keyboard.xkb.level5_mask | seat->keyboard.xkb.caps_mask; - SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN; // Look up the scancode for hardware keyboards. Virtual keyboards get the scancode from the keysym. if (!seat->keyboard.is_virtual) { @@ -1601,7 +1602,6 @@ static void Wayland_KeymapIterator(struct xkb_keymap *keymap, xkb_keycode_t key, const SDL_Keymod sdl_mod = (xkb_mod_masks[mask] & seat->keyboard.xkb.shift_mask ? SDL_KMOD_SHIFT : 0) | (xkb_mod_masks[mask] & seat->keyboard.xkb.alt_mask ? SDL_KMOD_ALT : 0) | - (xkb_mod_masks[mask] & seat->keyboard.xkb.gui_mask ? SDL_KMOD_GUI : 0) | (xkb_mod_masks[mask] & seat->keyboard.xkb.level3_mask ? SDL_KMOD_MODE : 0) | (xkb_mod_masks[mask] & seat->keyboard.xkb.level5_mask ? SDL_KMOD_LEVEL5 : 0) | (xkb_mod_masks[mask] & seat->keyboard.xkb.caps_mask ? SDL_KMOD_CAPS : 0); diff --git a/src/video/x11/SDL_x11keyboard.c b/src/video/x11/SDL_x11keyboard.c index 4511154d20..e94053f3e8 100644 --- a/src/video/x11/SDL_x11keyboard.c +++ b/src/video/x11/SDL_x11keyboard.c @@ -408,6 +408,7 @@ void X11_UpdateKeymap(SDL_VideoDevice *_this, bool send_event) } } + // Only the shift, alt, level 3, level 5 and caps lock modifiers affect SDL keymaps. const Uint32 valid_mod_mask = ShiftMask | LockMask | data->keyboard.alt_mask | data->keyboard.level3_mask | data->keyboard.level5_mask; for (Uint32 xkeycode = data->keyboard.xkb.desc_ptr->min_key_code; xkeycode < data->keyboard.xkb.desc_ptr->max_key_code; ++xkeycode) {