mirror of
https://github.com/Ryujinx/SDL.git
synced 2024-12-25 04:35:42 +00:00
windows: Fix numpad arrow key scancodes with numlock off
We should only perform the VK_LEFT, VK_UP, etc. mapping if none of the other special mappings apply. This allows the scancode normalization for the number pad to take place as intended.
This commit is contained in:
parent
1e2caac58b
commit
771732ed32
|
@ -83,17 +83,22 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static SDL_Scancode
|
static SDL_Scancode
|
||||||
VKeytoScancode(WPARAM vkey)
|
VKeytoScancodeFallback(WPARAM vkey)
|
||||||
{
|
{
|
||||||
switch (vkey) {
|
switch (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_LEFT: return SDL_SCANCODE_LEFT;
|
||||||
case VK_UP: return SDL_SCANCODE_UP;
|
case VK_UP: return SDL_SCANCODE_UP;
|
||||||
case VK_RIGHT: return SDL_SCANCODE_RIGHT;
|
case VK_RIGHT: return SDL_SCANCODE_RIGHT;
|
||||||
case VK_DOWN: return SDL_SCANCODE_DOWN;
|
case VK_DOWN: return SDL_SCANCODE_DOWN;
|
||||||
|
|
||||||
|
default: return SDL_SCANCODE_UNKNOWN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static SDL_Scancode
|
||||||
|
VKeytoScancode(WPARAM vkey)
|
||||||
|
{
|
||||||
|
switch (vkey) {
|
||||||
case VK_MODECHANGE: return SDL_SCANCODE_MODE;
|
case VK_MODECHANGE: return SDL_SCANCODE_MODE;
|
||||||
case VK_SELECT: return SDL_SCANCODE_SELECT;
|
case VK_SELECT: return SDL_SCANCODE_SELECT;
|
||||||
case VK_EXECUTE: return SDL_SCANCODE_EXECUTE;
|
case VK_EXECUTE: return SDL_SCANCODE_EXECUTE;
|
||||||
|
@ -219,6 +224,16 @@ WindowsScanCodeToSDLScanCode(LPARAM lParam, WPARAM wParam)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* The on-screen keyboard can generate VK_LEFT and VK_RIGHT events without a scancode
|
||||||
|
* value set, however we cannot simply map these in VKeytoScancode() or we will be
|
||||||
|
* incorrectly handling the arrow keys on the number pad when NumLock is disabled
|
||||||
|
* (which also generate VK_LEFT, VK_RIGHT, etc in that scenario). Instead, we'll only
|
||||||
|
* map them if none of the above special number pad mappings applied. */
|
||||||
|
if (code == SDL_SCANCODE_UNKNOWN) {
|
||||||
|
code = VKeytoScancodeFallback(wParam);
|
||||||
|
}
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue