From 99a5843595779bbaa51355fc97fbd8afd8e89737 Mon Sep 17 00:00:00 2001 From: Alexander Orzechowski Date: Thu, 10 Mar 2022 06:02:22 -0500 Subject: [PATCH] wayland: Don't commit the surface on a resize This fixes weirdness with GNOME. On a resize, we will schedule a new frame anyway which will commit the wl_surface for us anyway. If we don't resize, we'll commit to stay true to the wayland spec. --- glfw/wl_window.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/glfw/wl_window.c b/glfw/wl_window.c index 5ee6ca7f7..ff611f332 100644 --- a/glfw/wl_window.c +++ b/glfw/wl_window.c @@ -234,7 +234,7 @@ clipboard_mime(void) { return buf; } -static void +static bool dispatchChangesAfterConfigure(_GLFWwindow *window, int32_t width, int32_t height) { bool size_changed = width != window->wl.width || height != window->wl.height; bool scale_changed = checkScaleChange(window); @@ -252,6 +252,8 @@ dispatchChangesAfterConfigure(_GLFWwindow *window, int32_t width, int32_t height } _glfwInputWindowDamage(window); + + return size_changed || scale_changed; } static void @@ -510,10 +512,11 @@ static void xdgSurfaceHandleConfigure(void* data, window->wl.current.decoration_mode = mode; } + bool resized = false; if (window->wl.pending_state) { int width = window->wl.pending.width, height = window->wl.pending.height; set_csd_window_geometry(window, &width, &height); - dispatchChangesAfterConfigure(window, width, height); + resized = dispatchChangesAfterConfigure(window, width, height); if (window->wl.decorations.serverSide) { free_csd_surfaces(window); } else { @@ -523,7 +526,11 @@ static void xdgSurfaceHandleConfigure(void* data, } inform_compositor_of_window_geometry(window, "configure"); - wl_surface_commit(window->wl.surface); + + if (!resized) { + wl_surface_commit(window->wl.surface); + } + window->wl.pending_state = 0; }