From 18b7a2315c389107a433153f0a24d19d734996e8 Mon Sep 17 00:00:00 2001 From: Frank Praznik Date: Tue, 19 Nov 2024 11:15:31 -0500 Subject: [PATCH] cocoa: Restore fullscreen state on the window regaining key status Ensure that fullscreen state is restored if a non-minimized fullscreen window regains key status. This can happen if a fullscreen window was requested to minimize on loss of key status, but the minimization didn't actually occur. --- src/video/cocoa/SDL_cocoawindow.m | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index cf6290cd50..560f2ddd39 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -1203,6 +1203,14 @@ static NSCursor *Cocoa_GetDesiredCursor(void) _data.videodata.modifierFlags = (_data.videodata.modifierFlags & ~NSEventModifierFlagCapsLock) | newflags; SDL_ToggleModState(SDL_KMOD_CAPS, newflags ? true : false); } + + /* Restore fullscreen mode unless the window is deminiaturizing. + * If it is, fullscreen will be restored when deminiaturization is complete. + */ + if (!(window->flags & SDL_WINDOW_MINIMIZED) && + [self windowOperationIsPending:PENDING_OPERATION_ENTER_FULLSCREEN]) { + SDL_UpdateFullscreenMode(window, true, true); + } } - (void)windowDidResignKey:(NSNotification *)aNotification @@ -2733,6 +2741,8 @@ SDL_FullscreenResult Cocoa_SetWindowFullscreen(SDL_VideoDevice *_this, SDL_Windo NSWindow *nswindow = data.nswindow; NSRect rect; + [data.listener clearPendingWindowOperation:PENDING_OPERATION_ENTER_FULLSCREEN]; + // The view responder chain gets messed with during setStyleMask if ([data.sdlContentView nextResponder] == data.listener) { [data.sdlContentView setNextResponder:nil]; @@ -2841,6 +2851,7 @@ SDL_FullscreenResult Cocoa_SetWindowFullscreen(SDL_VideoDevice *_this, SDL_Windo if (!fullscreen && [data.listener windowOperationIsPending:PENDING_OPERATION_MINIMIZE]) { Cocoa_WaitForMiniaturizable(window); [data.listener addPendingWindowOperation:PENDING_OPERATION_ENTER_FULLSCREEN]; + [data.listener clearPendingWindowOperation:PENDING_OPERATION_MINIMIZE]; [nswindow miniaturize:nil]; }