From ecd03b70ef93616b0de73b795a5c05180dadcc3c Mon Sep 17 00:00:00 2001 From: Consolatis <35009135+Consolatis@users.noreply.github.com> Date: Sun, 12 Feb 2023 07:44:01 +0100 Subject: [PATCH] src/xdg.c: sync move with pending resize Before this patch, configuring a surface with a new size, immediately followed up by one or more view_move() calls would move the surface to the new coordinates immediately without waiting for the resize. This caused visual glitches when for example dragging a maximized window: the position would change but the size was still that of a maximized window. This patch fixes that by just ignoring view_move() requests (but still updating view->pending) if there is a configure request pending. Once the client commit comes in the new size will be applied as usual. --- src/xdg.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/xdg.c b/src/xdg.c index d5c7daec..89b1f4c3 100644 --- a/src/xdg.c +++ b/src/xdg.c @@ -203,13 +203,17 @@ handle_set_app_id(struct wl_listener *listener, void *data) static void xdg_toplevel_view_move(struct view *view, int x, int y) { - view->current.x = x; - view->current.y = y; - /* override any previous pending move */ view->pending.x = x; view->pending.y = y; + /* Syncs moves with resizes */ + if (view->pending_configure_serial > 0) { + return; + } + + view->current.x = x; + view->current.y = y; view_moved(view); }