Fixed bugs 1034 and 1035 SDL-1.2
authorSam Lantinga
Thu, 29 Dec 2011 04:29:53 -0500
branchSDL-1.2
changeset 6110676a54593bc4
parent 6109 469e95e71627
child 6111 2280c0954104
Fixed bugs 1034 and 1035

zicodxx@gmx.de 2010-07-28 12:59:27 PDT
Again another bug I encountered on Windows 7:

Assuming I hide my mouse cusor with SDL_ShowCursor(SDL_DISABLE).
Now if my app runs on Fullscreen, I tend to "get out" of it using ALT+TAB. This
will minimize the app. However SDL_GetAppState will STILL report SDL_APPACTIVE,
SDL_APPINPUTFOCUS and SDL_APPMOUSEFOCUS.

Also if I check event.active.gain, this *seems* (as much as I could find out)
to be set twice (first 0 then 1 again) while going out of the app with ALT+TAB.
I am not perfectly sure here but even if the app is minimized because of
ALT+TAB (or also CTRL+ESC), event.active.gain is 1.

Alex Volkov 2011-04-28 17:19:26 PDT
This happens with the windib driver. Windows posts the WM_ACTIVATE WA_INACTIVE
event with minimized==false when you Alt+Tab out of a fullscreen app.
Responding to this event, wincommon/SDL_sysevents.c:WinMessage() calls
ShowWindow(,SW_MINIMIZE) via SDL_RestoreDesktopMode, but another WM_ACTIVATE
event is not posted in response to that.
Whatever the case may be, WinMessage() should just treat a fullscreen app
receiving WA_INACTIVE the same as a minimized app. Additionally, it's probably
a good idea to clear SDL_APPMOUSEFOCUS at the same time, and that should take
care of bug #1035.
src/video/wincommon/SDL_sysevents.c
     1.1 --- a/src/video/wincommon/SDL_sysevents.c	Thu Dec 29 04:24:15 2011 -0500
     1.2 +++ b/src/video/wincommon/SDL_sysevents.c	Thu Dec 29 04:29:53 2011 -0500
     1.3 @@ -309,6 +309,8 @@
     1.4  					if ( WINDIB_FULLSCREEN() ) {
     1.5  						appstate |= SDL_APPMOUSEFOCUS;
     1.6  						SDL_RestoreDesktopMode();
     1.7 +						/* A fullscreen app gets hidden but will not get a minimize event */
     1.8 +						appstate |= (SDL_APPACTIVE | SDL_APPMOUSEFOCUS);
     1.9  #if defined(_WIN32_WCE)
    1.10  						LoadAygshell();
    1.11  						if( SHFullScreen )