From 88cb29fc70a91f063723d9b00ed62d9fb9a0ffff Mon Sep 17 00:00:00 2001 From: Dan Andrus Date: Wed, 23 Jul 2025 16:31:59 +0200 Subject: [PATCH] Check NSWindow::isVisible before sending SDL_WINDOWEVENT_RESTORED during Cocoa_WindowListener::windowDidResize --- src/video/cocoa/SDL_cocoawindow.m | 34 ++++++++++++++++++------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index b67bafb0c61c3..ecf5980f47efd 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -1199,21 +1199,27 @@ - (void)windowDidResize:(NSNotification *)aNotification ScheduleContextUpdates(_data); - /* isZoomed always returns true if the window is not resizable - * and fullscreen windows are considered zoomed. + /* The OS can resize the window automatically if the display density + * changes while the window is miniaturized or hidden. */ - if ((window->flags & SDL_WINDOW_RESIZABLE) && [nswindow isZoomed] && - !(window->flags & SDL_WINDOW_FULLSCREEN) && ![self isInFullscreenSpace]) { - zoomed = YES; - } else { - zoomed = NO; - } - if (!zoomed) { - SDL_SendWindowEvent(window, SDL_EVENT_WINDOW_RESTORED, 0, 0); - } else { - SDL_SendWindowEvent(window, SDL_EVENT_WINDOW_MAXIMIZED, 0, 0); - if ([self windowOperationIsPending:PENDING_OPERATION_MINIMIZE]) { - [nswindow miniaturize:nil]; + if ([nswindow isVisible]) + { + /* isZoomed always returns true if the window is not resizable + * and fullscreen windows are considered zoomed. + */ + if ((window->flags & SDL_WINDOW_RESIZABLE) && [nswindow isZoomed] && + !(window->flags & SDL_WINDOW_FULLSCREEN) && ![self isInFullscreenSpace]) { + zoomed = YES; + } else { + zoomed = NO; + } + if (!zoomed) { + SDL_SendWindowEvent(window, SDL_EVENT_WINDOW_RESTORED, 0, 0); + } else { + SDL_SendWindowEvent(window, SDL_EVENT_WINDOW_MAXIMIZED, 0, 0); + if ([self windowOperationIsPending:PENDING_OPERATION_MINIMIZE]) { + [nswindow miniaturize:nil]; + } } }