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.

This commit is contained in:
Alfred Reynolds 2014-07-30 17:45:52 -07:00
parent 5b780063e1
commit 7552947654
2 changed files with 7 additions and 0 deletions

View File

@ -93,6 +93,7 @@ struct SDL_Window
SDL_Surface *surface; SDL_Surface *surface;
SDL_bool surface_valid; SDL_bool surface_valid;
SDL_bool is_hiding;
SDL_bool is_destroying; SDL_bool is_destroying;
SDL_WindowShaper *shaper; SDL_WindowShaper *shaper;

View File

@ -1105,6 +1105,10 @@ SDL_UpdateFullscreenMode(SDL_Window * window, SDL_bool fullscreen)
CHECK_WINDOW_MAGIC(window,); 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__ #ifdef __MACOSX__
if (Cocoa_SetWindowFullscreenSpace(window, fullscreen)) { if (Cocoa_SetWindowFullscreenSpace(window, fullscreen)) {
window->last_fullscreen_flags = window->flags; window->last_fullscreen_flags = window->flags;
@ -1833,11 +1837,13 @@ SDL_HideWindow(SDL_Window * window)
return; return;
} }
window->is_hiding = SDL_TRUE;
SDL_UpdateFullscreenMode(window, SDL_FALSE); SDL_UpdateFullscreenMode(window, SDL_FALSE);
if (_this->HideWindow) { if (_this->HideWindow) {
_this->HideWindow(_this, window); _this->HideWindow(_this, window);
} }
window->is_hiding = SDL_FALSE;
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_HIDDEN, 0, 0); SDL_SendWindowEvent(window, SDL_WINDOWEVENT_HIDDEN, 0, 0);
} }