diff --git a/glfw/wl_platform.h b/glfw/wl_platform.h index 1e31477db..4fed68641 100644 --- a/glfw/wl_platform.h +++ b/glfw/wl_platform.h @@ -220,6 +220,7 @@ typedef struct _GLFWwindowWayland struct { unsigned int x, y; } axis_discrete_count; + bool surface_configured_once; uint32_t pending_state; struct { diff --git a/glfw/wl_window.c b/glfw/wl_window.c index 0cc31ac4f..6c502dd88 100644 --- a/glfw/wl_window.c +++ b/glfw/wl_window.c @@ -490,6 +490,13 @@ static void xdgSurfaceHandleConfigure(void* data, uint32_t new_states = window->wl.pending.toplevel_states; int width = window->wl.pending.width; int height = window->wl.pending.height; + if (!window->wl.surface_configured_once && !width && !height && !window->wl.decorations.serverSide && getenv("XAUTHORITY") && strstr(getenv("XAUTHORITY"), "mutter")) { + // https://github.com/kovidgoyal/kitty/issues/4802 + window->wl.surface_configured_once = true; + debug("Ignoring first zero size surface configure event on mutter.\n"); + return; + } + window->wl.surface_configured_once = true; if (new_states != window->wl.current.toplevel_states || width != window->wl.current.width ||