aboutsummaryrefslogtreecommitdiff
path: root/src/layout/monitor.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2025-09-26 15:49:05 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-10-02 09:33:08 +0300
commit1465cd4139ad136da637ce269fafe93eb1b8b17a (patch)
treee0dbdfff4b3324aa9e92481ee876ac1c35f383d4 /src/layout/monitor.rs
parent7fc544b9d67229008bd4b6f85f110a7a9361aa08 (diff)
downloadniri-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.rs27
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),