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
This commit is contained in:
Sam Lantinga
2024-05-31 09:30:37 -07:00
parent 6896c4c3bf
commit cd9c25e800
2 changed files with 12 additions and 2 deletions

View File

@@ -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;
}

View File

@@ -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);