diff --git a/src/events/SDL_keyboard.c b/src/events/SDL_keyboard.c index a847fbd26..419ab116d 100644 --- a/src/events/SDL_keyboard.c +++ b/src/events/SDL_keyboard.c @@ -506,6 +506,9 @@ printf("The '%s' key has been %s\n", SDL_GetKeyName(keysym->sym), /* Drop events that don't change state */ if ( SDL_KeyState[keysym->sym] == state ) { +#if 0 +printf("Event didn't change state - dropped!\n"); +#endif return(0); } diff --git a/src/video/wincommon/SDL_sysevents.c b/src/video/wincommon/SDL_sysevents.c index a4a3f8cd0..87a6e3318 100644 --- a/src/video/wincommon/SDL_sysevents.c +++ b/src/video/wincommon/SDL_sysevents.c @@ -214,21 +214,27 @@ static void WIN_GetKeyboardState(void) if ( GetKeyboardState(keyboard) ) { if ( keyboard[VK_LSHIFT] & 0x80) { state |= KMOD_LSHIFT; + kstate[SDLK_LSHIFT] = SDL_PRESSED; } if ( keyboard[VK_RSHIFT] & 0x80) { state |= KMOD_RSHIFT; + kstate[SDLK_RSHIFT] = SDL_PRESSED; } if ( keyboard[VK_LCONTROL] & 0x80) { state |= KMOD_LCTRL; + kstate[SDLK_LCTRL] = SDL_PRESSED; } if ( keyboard[VK_RCONTROL] & 0x80) { state |= KMOD_RCTRL; + kstate[SDLK_RCTRL] = SDL_PRESSED; } if ( keyboard[VK_LMENU] & 0x80) { state |= KMOD_LALT; + kstate[SDLK_LALT] = SDL_PRESSED; } if ( keyboard[VK_RMENU] & 0x80) { state |= KMOD_RALT; + kstate[SDLK_RALT] = SDL_PRESSED; } if ( keyboard[VK_NUMLOCK] & 0x01) { state |= KMOD_NUM; diff --git a/src/video/windib/SDL_dibevents.c b/src/video/windib/SDL_dibevents.c index 0db2564ae..c9b4c9bf7 100644 --- a/src/video/windib/SDL_dibevents.c +++ b/src/video/windib/SDL_dibevents.c @@ -49,7 +49,6 @@ static char rcsid = /* The translation table from a Microsoft VK keysym to a SDL keysym */ static SDLKey VK_keymap[SDLK_LAST]; static SDL_keysym *TranslateKey(UINT vkey, UINT scancode, SDL_keysym *keysym, int pressed); -static BOOL prev_shiftstates[2]; /* Masks for processing the windows KEYDOWN and KEYUP messages */ #define REPEATED_KEYMASK (1<<30) @@ -117,14 +116,16 @@ LONG break; case VK_SHIFT: /* EXTENDED trick doesn't work here */ - if (!prev_shiftstates[0] && (GetKeyState(VK_LSHIFT) & 0x8000)) { + { + Uint8 *state = SDL_GetKeyState(NULL); + if (state[SDLK_LSHIFT] == SDL_RELEASED && (GetKeyState(VK_LSHIFT) & 0x8000)) { wParam = VK_LSHIFT; - prev_shiftstates[0] = TRUE; - } else if (!prev_shiftstates[1] && (GetKeyState(VK_RSHIFT) & 0x8000)) { + } else if (state[SDLK_RSHIFT] == SDL_RELEASED && (GetKeyState(VK_RSHIFT) & 0x8000)) { wParam = VK_RSHIFT; - prev_shiftstates[1] = TRUE; } else { - /* Huh? */ + /* Probably a key repeat */ + return(0); + } } break; case VK_MENU: @@ -178,14 +179,16 @@ LONG break; case VK_SHIFT: /* EXTENDED trick doesn't work here */ - if (prev_shiftstates[0] && !(GetKeyState(VK_LSHIFT) & 0x8000)) { + { + Uint8 *state = SDL_GetKeyState(NULL); + if (state[SDLK_LSHIFT] == SDL_PRESSED && !(GetKeyState(VK_LSHIFT) & 0x8000)) { wParam = VK_LSHIFT; - prev_shiftstates[0] = FALSE; - } else if (prev_shiftstates[1] && !(GetKeyState(VK_RSHIFT) & 0x8000)) { + } else if (state[SDLK_RSHIFT] == SDL_PRESSED && !(GetKeyState(VK_RSHIFT) & 0x8000)) { wParam = VK_RSHIFT; - prev_shiftstates[1] = FALSE; } else { - /* Huh? */ + /* Probably a key repeat */ + return(0); + } } break; case VK_MENU: @@ -372,9 +375,6 @@ void DIB_InitOSKeymap(_THIS) VK_keymap[VK_SNAPSHOT] = SDLK_PRINT; VK_keymap[VK_CANCEL] = SDLK_BREAK; VK_keymap[VK_APPS] = SDLK_MENU; - - prev_shiftstates[0] = FALSE; - prev_shiftstates[1] = FALSE; } static SDL_keysym *TranslateKey(UINT vkey, UINT scancode, SDL_keysym *keysym, int pressed)