Browse Source

Don't set the borderless flag if we're about to go fullscreen.

This prevents the GNOME window manager from moving the window to a different display before the window goes fullscreen.

Fixes https://github.com/libsdl-org/SDL/issues/9915
Sam Lantinga 10 months ago
parent
commit
cd9c25e800
2 changed files with 12 additions and 2 deletions
  1. 1 0
      src/video/SDL_video.c
  2. 11 2
      src/video/x11/SDL_x11window.c

+ 1 - 0
src/video/SDL_video.c

@@ -2254,6 +2254,7 @@ SDL_Window *SDL_CreateWindowWithProperties(SDL_PropertiesID props)
         window->y = bounds.y;
         window->w = bounds.w;
         window->h = bounds.h;
+        window->pending_flags |= SDL_WINDOW_FULLSCREEN;
         flags |= SDL_WINDOW_FULLSCREEN;
     }
 

+ 11 - 2
src/video/x11/SDL_x11window.c

@@ -655,8 +655,13 @@ int X11_CreateWindow(SDL_VideoDevice *_this, SDL_Window *window, SDL_PropertiesI
         return SDL_SetError("Couldn't create window");
     }
 
-    SetWindowBordered(display, screen, w,
-                      !(window->flags & SDL_WINDOW_BORDERLESS));
+    /* Don't set the borderless flag if we're about to go fullscreen.
+     * This prevents the window manager from moving a full-screen borderless
+     * window to a different display before we actually go fullscreen.
+     */
+    if (!(window->pending_flags & SDL_WINDOW_FULLSCREEN)) {
+        SetWindowBordered(display, screen, w, !(window->flags & SDL_WINDOW_BORDERLESS));
+    }
 
     sizehints = X11_XAllocSizeHints();
     /* Setup the normal size hints */
@@ -1729,6 +1734,10 @@ static int X11_SetWindowFullscreenViaWM(SDL_VideoDevice *_this, SDL_Window *wind
         X11_SetNetWMState(_this, data->xwindow, flags);
     }
 
+    if ((window->flags & SDL_WINDOW_BORDERLESS) && !fullscreen) {
+        SetWindowBordered(display, displaydata->screen, data->xwindow, SDL_FALSE);
+    }
+
     if (data->visual->class == DirectColor) {
         if (fullscreen) {
             X11_XInstallColormap(display, data->colormap);