aboutsummaryrefslogtreecommitdiff
path: root/src/layout
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2025-03-29 11:16:12 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-03-29 11:17:38 +0300
commitd91499486e505bba1e1764e1e055ce1ec5eda7fb (patch)
tree7315e42e995afc3f861e0da4819d11175b60511d /src/layout
parentf7106f9658d927a12a568316824a842cb3ab571c (diff)
downloadniri-d91499486e505bba1e1764e1e055ce1ec5eda7fb.tar.gz
niri-d91499486e505bba1e1764e1e055ce1ec5eda7fb.tar.bz2
niri-d91499486e505bba1e1764e1e055ce1ec5eda7fb.zip
Make move-window-to-workspace focus=false work across monitors too
Diffstat (limited to 'src/layout')
-rw-r--r--src/layout/mod.rs11
-rw-r--r--src/layout/tests.rs7
2 files changed, 13 insertions, 5 deletions
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<W: LayoutElement> Layout<W> {
window: Option<&W::Id>,
output: &Output,
target_ws_idx: Option<usize>,
+ 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<W: LayoutElement> Layout<W> {
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<W: LayoutElement> Layout<W> {
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}");