From 66cb2153cc8c59d0629d1d2ef7da4ed3e03099a3 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sun, 4 Aug 2024 09:56:57 -0700 Subject: [PATCH] Handle Colemak swapping of CapsLock and Backspace Fixes https://github.com/libsdl-org/SDL/issues/7853 --- src/video/windows/SDL_windowskeyboard.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/video/windows/SDL_windowskeyboard.c b/src/video/windows/SDL_windowskeyboard.c index 304f15491a..3ff2afdb38 100644 --- a/src/video/windows/SDL_windowskeyboard.c +++ b/src/video/windows/SDL_windowskeyboard.c @@ -108,6 +108,18 @@ void WIN_UpdateKeymap(SDL_bool send_event) if (scancode == SDL_SCANCODE_UNKNOWN || scancode == SDL_SCANCODE_DELETE || (SDL_GetDefaultKeyFromScancode(scancode, SDL_KMOD_NONE) & SDLK_SCANCODE_MASK)) { + + /* The Colemak mapping swaps Backspace and CapsLock */ + if (mods[m] == SDL_KMOD_NONE && + (scancode == SDL_SCANCODE_CAPSLOCK || + scancode == SDL_SCANCODE_BACKSPACE)) { + vk = LOBYTE(MapVirtualKey(i, MAPVK_VSC_TO_VK)); + if (vk == VK_CAPITAL) { + SDL_SetKeymapEntry(keymap, scancode, mods[m], SDLK_CAPSLOCK); + } else if (vk == VK_BACK) { + SDL_SetKeymapEntry(keymap, scancode, mods[m], SDLK_BACKSPACE); + } + } continue; }