aboutsummaryrefslogtreecommitdiff
path: root/src/input
diff options
context:
space:
mode:
Diffstat (limited to 'src/input')
-rw-r--r--src/input/mod.rs21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/input/mod.rs b/src/input/mod.rs
index 2744561c..961df54a 100644
--- a/src/input/mod.rs
+++ b/src/input/mod.rs
@@ -40,7 +40,7 @@ use self::move_grab::MoveGrab;
use self::resize_grab::ResizeGrab;
use self::spatial_movement_grab::SpatialMovementGrab;
use crate::layout::scrolling::ScrollDirection;
-use crate::layout::LayoutElement as _;
+use crate::layout::{ActivateWindow, LayoutElement as _};
use crate::niri::{CastTarget, State};
use crate::ui::screenshot_ui::ScreenshotUi;
use crate::utils::spawning::spawn;
@@ -1072,7 +1072,7 @@ impl State {
// FIXME: granular
self.niri.queue_redraw_all();
}
- Action::MoveWindowToWorkspace(reference) => {
+ Action::MoveWindowToWorkspace(reference, focus) => {
if let Some((mut output, index)) =
self.niri.find_output_and_workspace_index(reference)
{
@@ -1091,7 +1091,12 @@ impl State {
self.move_cursor_to_output(&output);
}
} else {
- self.niri.layout.move_to_workspace(None, index);
+ let activate = if focus {
+ ActivateWindow::Smart
+ } else {
+ ActivateWindow::No
+ };
+ self.niri.layout.move_to_workspace(None, index, activate);
self.maybe_warp_cursor_to_focus();
}
@@ -1102,6 +1107,7 @@ impl State {
Action::MoveWindowToWorkspaceById {
window_id: id,
reference,
+ focus,
} => {
let window = self.niri.layout.windows().find(|(_, m)| m.id().get() == id);
let window = window.map(|(_, m)| m.window.clone());
@@ -1130,7 +1136,14 @@ impl State {
}
}
} else {
- self.niri.layout.move_to_workspace(Some(&window), index);
+ let activate = if focus {
+ ActivateWindow::Smart
+ } else {
+ ActivateWindow::No
+ };
+ self.niri
+ .layout
+ .move_to_workspace(Some(&window), index, activate);
// If we focused the target window.
let new_focus = self.niri.layout.focus();