From 653fa2d25079f46734b75e3900b6a32a6509e528 Mon Sep 17 00:00:00 2001 From: atheeq-rhxn Date: Mon, 23 Mar 2026 10:23:12 +0530 Subject: [PATCH] fix: capture windows with subsurfaces --- src/mango.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/mango.c b/src/mango.c index e4c21700..4af3858a 100644 --- a/src/mango.c +++ b/src/mango.c @@ -316,7 +316,6 @@ struct Client { struct wlr_scene_tree *image_capture_tree; struct wlr_scene *image_capture_scene; struct wlr_ext_image_capture_source_v1 *image_capture_source; - struct wlr_scene_surface *image_capture_scene_surface; struct wl_list link; struct wl_list flink; @@ -4063,8 +4062,9 @@ mapnotify(struct wl_listener *listener, void *data) { c->ext_foreign_toplevel = wlr_ext_foreign_toplevel_handle_v1_create( foreign_toplevel_list, &foreign_toplevel_state); c->ext_foreign_toplevel->data = c; - c->image_capture_scene_surface = wlr_scene_surface_create( - &c->image_capture_scene->tree, client_surface(c)); + c->image_capture_tree = c->type == XDGShell + ? wlr_scene_xdg_surface_create(&c->image_capture_scene->tree, c->surface.xdg) + : wlr_scene_subsurface_tree_create(&c->image_capture_scene->tree, client_surface(c)); /* Handle unmanaged clients first so we can return prior create borders */ @@ -6110,8 +6110,15 @@ void unmapnotify(struct wl_listener *listener, void *data) { c->swallowing = NULL; } - wlr_scene_node_destroy(&c->image_capture_scene_surface->buffer->node); - wlr_scene_node_destroy(&c->image_capture_scene->tree.node); + if (c->image_capture_tree) { + wlr_scene_node_destroy(&c->image_capture_tree->node); + c->image_capture_tree = NULL; + } + if (c->image_capture_scene) { + wlr_scene_node_destroy(&c->image_capture_scene->tree.node); + c->image_capture_scene = NULL; + } + c->image_capture_source = NULL; c->stack_proportion = 0.0f; c->next_in_stack = NULL;