mirror of https://github.com/encounter/SDL.git
windows: Fix GUI key state when grabbing the keyboard
When our keyboard grab hook is installed, GetKeyState() will return 0 for the GUI keys even when they are pressed. This leads to spurious key up events when holding down the GUI keys and the inability to use any key combos involving those modifier keys.
This commit is contained in:
parent
b6bc3a6b0e
commit
715d481271
|
@ -1476,6 +1476,7 @@ WIN_PumpEvents(_THIS)
|
||||||
MSG msg;
|
MSG msg;
|
||||||
DWORD end_ticks = GetTickCount() + 1;
|
DWORD end_ticks = GetTickCount() + 1;
|
||||||
int new_messages = 0;
|
int new_messages = 0;
|
||||||
|
SDL_Window *focusWindow;
|
||||||
|
|
||||||
if (g_WindowsEnableMessageLoop) {
|
if (g_WindowsEnableMessageLoop) {
|
||||||
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
|
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
|
||||||
|
@ -1523,12 +1524,18 @@ WIN_PumpEvents(_THIS)
|
||||||
if ((keystate[SDL_SCANCODE_RSHIFT] == SDL_PRESSED) && !(GetKeyState(VK_RSHIFT) & 0x8000)) {
|
if ((keystate[SDL_SCANCODE_RSHIFT] == SDL_PRESSED) && !(GetKeyState(VK_RSHIFT) & 0x8000)) {
|
||||||
SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_RSHIFT);
|
SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_RSHIFT);
|
||||||
}
|
}
|
||||||
/* The Windows key state gets lost when using Windows+Space or Windows+G shortcuts */
|
|
||||||
if ((keystate[SDL_SCANCODE_LGUI] == SDL_PRESSED) && !(GetKeyState(VK_LWIN) & 0x8000)) {
|
/* The Windows key state gets lost when using Windows+Space or Windows+G shortcuts and
|
||||||
SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_LGUI);
|
not grabbing the keyboard. Note: If we *are* grabbing the keyboard, GetKeyState()
|
||||||
}
|
will return inaccurate results for VK_LWIN and VK_RWIN but we don't need it anyway. */
|
||||||
if ((keystate[SDL_SCANCODE_RGUI] == SDL_PRESSED) && !(GetKeyState(VK_RWIN) & 0x8000)) {
|
focusWindow = SDL_GetKeyboardFocus();
|
||||||
SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_RGUI);
|
if (!focusWindow || !(focusWindow->flags & SDL_WINDOW_KEYBOARD_GRABBED)) {
|
||||||
|
if ((keystate[SDL_SCANCODE_LGUI] == SDL_PRESSED) && !(GetKeyState(VK_LWIN) & 0x8000)) {
|
||||||
|
SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_LGUI);
|
||||||
|
}
|
||||||
|
if ((keystate[SDL_SCANCODE_RGUI] == SDL_PRESSED) && !(GetKeyState(VK_RWIN) & 0x8000)) {
|
||||||
|
SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_RGUI);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update the clipping rect in case someone else has stolen it */
|
/* Update the clipping rect in case someone else has stolen it */
|
||||||
|
|
Loading…
Reference in New Issue