From f867cebbd4c63221759edf9c613935a574ec7f27 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 11 Feb 2020 08:36:13 -0800 Subject: [PATCH] Fixed bug 4709 - incorrect (not) handling of windows on-screen cursor keys Alex Denisov When using Win10 on-screen keyboard (tooltip.exe), the left and right cursor keys in it do not produce SDLK_LEFT and SDLK_RIGHT events. Windows messages generated by the on-screen keyboard, for some reason, have their scancodes set to zeroes. Here is the log from Spy++: WM_KEYDOWN nVirtKey:VK_LEFT cRepeat:1 ScanCode:00 fExtended:0 fAltDown:0 fRepeat:0 fUp:0 WM_KEYUP nVirtKey:VK_LEFT cRepeat:1 ScanCode:00 fExtended:0 fAltDown:0 fRepeat:1 fUp:1 Regular physical keyboard produces VK_LEFT (ScanCode:4B) and VK_RIGHT (ScanCode:4D) which are interpreted correctly. With on-screen keyboard, the switch statement in VKeytoScancode() does not check for VK_LEFT and VK_RIGHT, returning SDL_SCANCODE_UNKNOWN, which in turn does not get mapped to anything (because the scan codes are zeroes). --- src/video/windows/SDL_windowsevents.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c index 11cf78c3c..7a668a86f 100644 --- a/src/video/windows/SDL_windowsevents.c +++ b/src/video/windows/SDL_windowsevents.c @@ -86,6 +86,11 @@ VKeytoScancode(WPARAM vkey) /* Windows generates this virtual keycode for Keypad 5 when NumLock is off. case VK_CLEAR: return SDL_SCANCODE_CLEAR; */ + case VK_LEFT: return SDL_SCANCODE_LEFT; + case VK_UP: return SDL_SCANCODE_UP; + case VK_RIGHT: return SDL_SCANCODE_RIGHT; + case VK_DOWN: return SDL_SCANCODE_DOWN; + case VK_MODECHANGE: return SDL_SCANCODE_MODE; case VK_SELECT: return SDL_SCANCODE_SELECT; case VK_EXECUTE: return SDL_SCANCODE_EXECUTE;