1
0
Fork 0
forked from wry/wry

idle: add a grace period

This commit is contained in:
Julian Orth 2025-01-26 12:29:20 +01:00
parent 1ad3d11616
commit e8be15a26c
29 changed files with 405 additions and 79 deletions

View file

@ -61,9 +61,12 @@ impl Idle {
self.dead = true;
return;
}
let grace_period = self.state.idle.grace_period.get();
let timeout = self.state.idle.timeout.get();
let after_grace = timeout.saturating_add(grace_period);
let since = duration_since(self.last_input);
if since >= timeout {
if since >= after_grace {
self.set_in_grace_period(false);
if !timeout.is_zero() && !self.is_inhibited {
if let Some(config) = self.state.config.get() {
config.idle();
@ -71,17 +74,31 @@ impl Idle {
self.backend.set_idle(true);
self.idle = true;
}
} else if since >= timeout {
if !timeout.is_zero() && !self.is_inhibited {
self.set_in_grace_period(true);
}
self.program_timer2(after_grace - since);
} else {
self.program_timer2(timeout - since);
}
}
fn set_in_grace_period(&mut self, val: bool) {
if self.state.idle.in_grace_period.replace(val) == val {
return;
}
self.state.damage(self.state.root.extents.get());
self.state.damage_hardware_cursors(false);
}
fn handle_idle_changes(&mut self) {
if self.state.idle.inhibitors_changed.replace(false) {
let is_inhibited = self.state.idle.inhibitors.len() > 0;
if self.is_inhibited != is_inhibited {
self.is_inhibited = is_inhibited;
if !self.is_inhibited {
self.last_input = now();
self.program_timer();
}
}
@ -91,6 +108,7 @@ impl Idle {
}
if self.state.idle.input.replace(false) {
self.last_input = now();
self.set_in_grace_period(false);
if self.idle {
self.backend.set_idle(false);
self.idle = false;