aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/niri.rs16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/niri.rs b/src/niri.rs
index fd8d586a..c1d1b958 100644
--- a/src/niri.rs
+++ b/src/niri.rs
@@ -740,7 +740,21 @@ impl State {
}
pub fn move_cursor(&mut self, location: Point<f64, Logical>) {
- let under = self.niri.contents_under(location);
+ let mut under = match self.niri.pointer_visibility {
+ PointerVisibility::Disabled => PointContents::default(),
+ _ => self.niri.contents_under(location),
+ };
+
+ // Disable the hidden pointer if the contents underneath have changed.
+ if !self.niri.pointer_visibility.is_visible() && self.niri.pointer_contents != under {
+ self.niri.pointer_visibility = PointerVisibility::Disabled;
+
+ // When setting PointerVisibility::Hidden together with pointer contents changing,
+ // we can change straight to nothing to avoid one frame of hover. Notably, this can
+ // be triggered through warp-mouse-to-focus combined with hide-when-typing.
+ under = PointContents::default();
+ }
+
self.niri.pointer_contents.clone_from(&under);
let pointer = &self.niri.seat.get_pointer().unwrap();