Skip to content

Commit

Permalink
Don't minimize fullscreen windows when destroying them.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
jorgenpt committed Jan 15, 2014
1 parent bc92383 commit 12e7fdc
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 1 deletion.
2 changes: 2 additions & 0 deletions src/video/SDL_sysvideo.h
Expand Up @@ -93,6 +93,8 @@ struct SDL_Window
SDL_Surface *surface;
SDL_bool surface_valid;

SDL_bool is_destroying;

SDL_WindowShaper *shaper;

SDL_WindowUserData *data;
Expand Down
7 changes: 6 additions & 1 deletion src/video/SDL_video.c
Expand Up @@ -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;
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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);

Expand Down

0 comments on commit 12e7fdc

Please sign in to comment.