You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
2.4 KiB
54 lines
2.4 KiB
From e1b4761c621e9883c3f02971ea74cef14b1d6b87 Mon Sep 17 00:00:00 2001 |
|
From: Ethan Lee <flibitijibibo@gmail.com> |
|
Date: Thu, 20 Jan 2022 14:10:56 -0500 |
|
Subject: [PATCH 04/11] wayland: Avoid calling SetFullscreen in libdecor |
|
ShowWindow. |
|
|
|
This caused some weird stuff to happen in the libdecor path, probably because |
|
the window hasn't actually been mapped yet. It ends up calling stuff that |
|
should not yet apply, and so fullscreen in particular would have a really |
|
messed up titlebar. |
|
|
|
The good news is, libdecor is good about tracking fullscreen state, so we can |
|
let the callback do this for us. Keep this for xdg_shell because we actually |
|
map the window ourselves, so we know this call is valid for that path. |
|
--- |
|
src/video/wayland/SDL_waylandwindow.c | 8 ++++++-- |
|
1 file changed, 6 insertions(+), 2 deletions(-) |
|
|
|
diff --git a/src/video/wayland/SDL_waylandwindow.c b/src/video/wayland/SDL_waylandwindow.c |
|
index 80bb66878..3b21af7be 100644 |
|
--- a/src/video/wayland/SDL_waylandwindow.c |
|
+++ b/src/video/wayland/SDL_waylandwindow.c |
|
@@ -724,7 +724,6 @@ void Wayland_ShowWindow(_THIS, SDL_Window *window) |
|
{ |
|
SDL_VideoData *c = _this->driverdata; |
|
SDL_WindowData *data = window->driverdata; |
|
- SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window); |
|
|
|
/* Detach any previous buffers before resetting everything, otherwise when |
|
* calling this a second time you'll get an annoying protocol error |
|
@@ -766,7 +765,6 @@ void Wayland_ShowWindow(_THIS, SDL_Window *window) |
|
if (window->flags & SDL_WINDOW_MINIMIZED) { |
|
Wayland_MinimizeWindow(_this, window); |
|
} |
|
- Wayland_SetWindowFullscreen(_this, window, display, (window->flags & SDL_WINDOW_FULLSCREEN) != 0); |
|
|
|
/* We have to wait until the surface gets a "configure" event, or use of |
|
* this surface will fail. This is a new rule for xdg_shell. |
|
@@ -782,6 +780,12 @@ void Wayland_ShowWindow(_THIS, SDL_Window *window) |
|
} else |
|
#endif |
|
if (c->shell.xdg) { |
|
+ /* Unlike libdecor we need to call this explicitly to prevent a deadlock. |
|
+ * libdecor will call this as part of their configure event! |
|
+ * -flibit |
|
+ */ |
|
+ Wayland_SetWindowFullscreen(_this, window, SDL_GetDisplayForWindow(window), |
|
+ (window->flags & SDL_WINDOW_FULLSCREEN) != 0); |
|
if (data->shell_surface.xdg.surface) { |
|
while (!data->shell_surface.xdg.initial_configure_seen) { |
|
WAYLAND_wl_display_flush(c->display); |
|
-- |
|
2.34.1 |
|
|
|
|