瀏覽代碼

Handle Colemak swapping of CapsLock and Backspace

Fixes https://github.com/libsdl-org/SDL/issues/7853
Sam Lantinga 1 年之前
父節點
當前提交
66cb2153cc
共有 1 個文件被更改,包括 12 次插入0 次删除
  1. 12 0
      src/video/windows/SDL_windowskeyboard.c

+ 12 - 0
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;
             }