fix: treat unlocking the session as user activity

SessionLockHandler::unlock clears the lock and schedules a render, but
never tells IdleNotifierState that the user is there. Unlock paths that
produce no input event -- fingerprint and smartcard readers -- therefore
leave the idle clock running across the entire lock period, and it is
already past its timeouts by the time the session is unlocked.

The visible result is that the screen stays off after a successful
unlock until the user moves the mouse or presses a key, or that the
session locks itself again seconds after being unlocked.

Notifying activity for every seat in unlock() resets the timers the same
way an input event would.

Drafted with AI assistance (Claude Code); the change was reviewed,
built and tested by me on real hardware as described.

Signed-off-by: chris-010 <10660568+chris-010@users.noreply.github.com>
This commit is contained in:
chris-010 2026-08-15 17:36:41 +02:00 • committed by Victoria Brekenfeld
parent 314fc670a8
commit 04026259e0

View file

@ -46,6 +46,11 @@ impl SessionLockHandler for State {
let mut shell = self.common.shell.write();
shell.session_lock = None;
let seats = shell.seats.iter().cloned().collect::<Vec<_>>();
for seat in &seats {
self.common.idle_notifier_state.notify_activity(seat);
}
for output in shell.outputs() {
self.backend.schedule_render(output);
}