diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2025-09-26 15:49:05 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-10-02 09:33:08 +0300 |
| commit | 1465cd4139ad136da637ce269fafe93eb1b8b17a (patch) | |
| tree | e0dbdfff4b3324aa9e92481ee876ac1c35f383d4 /src/layout/monitor.rs | |
| parent | 7fc544b9d67229008bd4b6f85f110a7a9361aa08 (diff) | |
| download | niri-1465cd4139ad136da637ce269fafe93eb1b8b17a.tar.gz niri-1465cd4139ad136da637ce269fafe93eb1b8b17a.tar.bz2 niri-1465cd4139ad136da637ce269fafe93eb1b8b17a.zip | |
layout: Move empty workspace handling to Monitor::new()
Diffstat (limited to 'src/layout/monitor.rs')
| -rw-r--r-- | src/layout/monitor.rs | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/src/layout/monitor.rs b/src/layout/monitor.rs index 6433688a..af3925bc 100644 --- a/src/layout/monitor.rs +++ b/src/layout/monitor.rs @@ -275,7 +275,8 @@ impl From<&super::OverviewProgress> for OverviewProgress { impl<W: LayoutElement> Monitor<W> { pub fn new( output: Output, - workspaces: Vec<Workspace<W>>, + mut workspaces: Vec<Workspace<W>>, + ws_id_to_activate: Option<WorkspaceId>, clock: Clock, options: Rc<Options>, ) -> Self { @@ -283,6 +284,28 @@ impl<W: LayoutElement> Monitor<W> { let view_size = output_size(&output); let working_area = compute_working_area(&output); + // Prepare the workspaces: set output, empty first, empty last. + let mut active_workspace_idx = 0; + + for (idx, ws) in workspaces.iter_mut().enumerate() { + assert!(ws.has_windows_or_name()); + + ws.set_output(Some(output.clone())); + + if ws_id_to_activate.is_some_and(|id| ws.id() == id) { + active_workspace_idx = idx; + } + } + + if options.layout.empty_workspace_above_first && !workspaces.is_empty() { + let ws = Workspace::new(output.clone(), clock.clone(), options.clone()); + workspaces.insert(0, ws); + active_workspace_idx += 1; + } + + let ws = Workspace::new(output.clone(), clock.clone(), options.clone()); + workspaces.push(ws); + Self { output_name: output.name(), output, @@ -290,7 +313,7 @@ impl<W: LayoutElement> Monitor<W> { view_size, working_area, workspaces, - active_workspace_idx: 0, + active_workspace_idx, previous_workspace_id: None, insert_hint: None, insert_hint_element: InsertHintElement::new(options.layout.insert_hint), |
