From ee8f2861e71f549a33af8ce9958b74515eee6b81 Mon Sep 17 00:00:00 2001 From: Frank Praznik Date: Mon, 4 Aug 2025 22:07:24 -0400 Subject: [PATCH] cocoa: Don't re-enter a fullscreen space if leaving to enter an exclusive mode Doing so can leave the window in a weird, offset state. --- src/video/SDL_video.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index 1fd398bed7..19d849e12f 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -1927,11 +1927,15 @@ bool SDL_UpdateFullscreenMode(SDL_Window *window, SDL_FullscreenOp fullscreen, b goto done; } if (commit) { + bool skip_spaces_switch = false; // If we're switching between a fullscreen Space and exclusive fullscreen, we need to get back to normal first. if (fullscreen && Cocoa_IsWindowInFullscreenSpace(window) && !window->last_fullscreen_exclusive_display && window->fullscreen_exclusive) { if (!Cocoa_SetWindowFullscreenSpace(window, false, true)) { goto error; } + + // We just left spaces to go to an exclusive mode, so don't try to re-enter. + skip_spaces_switch = true; } else if (fullscreen && window->last_fullscreen_exclusive_display && !window->fullscreen_exclusive) { for (i = 0; i < _this->num_displays; ++i) { SDL_VideoDisplay *last_display = _this->displays[i]; @@ -1945,8 +1949,10 @@ bool SDL_UpdateFullscreenMode(SDL_Window *window, SDL_FullscreenOp fullscreen, b } } - if (Cocoa_SetWindowFullscreenSpace(window, !!fullscreen, syncHint)) { - goto done; + if (!skip_spaces_switch) { + if (Cocoa_SetWindowFullscreenSpace(window, !!fullscreen, syncHint)) { + goto done; + } } } }