diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2023-10-10 08:54:15 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2023-10-10 08:54:15 +0400 |
| commit | a0b8da69c7b4e052502b646e4aa3f6ff2a0e216a (patch) | |
| tree | 1f72e4baba387007e6df52cf63f79291ca156611 /src/niri.rs | |
| parent | 3c200fd64a1b66727297eba9f097601a609a7af8 (diff) | |
| download | niri-a0b8da69c7b4e052502b646e4aa3f6ff2a0e216a.tar.gz niri-a0b8da69c7b4e052502b646e4aa3f6ff2a0e216a.tar.bz2 niri-a0b8da69c7b4e052502b646e4aa3f6ff2a0e216a.zip | |
Extract on_screen_shot_msg
Diffstat (limited to 'src/niri.rs')
| -rw-r--r-- | src/niri.rs | 75 |
1 files changed, 41 insertions, 34 deletions
diff --git a/src/niri.rs b/src/niri.rs index 6c8a1d50..5d7093c0 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -353,6 +353,46 @@ impl State { ToNiriMsg::StopCast { session_id } => self.niri.stop_cast(session_id), } } + + fn on_screen_shot_msg( + &mut self, + to_screenshot: &async_channel::Sender<NiriToScreenshot>, + msg: ScreenshotToNiri, + ) { + let ScreenshotToNiri::TakeScreenshot { include_cursor } = msg; + let _span = tracy_client::span!("TakeScreenshot"); + + let Some(renderer) = self.backend.renderer() else { + let msg = NiriToScreenshot::ScreenshotResult(None); + if let Err(err) = to_screenshot.send_blocking(msg) { + warn!("error sending None to screenshot: {err:?}"); + } + return; + }; + + let on_done = { + let to_screenshot = to_screenshot.clone(); + move |path| { + let msg = NiriToScreenshot::ScreenshotResult(Some(path)); + if let Err(err) = to_screenshot.send_blocking(msg) { + warn!("error sending path to screenshot: {err:?}"); + } + } + }; + + let res = self + .niri + .screenshot_all_outputs(renderer, include_cursor, on_done); + + if let Err(err) = res { + warn!("error taking a screenshot: {err:?}"); + + let msg = NiriToScreenshot::ScreenshotResult(None); + if let Err(err) = to_screenshot.send_blocking(msg) { + warn!("error sending None to screenshot: {err:?}"); + } + } + } } impl Niri { @@ -524,40 +564,7 @@ impl Niri { let (to_screenshot, from_niri) = async_channel::unbounded(); self.event_loop .insert_source(from_screenshot, move |event, _, state| match event { - calloop::channel::Event::Msg(ScreenshotToNiri::TakeScreenshot { - include_cursor, - }) => { - let Some(renderer) = state.backend.renderer() else { - let msg = NiriToScreenshot::ScreenshotResult(None); - if let Err(err) = to_screenshot.send_blocking(msg) { - warn!("error sending None to screenshot: {err:?}"); - } - return; - }; - - let on_done = { - let to_screenshot = to_screenshot.clone(); - move |path| { - let msg = NiriToScreenshot::ScreenshotResult(Some(path)); - if let Err(err) = to_screenshot.send_blocking(msg) { - warn!("error sending path to screenshot: {err:?}"); - } - } - }; - - let res = state - .niri - .screenshot_all_outputs(renderer, include_cursor, on_done); - - if let Err(err) = res { - warn!("error taking a screenshot: {err:?}"); - - let msg = NiriToScreenshot::ScreenshotResult(None); - if let Err(err) = to_screenshot.send_blocking(msg) { - warn!("error sending None to screenshot: {err:?}"); - } - } - } + calloop::channel::Event::Msg(msg) => state.on_screen_shot_msg(&to_screenshot, msg), calloop::channel::Event::Closed => (), }) .unwrap(); |
