diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2023-09-26 10:06:07 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2023-09-26 13:45:03 +0400 |
| commit | ac16717f4eb6d339ae0a544ac35b8305ffc8802e (patch) | |
| tree | 9a7d8ba7b72928b8b886ceea49e80fe558d77505 /src/niri.rs | |
| parent | 52aee11aa5ee6a027062d23719f3473149a19a31 (diff) | |
| download | niri-ac16717f4eb6d339ae0a544ac35b8305ffc8802e.tar.gz niri-ac16717f4eb6d339ae0a544ac35b8305ffc8802e.tar.bz2 niri-ac16717f4eb6d339ae0a544ac35b8305ffc8802e.zip | |
Avoid unwraps in more places
Diffstat (limited to 'src/niri.rs')
| -rw-r--r-- | src/niri.rs | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/src/niri.rs b/src/niri.rs index 6bcca8eb..9aa0e027 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -361,7 +361,14 @@ impl Niri { calloop::channel::Event::Msg(ScreenshotToNiri::TakeScreenshot { include_cursor, }) => { - let renderer = state.backend.renderer(); + 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| { @@ -938,6 +945,10 @@ impl Niri { fn redraw(&mut self, backend: &mut Backend, output: &Output) { let _span = tracy_client::span!("Niri::redraw"); + let Some(renderer) = backend.renderer() else { + return; + }; + let state = self.output_state.get_mut(output).unwrap(); let presentation_time = state.frame_clock.next_presentation_time(); @@ -948,7 +959,7 @@ impl Niri { self.monitor_set.advance_animations(presentation_time); // Render the elements. - let elements = self.render(backend.renderer(), output, true); + let elements = self.render(renderer, output, true); // Hand it over to the backend. let dmabuf_feedback = backend.render(self, output, &elements, presentation_time); @@ -962,7 +973,10 @@ impl Niri { self.send_frame_callbacks(output); // Render and send to PipeWire screencast streams. - self.send_for_screen_cast(backend, output, &elements, presentation_time); + let renderer = backend + .renderer() + .expect("renderer must not have disappeared"); + self.send_for_screen_cast(renderer, output, &elements, presentation_time); } fn send_dmabuf_feedbacks(&self, output: &Output, feedback: &DmabufFeedback) { @@ -1072,7 +1086,7 @@ impl Niri { fn send_for_screen_cast( &mut self, - backend: &mut Backend, + renderer: &mut GlesRenderer, output: &Output, elements: &[OutputRenderElements<GlesRenderer>], presentation_time: Duration, @@ -1116,7 +1130,10 @@ impl Niri { let dmabuf = cast.dmabufs.borrow()[&fd].clone(); // FIXME: Hidden / embedded / metadata cursor - render_to_dmabuf(backend.renderer(), dmabuf, size, scale, elements).unwrap(); + if let Err(err) = render_to_dmabuf(renderer, dmabuf, size, scale, elements) { + error!("error rendering to dmabuf: {err:?}"); + continue; + } let maxsize = data.as_raw().maxsize; let chunk = data.chunk_mut(); |
