diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-05-20 15:36:08 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-05-20 15:36:08 +0400 |
| commit | f4cdde1f4f89729f91336ea2f5ad7a1265e3bf70 (patch) | |
| tree | c87d826e5de1cf575fa81c8680b0224d5ce5b26f | |
| parent | 56e02a398d9853a4a52a5200560ca75179f7c23c (diff) | |
| download | niri-f4cdde1f4f89729f91336ea2f5ad7a1265e3bf70.tar.gz niri-f4cdde1f4f89729f91336ea2f5ad7a1265e3bf70.tar.bz2 niri-f4cdde1f4f89729f91336ea2f5ad7a1265e3bf70.zip | |
Fix no outputs case handling in a few places
| -rw-r--r-- | src/handlers/layer_shell.rs | 16 | ||||
| -rw-r--r-- | src/handlers/mod.rs | 2 | ||||
| -rw-r--r-- | src/protocols/screencopy.rs | 16 |
3 files changed, 26 insertions, 8 deletions
diff --git a/src/handlers/layer_shell.rs b/src/handlers/layer_shell.rs index bd3fbbcd..7862a9fe 100644 --- a/src/handlers/layer_shell.rs +++ b/src/handlers/layer_shell.rs @@ -24,11 +24,17 @@ impl WlrLayerShellHandler for State { _layer: Layer, namespace: String, ) { - let output = wl_output - .as_ref() - .and_then(Output::from_resource) - .or_else(|| self.niri.layout.active_output().cloned()) - .unwrap(); + let output = if let Some(wl_output) = &wl_output { + Output::from_resource(wl_output) + } else { + self.niri.layout.active_output().cloned() + }; + let Some(output) = output else { + warn!("no output for new layer surface, closing"); + surface.send_close(); + return; + }; + let mut map = layer_map_for_output(&output); map.map_layer(&LayerSurface::new(surface, namespace)) .unwrap(); diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs index 2cd39fa2..e40306d0 100644 --- a/src/handlers/mod.rs +++ b/src/handlers/mod.rs @@ -288,7 +288,7 @@ impl SessionLockHandler for State { fn new_surface(&mut self, surface: LockSurface, output: WlOutput) { let Some(output) = Output::from_resource(&output) else { - error!("no Output matching WlOutput"); + warn!("no Output matching WlOutput"); return; }; diff --git a/src/protocols/screencopy.rs b/src/protocols/screencopy.rs index 808be4cb..fd6bda68 100644 --- a/src/protocols/screencopy.rs +++ b/src/protocols/screencopy.rs @@ -94,7 +94,13 @@ where overlay_cursor, output, } => { - let output = Output::from_resource(&output).unwrap(); + let Some(output) = Output::from_resource(&output) else { + trace!("screencopy client requested non-existent output"); + let frame = data_init.init(frame, ScreencopyFrameState::Failed); + frame.failed(); + return; + }; + let buffer_size = output.current_mode().unwrap().size; let region_loc = Point::from((0, 0)); @@ -116,7 +122,13 @@ where return; } - let output = Output::from_resource(&output).unwrap(); + let Some(output) = Output::from_resource(&output) else { + trace!("screencopy client requested non-existent output"); + let frame = data_init.init(frame, ScreencopyFrameState::Failed); + frame.failed(); + return; + }; + let output_transform = output.current_transform(); let output_physical_size = output_transform.transform_size(output.current_mode().unwrap().size); |
