Przeglądaj źródła

Don't minimize by default when in fullscreen desktop mode.
This fixes behavior with the new Mac OS X fullscreen space code, as well as improve behavior on Linux desktops.
The default for normal fullscreen mode is still to minimize because we're likely doing a mode switch and don't want to stick around as a borderless window in the background.

Sam Lantinga 12 lat temu
rodzic
commit
2ceeb74e25
1 zmienionych plików z 18 dodań i 4 usunięć
  1. 18 4
      src/video/SDL_video.c

+ 18 - 4
src/video/SDL_video.c

@@ -2134,8 +2134,22 @@ SDL_OnWindowFocusGained(SDL_Window * window)
     SDL_UpdateWindowGrab(window);
     SDL_UpdateWindowGrab(window);
 }
 }
 
 
-static SDL_bool ShouldMinimizeOnFocusLoss()
+static SDL_bool
+ShouldMinimizeOnFocusLoss(SDL_Window * window)
 {
 {
+    SDL_bool default_minimize;
+
+    if (!(window->flags & SDL_WINDOW_FULLSCREEN)) {
+        return SDL_FALSE;
+    }
+
+    if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP) {
+        /* We're not doing a mode switch, so it's okay to stay around */
+        default_minimize = SDL_FALSE;
+    } else {
+        default_minimize = SDL_TRUE;
+    }
+
     const char *hint = SDL_GetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS);
     const char *hint = SDL_GetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS);
     if (hint) {
     if (hint) {
         if (*hint == '0') {
         if (*hint == '0') {
@@ -2144,7 +2158,8 @@ static SDL_bool ShouldMinimizeOnFocusLoss()
             return SDL_TRUE;
             return SDL_TRUE;
         }
         }
     }
     }
-    return SDL_TRUE;
+
+    return default_minimize;
 }
 }
 
 
 void
 void
@@ -2156,8 +2171,7 @@ SDL_OnWindowFocusLost(SDL_Window * window)
 
 
     SDL_UpdateWindowGrab(window);
     SDL_UpdateWindowGrab(window);
 
 
-    /* If we're fullscreen and lose focus, minimize unless the hint tells us otherwise */
-    if ((window->flags & SDL_WINDOW_FULLSCREEN) && ShouldMinimizeOnFocusLoss()) {
+    if (ShouldMinimizeOnFocusLoss(window)) {
         SDL_MinimizeWindow(window);
         SDL_MinimizeWindow(window);
     }
     }
 }
 }