From 3685c64ed16e9e743b254e3163e48636af3dfb76 Mon Sep 17 00:00:00 2001 From: Frank Praznik Date: Fri, 5 Aug 2022 16:16:31 -0400 Subject: [PATCH] wayland: Round trip after window show/hide operations. Perform a round trip after showing/hiding the window to avoid protocol errors when ShowWindow() is called immediately after HideWindow(). --- src/video/wayland/SDL_waylandwindow.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/video/wayland/SDL_waylandwindow.c b/src/video/wayland/SDL_waylandwindow.c index 5f441b936..c5b997c7b 100644 --- a/src/video/wayland/SDL_waylandwindow.c +++ b/src/video/wayland/SDL_waylandwindow.c @@ -1364,6 +1364,12 @@ void Wayland_ShowWindow(_THIS, SDL_Window *window) unsetenv("XDG_ACTIVATION_TOKEN"); } } + + /* + * Roundtrip required to avoid a possible protocol violation when + * HideWindow was called immediately before ShowWindow. + */ + WAYLAND_wl_display_roundtrip(c->display); } static void @@ -1412,6 +1418,10 @@ void Wayland_HideWindow(_THIS, SDL_Window *window) wind->server_decoration = NULL; } + /* Be sure to detach after this is done, otherwise ShowWindow crashes! */ + wl_surface_attach(wind->surface, NULL, 0, 0); + wl_surface_commit(wind->surface); + #ifdef HAVE_LIBDECOR_H if (WINDOW_IS_LIBDECOR(data, window)) { if (wind->shell_surface.libdecor.frame) { @@ -1433,9 +1443,11 @@ void Wayland_HideWindow(_THIS, SDL_Window *window) } } - /* Be sure to detach after this is done, otherwise ShowWindow crashes! */ - wl_surface_attach(wind->surface, NULL, 0, 0); - wl_surface_commit(wind->surface); + /* + * Roundtrip required to avoid a possible protocol violation when + * ShowWindow is called immediately after HideWindow. + */ + WAYLAND_wl_display_roundtrip(data->display); } static void