From 7f3d51b69007c03b8d7850ad263cf080a84c714d Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Thu, 5 Feb 2026 18:39:48 -0500 Subject: [PATCH] cocoa: Fix SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES=0. This hint is documented to not just turn off fullscreen windows going into a new Fullscreen Space, but also to make the green button on a resizeable window's title bar do a maximize/zoom instead of make the window fullscreen. Previously, this only did the former and not the latter (or perhaps it worked and the defaults changed in a newer macOS, we aren't sure). Fixes #7470. (cherry picked from commit 50f3adec7736a5dd9223e217e46d3abc1f95d790) --- src/video/cocoa/SDL_cocoawindow.m | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index 71817dffc6..cb891d2d60 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -2482,12 +2482,12 @@ bool Cocoa_CreateWindow(SDL_VideoDevice *_this, SDL_Window *window, SDL_Properti [nswindow setTabbingMode:NSWindowTabbingModeDisallowed]; - if (videodata.allow_spaces) { - // we put fullscreen desktop windows in their own Space, without a toggle button or menubar, later - if (window->flags & SDL_WINDOW_RESIZABLE) { - // resizable windows are Spaces-friendly: they get the "go fullscreen" toggle button on their titlebar. - [nswindow setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary]; - } + // we put fullscreen desktop windows in their own Space, without a toggle button or menubar, later + if ((window->flags & SDL_WINDOW_RESIZABLE) && videodata.allow_spaces) { + // resizable windows are Spaces-friendly: they get the "go fullscreen" toggle button on their titlebar. + [nswindow setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary]; + } else { + [nswindow setCollectionBehavior:NSWindowCollectionBehaviorFullScreenNone]; } // Create a default view for this window @@ -2947,13 +2947,12 @@ void Cocoa_SetWindowResizable(SDL_VideoDevice *_this, SDL_Window *window, bool r if (![listener isInFullscreenSpace] && ![listener isInFullscreenSpaceTransition]) { SetWindowStyle(window, GetWindowStyle(window)); } - if (videodata.allow_spaces) { - if (resizable) { - // resizable windows are Spaces-friendly: they get the "go fullscreen" toggle button on their titlebar. - [nswindow setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary]; - } else { - [nswindow setCollectionBehavior:NSWindowCollectionBehaviorManaged]; - } + + if (resizable && videodata.allow_spaces) { + // resizable windows are Spaces-friendly: they get the "go fullscreen" toggle button on their titlebar. + [nswindow setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary]; + } else { + [nswindow setCollectionBehavior:NSWindowCollectionBehaviorFullScreenNone]; } } }