fix: skip view-absolute position sync for reparented frame_bufs

This commit is contained in:
Window Maker 2026-05-31 10:04:21 +02:00
parent 654f24d8f8
commit 5173cbbdd5
1 changed files with 12 additions and 4 deletions

View File

@ -7885,8 +7885,14 @@ wl_client_reparent(WNativeWindow client, WNativeWindow new_parent, int x, int y)
fprintf(stderr, "reparent_framebuf: client=0x%lx fb=%p new_parent=0x%lx parent_fb=%p\n",
(unsigned long)client, (void*)fb,
(unsigned long)new_parent, (void*)parent_fb);
if (fb) fprintf(stderr, " fb: tree=%p scene_buf=%p\n", (void*)fb->tree, (void*)fb->scene_buf);
if (parent_fb) fprintf(stderr, " parent_fb: tree=%p\n", (void*)parent_fb->tree);
if (fb) fprintf(stderr, " fb: tree=%p scene_buf=%p pos=(%d,%d)\n",
(void*)fb->tree, (void*)fb->scene_buf,
fb->tree ? fb->tree->node.x : -1,
fb->tree ? fb->tree->node.y : -1);
if (parent_fb) fprintf(stderr, " parent_fb: tree=%p pos=(%d,%d)\n",
(void*)parent_fb->tree,
parent_fb->tree ? parent_fb->tree->node.x : -1,
parent_fb->tree ? parent_fb->tree->node.y : -1);
if (fb && parent_fb) {
fb->parent_id = new_parent;
fb->rel_x = x;
@ -7994,10 +8000,12 @@ void wl_view_commit_backing_impl(unsigned long id)
if (fb && fb->scene_buf) {
/* Sync position from the WINGs view — it may have moved since
* the frame_buf was created (e.g. switch panel is positioned
* after widget creation via WMMoveWidget). */
* after widget creation via WMMoveWidget).
* When reparented (parent_id set), use the relative offset
* instead of the view's absolute position. */
extern W_View *W_GetViewForWindow(unsigned long id);
W_View *v = W_GetViewForWindow((unsigned long)id);
if (v) {
if (v && !fb->parent_id) {
if (fb->x != v->pos.x || fb->y != v->pos.y) {
fb->x = v->pos.x;
fb->y = v->pos.y;