From 3c70263e0ff4edb2bae49bd2ad5ab0c72555719d Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Wed, 1 Oct 2025 09:43:40 -0700 Subject: [PATCH] screencopy: Without `draw_cursor`, omit dnd icon from toplevel capture It seems https://github.com/pop-os/cosmic-comp/pull/1638 caused an issue in cosmic-workspaces, where if there are multiple toplevels, when dragging a toplevel, the drag surface would appear in capture for other toplevels. For now, omit drag surface in toplevel capture without `draw_cursor`. Though I guess ultimately we do want it for metadata cursor capture in the portal, but not in cosmic-workspaces? Maybe the protocol needs some additional option for this... --- src/wayland/handlers/screencopy/render.rs | 26 +++++++++++++---------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/wayland/handlers/screencopy/render.rs b/src/wayland/handlers/screencopy/render.rs index 03c48b4f..5240f0e8 100644 --- a/src/wayland/handlers/screencopy/render.rs +++ b/src/wayland/handlers/screencopy/render.rs @@ -602,17 +602,21 @@ pub fn render_window_to_buffer( ); } - if let Some(dnd_icon) = get_dnd_icon(&seat) { - elements.extend( - cursor::draw_dnd_icon( - renderer, - &dnd_icon.surface, - (location + dnd_icon.offset.to_f64()).to_i32_round(), - 1.0, - ) - .into_iter() - .map(WindowCaptureElement::from), - ); + // TODO cosmic-workspaces wants to omit, but metadata cursor capture in portal should + // still include dnd surface in window capture buffer? + if draw_cursor { + if let Some(dnd_icon) = get_dnd_icon(&seat) { + elements.extend( + cursor::draw_dnd_icon( + renderer, + &dnd_icon.surface, + (location + dnd_icon.offset.to_f64()).to_i32_round(), + 1.0, + ) + .into_iter() + .map(WindowCaptureElement::from), + ); + } } }