From 10b748f555fea5a2a7ac7d49f8ecf6637819f12d Mon Sep 17 00:00:00 2001 From: Sooraj S <94284954+CheerfulPianissimo@users.noreply.github.com> Date: Sun, 7 Apr 2024 00:47:57 +0530 Subject: [PATCH] feat(clipboard): fix interaction with freeze and select feature: Issue #109 (#110) * feat(clipboard): fix interaction with freeze and select feature: Issue #109 * feat(clipboard): handle callback fails --- libwayshot/src/lib.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/libwayshot/src/lib.rs b/libwayshot/src/lib.rs index 4e8bc98b..d0ec88ad 100644 --- a/libwayshot/src/lib.rs +++ b/libwayshot/src/lib.rs @@ -413,7 +413,13 @@ impl WayshotConnection { Ok(frame_copies) } - fn overlay_frames(&self, frames: &[(FrameCopy, FrameGuard, OutputInfo)]) -> Result<()> { + /// Create a layer shell surface for each output, + /// render the screen captures on them and use the callback to select a region from them + fn overlay_frames_and_select_region( + &self, + frames: &[(FrameCopy, FrameGuard, OutputInfo)], + callback: Box Result>, + ) -> Result { let mut state = LayerShellState { configured_outputs: HashSet::new(), }; @@ -491,7 +497,10 @@ impl WayshotConnection { Ok(()) })?; } - Ok(()) + let callback_result = callback(); + layer_shell.destroy(); + event_queue.blocking_dispatch(&mut state)?; + callback_result } /// Take a screenshot from the specified region. @@ -547,7 +556,7 @@ impl WayshotConnection { RegionCapturer::Outputs(outputs) => outputs.as_slice().try_into()?, RegionCapturer::Region(region) => region, RegionCapturer::Freeze(callback) => { - self.overlay_frames(&frames).and_then(|_| callback())? + self.overlay_frames_and_select_region(&frames, callback)? } };