bugfix: Alt-Tab did not release keys properly

This commit is contained in:
Dimitris Panokostas 2024-10-10 11:41:15 +02:00
parent 7ecdc36722
commit 9af899fc94
No known key found for this signature in database
GPG Key ID: 330156A68E9E0929

View File

@ -360,6 +360,10 @@ int keyhack (const int scancode, const int pressed, const int num)
if (currprefs.alt_tab_release)
{
if (pressed && state[SDL_SCANCODE_LALT] && scancode == SDL_SCANCODE_TAB) {
// Ensure we release Alt-Tab before we release capture
inputdevice_translatekeycode(num, SDL_SCANCODE_TAB, 0, false);
inputdevice_translatekeycode(num, SDL_SCANCODE_LALT, 0, false);
disablecapture();
return -1;
}
@ -760,29 +764,19 @@ static void close_kb()
void release_keys(void)
{
// only run this if SDL2 version is 2.24 or higher
#if SDL_VERSION_ATLEAST(2,0,24)
SDL_ResetKeyboard();
#else
{
const Uint8* state = SDL_GetKeyboardState(NULL);
SDL_Event event;
const Uint8* state = SDL_GetKeyboardState(NULL);
SDL_Event event;
for (int i = 0; i < SDL_NUM_SCANCODES; ++i) {
if (state[i]) {
event.type = SDL_KEYUP;
event.key.keysym.scancode = (SDL_Scancode)i;
event.key.keysym.sym = SDL_GetKeyFromScancode((SDL_Scancode)i);
event.key.keysym.mod = 0;
event.key.state = SDL_RELEASED;
SDL_PushEvent(&event);
}
}
}
#endif
for (int j = 0; j < MAX_INPUT_DEVICES; j++) {
for (int i = 0; i < SDL_NUM_SCANCODES; i++) {
my_kbd_handler(j, i, 0, true);
for (int i = 0; i < SDL_NUM_SCANCODES; ++i) {
if (state[i]) {
event.type = SDL_KEYUP;
event.key.keysym.scancode = (SDL_Scancode)i;
event.key.keysym.sym = SDL_GetKeyFromScancode((SDL_Scancode)i);
event.key.keysym.mod = 0;
event.key.state = SDL_RELEASED;
SDL_PushEvent(&event);
my_kbd_handler(0, i, 0, true);
}
}
}