From d91499486e505bba1e1764e1e055ce1ec5eda7fb Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Sat, 29 Mar 2025 11:16:12 +0300 Subject: Make move-window-to-workspace focus=false work across monitors too --- src/layout/mod.rs | 11 +++++++---- src/layout/tests.rs | 7 ++++++- 2 files changed, 13 insertions(+), 5 deletions(-) (limited to 'src/layout') diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 62ece8c0..f35a3b76 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -3199,6 +3199,7 @@ impl Layout { window: Option<&W::Id>, output: &Output, target_ws_idx: Option, + activate: ActivateWindow, ) { if let Some(InteractiveMoveState::Moving(move_)) = &mut self.interactive_move { if window.is_none() || window == Some(move_.tile.window().id()) { @@ -3241,9 +3242,11 @@ impl Layout { let ws_id = monitors[new_idx].workspaces[workspace_idx].id(); let mon = &mut monitors[mon_idx]; - let activate = window.map_or(true, |win| { - mon_idx == *active_monitor_idx - && mon.active_window().map(|win| win.id()) == Some(win) + let activate = activate.map_smart(|| { + window.map_or(true, |win| { + mon_idx == *active_monitor_idx + && mon.active_window().map(|win| win.id()) == Some(win) + }) }); let activate = if activate { ActivateWindow::Yes @@ -3302,7 +3305,7 @@ impl Layout { let ws = current.active_workspace(); if ws.floating_is_active() { - self.move_to_output(None, output, None); + self.move_to_output(None, output, None, ActivateWindow::Smart); return; } diff --git a/src/layout/tests.rs b/src/layout/tests.rs index 727f53f5..89fbb96b 100644 --- a/src/layout/tests.rs +++ b/src/layout/tests.rs @@ -1081,7 +1081,12 @@ impl Op { let window_id = window_id.filter(|id| layout.has_window(id)); let target_ws_idx = target_ws_idx.filter(|idx| mon.workspaces.len() > *idx); - layout.move_to_output(window_id.as_ref(), &output, target_ws_idx); + layout.move_to_output( + window_id.as_ref(), + &output, + target_ws_idx, + ActivateWindow::Smart, + ); } Op::MoveColumnToOutput(id) => { let name = format!("output{id}"); -- cgit