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