diff options
| author | Florian Finkernagel <finkernagel@imt.uni-marburg.de> | 2025-03-13 14:55:16 +0100 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-03-22 01:00:43 -0700 |
| commit | 7f72c358d56453633b57bc353a458709fe878b63 (patch) | |
| tree | b3ded6d3a1bb8129d08a7565fc25bd75dd3677b0 /src | |
| parent | 0d4f0f00c0cd83a72151468bc610ce230a550027 (diff) | |
| download | niri-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.rs | 35 |
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) { |
