From 7f3d51b69007c03b8d7850ad263cf080a84c714d Mon Sep 17 00:00:00 2001
From: "Ryan C. Gordon" <[EMAIL REDACTED]>
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 71817dffc663b..cb891d2d6061b 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];
}
}
}