aboutsummaryrefslogtreecommitdiff
path: root/src/niri.rs
diff options
context:
space:
mode:
authoryzy-1 <50034950+yzy-1@users.noreply.github.com>2024-10-02 08:22:50 +0800
committerIvan Molodetskikh <yalterz@gmail.com>2024-10-06 22:09:19 -0700
commit42a9daec9db57e16541b6ef236b695b71bfb1199 (patch)
tree0268b893aa75df533076287cdfac232870f00deb /src/niri.rs
parent1ba2be392857b95ba346ee4770f824c42afe0681 (diff)
downloadniri-42a9daec9db57e16541b6ef236b695b71bfb1199.tar.gz
niri-42a9daec9db57e16541b6ef236b695b71bfb1199.tar.bz2
niri-42a9daec9db57e16541b6ef236b695b71bfb1199.zip
Implement hide cursor on key press and on timeout
Diffstat (limited to 'src/niri.rs')
-rw-r--r--src/niri.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/niri.rs b/src/niri.rs
index 396852bf..6119c4d6 100644
--- a/src/niri.rs
+++ b/src/niri.rs
@@ -267,6 +267,7 @@ pub struct Niri {
/// When this happens, the pointer also loses any focus. This is so that touch can prevent
/// various tooltips from sticking around.
pub pointer_hidden: bool,
+ pub last_cursor_movement: Instant,
// FIXME: this should be able to be removed once PointerFocus takes grabs into account.
pub pointer_grab_ongoing: bool,
pub tablet_cursor_location: Option<Point<f64, Logical>>,
@@ -1860,6 +1861,7 @@ impl Niri {
dnd_icon: None,
pointer_focus: PointerFocus::default(),
pointer_hidden: false,
+ last_cursor_movement: Instant::now(),
pointer_grab_ongoing: false,
tablet_cursor_location: None,
gesture_swipe_3f_cumulative: None,
@@ -2663,7 +2665,26 @@ impl Niri {
pointer_elements
}
+ fn hide_cursor_after_timeout_if_needed(&mut self) {
+ if self.pointer_hidden {
+ return;
+ }
+
+ let config = self.config.borrow();
+ let timeout = &config.cursor.hide_after_inactive_ms;
+
+ if let Some(duration_ms) = timeout {
+ let timeout = Duration::from_millis(*duration_ms as u64);
+
+ if self.last_cursor_movement.elapsed() >= timeout {
+ self.pointer_hidden = true;
+ }
+ }
+ }
+
pub fn refresh_pointer_outputs(&mut self) {
+ self.hide_cursor_after_timeout_if_needed();
+
if self.pointer_hidden {
return;
}