aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2025-09-26 12:04:22 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-10-02 09:33:08 +0300
commit36dc5c6e8e82028d7a1a2cbf6bf411c1a030eea2 (patch)
tree7375ea3ad8e740ea12113629f6082daac476c868 /src
parentea3bbea6bdbdbdd02a62e99ff51cd48d655ae84f (diff)
downloadniri-36dc5c6e8e82028d7a1a2cbf6bf411c1a030eea2.tar.gz
niri-36dc5c6e8e82028d7a1a2cbf6bf411c1a030eea2.tar.bz2
niri-36dc5c6e8e82028d7a1a2cbf6bf411c1a030eea2.zip
layout: Deduplicate move_workspace_to_output()
Diffstat (limited to 'src')
-rw-r--r--src/handlers/mod.rs2
-rw-r--r--src/input/mod.rs2
-rw-r--r--src/layout/mod.rs36
-rw-r--r--src/layout/tests.rs2
4 files changed, 10 insertions, 32 deletions
diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs
index 8a025a7f..3b673fa0 100644
--- a/src/handlers/mod.rs
+++ b/src/handlers/mod.rs
@@ -583,7 +583,7 @@ impl ExtWorkspaceHandler for State {
if let Some((old_output, old_idx)) = self.niri.find_output_and_workspace_index(reference) {
self.niri
.layout
- .move_workspace_to_output_by_id(old_idx, old_output, output);
+ .move_workspace_to_output_by_id(old_idx, old_output, &output);
}
}
}
diff --git a/src/input/mod.rs b/src/input/mod.rs
index 9fc48c09..ddd24c4a 100644
--- a/src/input/mod.rs
+++ b/src/input/mod.rs
@@ -1950,7 +1950,7 @@ impl State {
if self.niri.layout.move_workspace_to_output_by_id(
old_idx,
output,
- new_output.clone(),
+ &new_output,
) {
// Cursor warp already calls `queue_redraw_all`
if !self.maybe_warp_cursor_to_focus_centered() {
diff --git a/src/layout/mod.rs b/src/layout/mod.rs
index bea9f9a5..597d036d 100644
--- a/src/layout/mod.rs
+++ b/src/layout/mod.rs
@@ -3387,43 +3387,21 @@ impl<W: LayoutElement> Layout<W> {
monitors,
active_monitor_idx,
..
- } = &mut self.monitor_set
+ } = &self.monitor_set
else {
return false;
};
- let current = &mut monitors[*active_monitor_idx];
-
- // Do not do anything if the output is already correct
- if &current.output == output {
- // Just update the original output since this is an explicit movement action.
- current.active_workspace().original_output = OutputId::new(output);
-
- return false;
- }
-
- let mut ws = current.remove_workspace_by_idx(current.active_workspace_idx);
- ws.original_output = OutputId::new(output);
-
- let target_idx = monitors
- .iter()
- .position(|mon| &mon.output == output)
- .unwrap();
- let target = &mut monitors[target_idx];
-
- target.insert_workspace(ws, target.active_workspace_idx + 1, true);
-
- *active_monitor_idx = target_idx;
-
- true
+ let idx = monitors[*active_monitor_idx].active_workspace_idx;
+ self.move_workspace_to_output_by_id(idx, None, output)
}
- // FIXME: accept workspace by id and deduplicate logic with move_workspace_to_output()
+ // FIXME: accept workspace by id
pub fn move_workspace_to_output_by_id(
&mut self,
old_idx: usize,
old_output: Option<Output>,
- new_output: Output,
+ new_output: &Output,
) -> bool {
let MonitorSet::Normal {
monitors,
@@ -3444,7 +3422,7 @@ impl<W: LayoutElement> Layout<W> {
};
let target_idx = monitors
.iter()
- .position(|mon| mon.output == new_output)
+ .position(|mon| mon.output == *new_output)
.unwrap();
let current = &mut monitors[current_idx];
@@ -3467,7 +3445,7 @@ impl<W: LayoutElement> Layout<W> {
current_idx == *active_monitor_idx && old_idx == current.active_workspace_idx;
let mut ws = current.remove_workspace_by_idx(old_idx);
- ws.original_output = OutputId::new(&new_output);
+ ws.original_output = OutputId::new(new_output);
let target = &mut monitors[target_idx];
target.insert_workspace(ws, target.active_workspace_idx + 1, activate);
diff --git a/src/layout/tests.rs b/src/layout/tests.rs
index 8afb92b0..6f425047 100644
--- a/src/layout/tests.rs
+++ b/src/layout/tests.rs
@@ -1245,7 +1245,7 @@ impl Op {
return;
};
- layout.move_workspace_to_output_by_id(old_idx, Some(old_output), output);
+ layout.move_workspace_to_output_by_id(old_idx, Some(old_output), &output);
}
Op::SwitchPresetColumnWidth => layout.toggle_width(true),
Op::SwitchPresetColumnWidthBack => layout.toggle_width(false),