aboutsummaryrefslogtreecommitdiff
path: root/src/niri.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2023-10-10 08:54:15 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2023-10-10 08:54:15 +0400
commita0b8da69c7b4e052502b646e4aa3f6ff2a0e216a (patch)
tree1f72e4baba387007e6df52cf63f79291ca156611 /src/niri.rs
parent3c200fd64a1b66727297eba9f097601a609a7af8 (diff)
downloadniri-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.rs75
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();