diff --git a/src/gui/sdlmain.cpp b/src/gui/sdlmain.cpp index 5c063057..43df32fb 100644 --- a/src/gui/sdlmain.cpp +++ b/src/gui/sdlmain.cpp @@ -212,6 +212,8 @@ struct SDL_Block { Bitu num_joysticks; #if defined (WIN32) bool using_windib; + // Time when sdl regains focus (alt-tab) in windowed mode + Bit32u focus_ticks; #endif // state of alt-keys for certain special handlings Bit8u laltstate; @@ -1505,6 +1507,9 @@ void GFX_Events() { case SDL_ACTIVEEVENT: if (event.active.state & SDL_APPINPUTFOCUS) { if (event.active.gain) { +#ifdef WIN32 + if (!sdl.desktop.fullscreen) sdl.focus_ticks = GetTicks(); +#endif if (sdl.desktop.fullscreen && !sdl.mouse.locked) GFX_CaptureMouse(); SetPriority(sdl.priority.focus); @@ -1596,6 +1601,10 @@ void GFX_Events() { if (event.key.keysym.sym==SDLK_RALT) sdl.raltstate = event.key.type; if (((event.key.keysym.sym==SDLK_TAB)) && ((sdl.laltstate==SDL_KEYDOWN) || (sdl.raltstate==SDL_KEYDOWN))) break; + // This can happen as well. + if (((event.key.keysym.sym == SDLK_TAB )) && (event.key.keysym.mod & KMOD_ALT)) break; + // ignore tab events that arrive just after regaining focus. (likely the result of alt-tab) + if ((event.key.keysym.sym == SDLK_TAB) && (GetTicks() - sdl.focus_ticks < 2)) break; #endif #if defined (MACOSX) case SDL_KEYDOWN: