From 75529476541b141f9884a5a119cfc76f5acf0e9d Mon Sep 17 00:00:00 2001 From: Alfred Reynolds Date: Wed, 30 Jul 2014 17:45:52 -0700 Subject: [PATCH] SDL - fix re-entrancy into SDL_UpdateFullscreenMode under OSX. During HideWindow we get a RESTORED event which then turns fullscreen back on causing a hang in Cocoa_SetWindowFullscreenSpace waiting for the fullscreen transition to finish. --- src/video/SDL_sysvideo.h | 1 + src/video/SDL_video.c | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/src/video/SDL_sysvideo.h b/src/video/SDL_sysvideo.h index 992b4f364004c..f552cb5b9960a 100644 --- a/src/video/SDL_sysvideo.h +++ b/src/video/SDL_sysvideo.h @@ -93,6 +93,7 @@ struct SDL_Window SDL_Surface *surface; SDL_bool surface_valid; + SDL_bool is_hiding; SDL_bool is_destroying; SDL_WindowShaper *shaper; diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index e50edc1bd8d08..0c92a872da3fc 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -1105,6 +1105,10 @@ SDL_UpdateFullscreenMode(SDL_Window * window, SDL_bool fullscreen) CHECK_WINDOW_MAGIC(window,); + /* if we are in the process of hiding don't go back to fullscreen */ + if ( window->is_hiding && fullscreen ) + return; + #ifdef __MACOSX__ if (Cocoa_SetWindowFullscreenSpace(window, fullscreen)) { window->last_fullscreen_flags = window->flags; @@ -1833,11 +1837,13 @@ SDL_HideWindow(SDL_Window * window) return; } + window->is_hiding = SDL_TRUE; SDL_UpdateFullscreenMode(window, SDL_FALSE); if (_this->HideWindow) { _this->HideWindow(_this, window); } + window->is_hiding = SDL_FALSE; SDL_SendWindowEvent(window, SDL_WINDOWEVENT_HIDDEN, 0, 0); }