diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-06-02 08:17:26 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-06-02 08:21:19 +0300 |
| commit | b5ad0e12fd46f7ab06f4bbc0e80bf3f2d4395cbf (patch) | |
| tree | 1bfad724b8ec7c3b9f4f507bd59132fc2f9a0767 /src | |
| parent | c8e46b9d172dfa2ca89d82b87055b8e39622f80c (diff) | |
| download | niri-b5ad0e12fd46f7ab06f4bbc0e80bf3f2d4395cbf.tar.gz niri-b5ad0e12fd46f7ab06f4bbc0e80bf3f2d4395cbf.tar.bz2 niri-b5ad0e12fd46f7ab06f4bbc0e80bf3f2d4395cbf.zip | |
Preserve empty named workspaces upon output removal
Not sure how we missed this.
Diffstat (limited to 'src')
| -rw-r--r-- | src/layout/mod.rs | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 6e8fa292..a444601b 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -403,7 +403,7 @@ impl<W: LayoutElement> Layout<W> { } // Get rid of empty workspaces. - workspaces.retain(|ws| ws.has_windows()); + workspaces.retain(|ws| ws.has_windows() || ws.name.is_some()); if monitors.is_empty() { // Removed the last monitor. @@ -3811,6 +3811,33 @@ mod tests { check_ops(&ops); } + #[test] + fn removing_all_outputs_preserves_empty_named_workspaces() { + let ops = [ + Op::AddOutput(1), + Op::AddNamedWorkspace { + ws_name: 1, + output_name: None, + }, + Op::AddNamedWorkspace { + ws_name: 2, + output_name: None, + }, + Op::RemoveOutput(1), + ]; + + let mut layout = Layout::default(); + for op in ops { + op.apply(&mut layout); + } + + let MonitorSet::NoOutputs { workspaces } = layout.monitor_set else { + unreachable!() + }; + + assert_eq!(workspaces.len(), 2); + } + fn arbitrary_spacing() -> impl Strategy<Value = u16> { // Give equal weight to: // - 0: the element is disabled |
