From a03d9faf91e24832059074da393c986e4706a094 Mon Sep 17 00:00:00 2001 From: Peter Veenstra Date: Mon, 17 Aug 2015 14:07:01 +0000 Subject: [PATCH] Add some more cases to the Alt-tab detection. It can still mess up, but this should help with a lot of cases. Thanks for testing eightbitbubsy. Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3929 --- src/gui/sdlmain.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) 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: