From c1f7c7f59eafb9a2ffc4f761f5282fcd62367e23 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 | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/mango.c b/src/mango.c index eba4a4c1..32009a74 100644 --- a/src/mango.c +++ b/src/mango.c @@ -321,7 +321,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; @@ -4098,8 +4097,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 */ @@ -6101,8 +6101,16 @@ 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; c->prev_in_stack = NULL;