aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/layout/mod.rs41
1 files changed, 34 insertions, 7 deletions
diff --git a/src/layout/mod.rs b/src/layout/mod.rs
index 571411fc..2e05392d 100644
--- a/src/layout/mod.rs
+++ b/src/layout/mod.rs
@@ -1904,8 +1904,21 @@ impl<W: LayoutElement> Layout<W> {
}
}
- let Some(monitor) = self.active_monitor() else {
- return;
+ let monitor = if let Some(window) = window {
+ match &mut self.monitor_set {
+ MonitorSet::Normal { monitors, .. } => monitors
+ .iter_mut()
+ .find(|mon| mon.has_window(window))
+ .unwrap(),
+ MonitorSet::NoOutputs { .. } => {
+ return;
+ }
+ }
+ } else {
+ let Some(monitor) = self.active_monitor() else {
+ return;
+ };
+ monitor
};
monitor.move_to_workspace(window, idx);
}
@@ -4935,11 +4948,7 @@ mod tests {
window_id,
workspace_idx,
} => {
- let window_id = window_id.filter(|id| {
- layout
- .active_monitor()
- .map_or(false, |mon| mon.has_window(id))
- });
+ let window_id = window_id.filter(|id| layout.has_window(id));
layout.move_to_workspace(window_id.as_ref(), workspace_idx);
}
Op::MoveColumnToWorkspaceDown => layout.move_column_to_workspace_down(),
@@ -6708,6 +6717,24 @@ mod tests {
check_ops(&ops);
}
+ #[test]
+ fn move_window_to_workspace_with_different_active_output() {
+ let ops = [
+ Op::AddOutput(0),
+ Op::AddOutput(1),
+ Op::AddWindow {
+ params: TestWindowParams::new(0),
+ },
+ Op::FocusOutput(1),
+ Op::MoveWindowToWorkspace {
+ window_id: Some(0),
+ workspace_idx: 2,
+ },
+ ];
+
+ check_ops(&ops);
+ }
+
fn parent_id_causes_loop(layout: &Layout<TestWindow>, id: usize, mut parent_id: usize) -> bool {
if parent_id == id {
return true;