Skip to content

Commit 8c8efd4

Browse files
committed
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.
1 parent 2e3300e commit 8c8efd4

2 files changed

Lines changed: 4 additions & 3 deletions

File tree

src/video/wayland/SDL_waylandevents.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1602,13 +1602,14 @@ static void Wayland_KeymapIterator(struct xkb_keymap *keymap, xkb_keycode_t key,
16021602
{
16031603
SDL_WaylandSeat *seat = (SDL_WaylandSeat *)data;
16041604
const xkb_keysym_t *syms;
1605+
SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN;
1606+
1607+
// Only the shift, alt, level 3, level 5 and caps lock modifiers affect SDL keymaps.
16051608
const xkb_mod_mask_t xkb_valid_mod_mask = seat->keyboard.xkb.shift_mask |
16061609
seat->keyboard.xkb.alt_mask |
1607-
seat->keyboard.xkb.gui_mask |
16081610
seat->keyboard.xkb.level3_mask |
16091611
seat->keyboard.xkb.level5_mask |
16101612
seat->keyboard.xkb.caps_mask;
1611-
SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN;
16121613

16131614
// Look up the scancode for hardware keyboards. Virtual keyboards get the scancode from the keysym.
16141615
if (!seat->keyboard.is_virtual) {
@@ -1647,7 +1648,6 @@ static void Wayland_KeymapIterator(struct xkb_keymap *keymap, xkb_keycode_t key,
16471648

16481649
const SDL_Keymod sdl_mod = (xkb_mod_masks[mask] & seat->keyboard.xkb.shift_mask ? SDL_KMOD_SHIFT : 0) |
16491650
(xkb_mod_masks[mask] & seat->keyboard.xkb.alt_mask ? SDL_KMOD_ALT : 0) |
1650-
(xkb_mod_masks[mask] & seat->keyboard.xkb.gui_mask ? SDL_KMOD_GUI : 0) |
16511651
(xkb_mod_masks[mask] & seat->keyboard.xkb.level3_mask ? SDL_KMOD_MODE : 0) |
16521652
(xkb_mod_masks[mask] & seat->keyboard.xkb.level5_mask ? SDL_KMOD_LEVEL5 : 0) |
16531653
(xkb_mod_masks[mask] & seat->keyboard.xkb.caps_mask ? SDL_KMOD_CAPS : 0);

src/video/x11/SDL_x11keyboard.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,7 @@ void X11_UpdateKeymap(SDL_VideoDevice *_this, bool send_event)
408408
}
409409
}
410410

411+
// Only the shift, alt, level 3, level 5 and caps lock modifiers affect SDL keymaps.
411412
const Uint32 valid_mod_mask = ShiftMask | LockMask | data->keyboard.alt_mask | data->keyboard.level3_mask | data->keyboard.level5_mask;
412413

413414
for (Uint32 xkeycode = data->keyboard.xkb.desc_ptr->min_key_code; xkeycode < data->keyboard.xkb.desc_ptr->max_key_code; ++xkeycode) {

0 commit comments

Comments
 (0)