diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 597d036d..e771a450 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -814,14 +814,7 @@ impl Layout { monitor.workspaces[monitor.active_workspace_idx].id(), ); - let mut workspaces = monitor.workspaces; - - for ws in &mut workspaces { - ws.set_output(None); - } - - // Get rid of empty workspaces. - workspaces.retain(|ws| ws.has_windows_or_name()); + let mut workspaces = monitor.into_workspaces(); if monitors.is_empty() { // Removed the last monitor. diff --git a/src/layout/monitor.rs b/src/layout/monitor.rs index 45118a22..6433688a 100644 --- a/src/layout/monitor.rs +++ b/src/layout/monitor.rs @@ -303,6 +303,16 @@ impl Monitor { } } + pub fn into_workspaces(mut self) -> Vec> { + self.workspaces.retain(|ws| ws.has_windows_or_name()); + + for ws in &mut self.workspaces { + ws.set_output(None); + } + + self.workspaces + } + pub fn output(&self) -> &Output { &self.output }