From b5ad0e12fd46f7ab06f4bbc0e80bf3f2d4395cbf Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Sun, 2 Jun 2024 08:17:26 +0300 Subject: Preserve empty named workspaces upon output removal Not sure how we missed this. --- src/layout/mod.rs | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) 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 Layout { } // 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 { // Give equal weight to: // - 0: the element is disabled -- cgit