(WIN32) Fix Pause vs NumLock in dinput/sdl2 (#15533)

This commit is contained in:
sonninnos 2023-07-30 10:50:08 +03:00 committed by GitHub
parent fbd8498686
commit cf42a200b4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1081,9 +1081,16 @@ static LRESULT CALLBACK wnd_proc_common_internal(HWND hwnd,
uint16_t mod = 0;
unsigned keycode = 0;
unsigned keysym = (lparam >> 16) & 0xff;
bool extended = (lparam >> 24) & 0x1;
/* extended keys will map to dinput if the high bit is set */
if ((lparam >> 24 & 0x1))
if (extended)
keysym |= 0x80;
/* NumLock vs Pause correction */
if (GetKeyState(VK_NUMLOCK) & 0x80 && extended)
keysym &= ~0x80;
else if (GetKeyState(VK_PAUSE) & 0x80 && !extended)
keysym |= 0x80;
keycode = input_keymaps_translate_keysym_to_rk(keysym);
@ -1327,9 +1334,16 @@ static LRESULT CALLBACK wnd_proc_common_dinput_internal(HWND hwnd,
uint16_t mod = 0;
unsigned keycode = 0;
unsigned keysym = (lparam >> 16) & 0xff;
bool extended = (lparam >> 24) & 0x1;
/* extended keys will map to dinput if the high bit is set */
if ((lparam >> 24 & 0x1))
if (extended)
keysym |= 0x80;
/* NumLock vs Pause correction */
if (GetKeyState(VK_NUMLOCK) & 0x80 && extended)
keysym &= ~0x80;
else if (GetKeyState(VK_PAUSE) & 0x80 && !extended)
keysym |= 0x80;
keycode = input_keymaps_translate_keysym_to_rk(keysym);