From 12e7fdcbb66739bcc317a44090e8eed3c61ed2d4 Mon Sep 17 00:00:00 2001 From: "J?rgen P. Tjern?" Date: Wed, 15 Jan 2014 11:34:03 -0800 Subject: [PATCH] Don't minimize fullscreen windows when destroying them. Previously, we'd minimize fullscreen windows (if SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS was set) during SDL_DestroyWindow if they had keyboard focus, because we call SDL_SetKeyboardFocus(NULL) which yields a OnWindowsFocusLost event. Related to https://bugzilla.libsdl.org/show_bug.cgi?id=1840 --- src/video/SDL_sysvideo.h | 2 ++ src/video/SDL_video.c | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/video/SDL_sysvideo.h b/src/video/SDL_sysvideo.h index c70beefa7..aabdffe94 100644 --- a/src/video/SDL_sysvideo.h +++ b/src/video/SDL_sysvideo.h @@ -93,6 +93,8 @@ struct SDL_Window SDL_Surface *surface; SDL_bool surface_valid; + SDL_bool is_destroying; + SDL_WindowShaper *shaper; SDL_WindowUserData *data; diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index a4a8c6ef3..26e234459 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -1288,6 +1288,7 @@ SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags) window->last_fullscreen_flags = window->flags; window->brightness = 1.0f; window->next = _this->windows; + window->is_destroying = SDL_FALSE; if (_this->windows) { _this->windows->prev = window; @@ -1328,6 +1329,7 @@ SDL_CreateWindowFrom(const void *data) window->id = _this->next_object_id++; window->flags = SDL_WINDOW_FOREIGN; window->last_fullscreen_flags = window->flags; + window->is_destroying = SDL_FALSE; window->brightness = 1.0f; window->next = _this->windows; if (_this->windows) { @@ -1389,6 +1391,7 @@ SDL_RecreateWindow(SDL_Window * window, Uint32 flags) window->icon = NULL; window->flags = ((flags & CREATE_FLAGS) | SDL_WINDOW_HIDDEN); window->last_fullscreen_flags = window->flags; + window->is_destroying = SDL_FALSE; if (_this->CreateWindow && !(flags & SDL_WINDOW_FOREIGN)) { if (_this->CreateWindow(_this, window) < 0) { @@ -2169,7 +2172,7 @@ ShouldMinimizeOnFocusLoss(SDL_Window * window) { const char *hint; - if (!(window->flags & SDL_WINDOW_FULLSCREEN)) { + if (!(window->flags & SDL_WINDOW_FULLSCREEN) || window->is_destroying) { return SDL_FALSE; } @@ -2228,6 +2231,8 @@ SDL_DestroyWindow(SDL_Window * window) CHECK_WINDOW_MAGIC(window, ); + window->is_destroying = SDL_TRUE; + /* Restore video mode, etc. */ SDL_HideWindow(window);