From 854cf7ac401638c29af2f93932c3e037bb6a5db5 Mon Sep 17 00:00:00 2001 From: David Ludwig Date: Wed, 30 Dec 2015 12:44:13 -0500 Subject: [PATCH] Fixed Bug 3215 - Win32: 'fullscreen' app doesn't always extend to top of screen --- src/video/windows/SDL_windowsevents.c | 4 ++++ src/video/windows/SDL_windowswindow.c | 18 ++++++++++++++++++ src/video/windows/SDL_windowswindow.h | 2 ++ 3 files changed, 24 insertions(+) diff --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c index cf2e563f8b06e..9ca94bb569df0 100644 --- a/src/video/windows/SDL_windowsevents.c +++ b/src/video/windows/SDL_windowsevents.c @@ -419,11 +419,15 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) SDL_ToggleModState(KMOD_CAPS, (GetKeyState(VK_CAPITAL) & 0x0001) != 0); SDL_ToggleModState(KMOD_NUM, (GetKeyState(VK_NUMLOCK) & 0x0001) != 0); } else { + data->in_window_deactivation = SDL_TRUE; + if (SDL_GetKeyboardFocus() == data->window) { SDL_SetKeyboardFocus(NULL); } ClipCursor(NULL); + + data->in_window_deactivation = SDL_FALSE; } } returnCode = 0; diff --git a/src/video/windows/SDL_windowswindow.c b/src/video/windows/SDL_windowswindow.c index 70e80a95a6ce2..459982103c049 100644 --- a/src/video/windows/SDL_windowswindow.c +++ b/src/video/windows/SDL_windowswindow.c @@ -559,7 +559,25 @@ WIN_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, y = bounds.y; w = bounds.w; h = bounds.h; + + /* Unset the maximized flag. This fixes + https://bugzilla.libsdl.org/show_bug.cgi?id=3215 + */ + if (style & WS_MAXIMIZE) { + data->windowed_mode_was_maximized = SDL_TRUE; + style &= ~WS_MAXIMIZE; + } } else { + /* Restore window-maximization state, as applicable. + Special care is taken to *not* do this if and when we're + alt-tab'ing away (to some other window; as indicated by + in_window_deactivation), otherwise + https://bugzilla.libsdl.org/show_bug.cgi?id=3215 can reproduce! + */ + if (data->windowed_mode_was_maximized && !data->in_window_deactivation) { + style |= WS_MAXIMIZE; + data->windowed_mode_was_maximized = SDL_FALSE; + } rect.left = 0; rect.top = 0; rect.right = window->windowed.w; diff --git a/src/video/windows/SDL_windowswindow.h b/src/video/windows/SDL_windowswindow.h index 6b8b0c2d3de66..1e8b5557ce81e 100644 --- a/src/video/windows/SDL_windowswindow.h +++ b/src/video/windows/SDL_windowswindow.h @@ -42,6 +42,8 @@ typedef struct SDL_bool in_border_change; SDL_bool in_title_click; SDL_bool focus_click_pending; + SDL_bool windowed_mode_was_maximized; + SDL_bool in_window_deactivation; struct SDL_VideoData *videodata; #if SDL_VIDEO_OPENGL_EGL EGLSurface egl_surface;