Sfoglia il codice sorgente

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.

(cherry picked from commit ee8f2861e71f549a33af8ce9958b74515eee6b81)
Frank Praznik 1 mese fa
parent
commit
07b9e86d02
1 ha cambiato i file con 8 aggiunte e 2 eliminazioni
  1. 8 2
      src/video/SDL_video.c

+ 8 - 2
src/video/SDL_video.c

@@ -1917,11 +1917,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];
@@ -1935,8 +1939,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;
+                }
             }
         }
     }