From 1cc7ab3e2927d6efb7659905ad4cdd37d816e436 Mon Sep 17 00:00:00 2001 From: Kirill Primak Date: Thu, 23 Nov 2023 16:10:54 +0300 Subject: [PATCH] tinywl: don't send configures to uninitialized xdg_surfaces --- tinywl/tinywl.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/tinywl/tinywl.c b/tinywl/tinywl.c index 1dfca170..d620e682 100644 --- a/tinywl/tinywl.c +++ b/tinywl/tinywl.c @@ -751,13 +751,17 @@ static void xdg_toplevel_request_resize( static void xdg_toplevel_request_maximize( struct wl_listener *listener, void *data) { /* This event is raised when a client would like to maximize itself, - * typically because the user clicked on the maximize button on - * client-side decorations. tinywl doesn't support maximization, but - * to conform to xdg-shell protocol we still must send a configure. - * wlr_xdg_surface_schedule_configure() is used to send an empty reply. */ + * typically because the user clicked on the maximize button on client-side + * decorations. tinywl doesn't support maximization, but to conform to + * xdg-shell protocol we still must send a configure. + * wlr_xdg_surface_schedule_configure() is used to send an empty reply. + * However, if the request was sent before an initial commit, we don't do + * anything and let the client finish the initial surface setup. */ struct tinywl_toplevel *toplevel = wl_container_of(listener, toplevel, request_maximize); - wlr_xdg_surface_schedule_configure(toplevel->xdg_toplevel->base); + if (toplevel->xdg_toplevel->base->initial_commit) { + wlr_xdg_surface_schedule_configure(toplevel->xdg_toplevel->base); + } } static void xdg_toplevel_request_fullscreen( @@ -765,7 +769,9 @@ static void xdg_toplevel_request_fullscreen( /* Just as with request_maximize, we must send a configure here. */ struct tinywl_toplevel *toplevel = wl_container_of(listener, toplevel, request_fullscreen); - wlr_xdg_surface_schedule_configure(toplevel->xdg_toplevel->base); + if (toplevel->xdg_toplevel->base->initial_commit) { + wlr_xdg_surface_schedule_configure(toplevel->xdg_toplevel->base); + } } static void server_new_xdg_toplevel(struct wl_listener *listener, void *data) {