From 30f0aeb26a287b1b3efe9a6e25c57c2d58ba1a06 Mon Sep 17 00:00:00 2001
From: Dan Andrus <[EMAIL REDACTED]>
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];
+ }
}
}