From eeddb7c5347cd1df3b5dda8313ddad47172639fb Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 9 Nov 2015 08:54:56 -0800 Subject: [PATCH] more SDL fullscreen state tracking fixes, don't update fullscreen flags on failure to change fullscreen state --- src/video/SDL_video.c | 10 +++++++++- src/video/cocoa/SDL_cocoawindow.m | 4 ++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index 2a87914e89434..1e5600d26cebc 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -1980,6 +1980,7 @@ SDL_RestoreWindow(SDL_Window * window) int SDL_SetWindowFullscreen(SDL_Window * window, Uint32 flags) { + Uint32 oldflags; CHECK_WINDOW_MAGIC(window, -1); flags &= FULLSCREEN_MASK; @@ -1989,10 +1990,17 @@ SDL_SetWindowFullscreen(SDL_Window * window, Uint32 flags) } /* clear the previous flags and OR in the new ones */ + oldflags = window->flags & FULLSCREEN_MASK; window->flags &= ~FULLSCREEN_MASK; window->flags |= flags; - return SDL_UpdateFullscreenMode(window, FULLSCREEN_VISIBLE(window)); + if (SDL_UpdateFullscreenMode(window, FULLSCREEN_VISIBLE(window)) == 0) { + return 0; + } + + window->flags &= ~FULLSCREEN_MASK; + window->flags |= oldflags; + return -1; } static SDL_Surface * diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index 2601f4b03f828..f6417db84c215 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -646,6 +646,8 @@ - (void)windowDidFailToEnterFullScreen:(NSNotification *)aNotification isFullscreenSpace = NO; inFullscreenTransition = NO; + + [self windowDidExitFullScreen:nil]; } - (void)windowDidEnterFullScreen:(NSNotification *)aNotification @@ -690,6 +692,8 @@ - (void)windowDidFailToExitFullScreen:(NSNotification *)aNotification isFullscreenSpace = YES; inFullscreenTransition = NO; + + [self windowDidEnterFullScreen:nil]; } - (void)windowDidExitFullScreen:(NSNotification *)aNotification