diff --git a/src/backend/wayland/wl_framebuf.c b/src/backend/wayland/wl_framebuf.c index ce323b4..655f741 100644 --- a/src/backend/wayland/wl_framebuf.c +++ b/src/backend/wayland/wl_framebuf.c @@ -578,19 +578,12 @@ wl_frame_paint(struct WFrameWindow *fwin) wlr_scene_node_set_position(&tb_fb->scene_buf->node, 0, 0); } - /* Ensure titlebar buffer is full width */ + /* If titlebar buffer is too narrow, draw into parent frame instead + * to avoid replacing the pixman image while the scene graph may still + * hold a reference to the old wlr_buffer data. */ if (tb_fb && tb_fb->width < tb_w) { - pixman_image_unref(tb_fb->image); - tb_fb->image = pixman_image_create_bits(PIXMAN_a8r8g8b8, - tb_w, tb_h, NULL, 0); - tb_fb->width = tb_w; - tb_fb->height = tb_h; - tb_fb->base.width = tb_w; - tb_fb->base.height = tb_h; - tb_img = tb_fb->image; - /* Notify scene graph so hit-testing covers the new size. */ - if (tb_fb->scene_buf) - wlr_scene_buffer_set_dest_size(tb_fb->scene_buf, tb_w, tb_h); + tb_img = fb->image; + tb_fb = NULL; } WTexture *tex = fwin->title_texture[state];