aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFlorian Finkernagel <finkernagel@imt.uni-marburg.de>2025-03-13 14:55:16 +0100
committerIvan Molodetskikh <yalterz@gmail.com>2025-03-22 01:00:43 -0700
commit7f72c358d56453633b57bc353a458709fe878b63 (patch)
treeb3ded6d3a1bb8129d08a7565fc25bd75dd3677b0 /src
parent0d4f0f00c0cd83a72151468bc610ce230a550027 (diff)
downloadniri-7f72c358d56453633b57bc353a458709fe878b63.tar.gz
niri-7f72c358d56453633b57bc353a458709fe878b63.tar.bz2
niri-7f72c358d56453633b57bc353a458709fe878b63.zip
Add option to warp-mouse-to-focus to always center
Diffstat (limited to 'src')
-rw-r--r--src/niri.rs35
1 files changed, 23 insertions, 12 deletions
diff --git a/src/niri.rs b/src/niri.rs
index ac8b90a3..30042fc9 100644
--- a/src/niri.rs
+++ b/src/niri.rs
@@ -14,8 +14,8 @@ use _server_decoration::server::org_kde_kwin_server_decoration_manager::Mode as
use anyhow::{bail, ensure, Context};
use calloop::futures::Scheduler;
use niri_config::{
- Config, FloatOrInt, Key, Modifiers, OutputName, PreviewRender, TrackLayout, WorkspaceReference,
- DEFAULT_BACKGROUND_COLOR,
+ Config, FloatOrInt, Key, Modifiers, OutputName, PreviewRender, TrackLayout,
+ WarpMouseToFocusMode, WorkspaceReference, DEFAULT_BACKGROUND_COLOR,
};
use smithay::backend::allocator::Fourcc;
use smithay::backend::input::Keycode;
@@ -510,6 +510,8 @@ struct SurfaceFrameThrottlingState {
pub enum CenterCoords {
Separately,
Both,
+ // Force centering even if the cursor is already in the rectangle.
+ BothAlways,
}
#[derive(Clone, PartialEq, Eq)]
@@ -753,6 +755,7 @@ impl State {
center_f64(rect)
}
}
+ CenterCoords::BothAlways => center_f64(rect),
};
self.move_cursor(p);
@@ -808,19 +811,27 @@ impl State {
}
pub fn maybe_warp_cursor_to_focus(&mut self) -> bool {
- if !self.niri.config.borrow().input.warp_mouse_to_focus {
- return false;
- }
-
- self.move_cursor_to_focused_tile(CenterCoords::Separately)
+ let focused = match self.niri.config.borrow().input.warp_mouse_to_focus {
+ None => return false,
+ Some(inner) => match inner.mode {
+ None => CenterCoords::Separately,
+ Some(WarpMouseToFocusMode::CenterXy) => CenterCoords::Both,
+ Some(WarpMouseToFocusMode::CenterXyAlways) => CenterCoords::BothAlways,
+ },
+ };
+ self.move_cursor_to_focused_tile(focused)
}
pub fn maybe_warp_cursor_to_focus_centered(&mut self) -> bool {
- if !self.niri.config.borrow().input.warp_mouse_to_focus {
- return false;
- }
-
- self.move_cursor_to_focused_tile(CenterCoords::Both)
+ let focused = match self.niri.config.borrow().input.warp_mouse_to_focus {
+ None => return false,
+ Some(inner) => match inner.mode {
+ None => CenterCoords::Both,
+ Some(WarpMouseToFocusMode::CenterXy) => CenterCoords::Both,
+ Some(WarpMouseToFocusMode::CenterXyAlways) => CenterCoords::BothAlways,
+ },
+ };
+ self.move_cursor_to_focused_tile(focused)
}
pub fn refresh_pointer_contents(&mut self) {