From d7b2c70c7c1117195bd19afa7d3d33963d4edfc6 Mon Sep 17 00:00:00 2001 From: lkn Date: Sun, 21 Jun 2026 19:19:54 +0200 Subject: [PATCH] wayland: sync scene node geometry offset on every commit CSD clients like Firefox may not set window_geometry until after the initial map. Update the scene node offset on every surface commit so the content stays aligned with the frame as geometry changes. --- src/backend/wayland/wl_xdg.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/backend/wayland/wl_xdg.c b/src/backend/wayland/wl_xdg.c index f42f14a..3fe8af8 100644 --- a/src/backend/wayland/wl_xdg.c +++ b/src/backend/wayland/wl_xdg.c @@ -562,12 +562,21 @@ handle_toplevel_commit(struct wl_listener *listener, void *data) if (view->scene_node && view->frame_id) { struct wl_frame_buf *ffb = frame_buf_find(view->frame_id); if (ffb && ffb->tree && view->scene_node->node.parent != ffb->tree) { - struct wlr_box geo = view->xdg_surface->geometry; wlr_scene_node_reparent(&view->scene_node->node, ffb->tree); + } + } + + /* Keep scene node offset in sync with CSD geometry (may change between commits) */ + if (view->scene_node && view->xdg_surface) { + struct wlr_box geo = view->xdg_surface->geometry; + if (view->frame_id) wlr_scene_node_set_position(&view->scene_node->node, view->frame_rel_x - geo.x, view->frame_rel_y - geo.y); - } + else + wlr_scene_node_set_position(&view->scene_node->node, + view->x - geo.x, + view->y - geo.y); } /* When the client commits a buffer at a new size (e.g. after interactive