mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-03-09 18:45:35 +00:00
wayland: Don't add keys with the super/GUI modifier to the keymap
SDL normalizes the super/GUI modifier away, so adding a key with this modifier will overwrite the base, unmodified value.
(cherry picked from commit 8c8efd4ccd)
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user