From 04026259e0707e6c2f2bb0f26e113e48c5cb19fd Mon Sep 17 00:00:00 2001 From: chris-010 <10660568+chris-010@users.noreply.github.com> Date: Sat, 15 Aug 2026 17:36:41 +0200 Subject: [PATCH] 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> --- src/wayland/handlers/session_lock.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/wayland/handlers/session_lock.rs b/src/wayland/handlers/session_lock.rs index 39e1e375..c4e93ec5 100644 --- a/src/wayland/handlers/session_lock.rs +++ b/src/wayland/handlers/session_lock.rs @@ -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::>(); + for seat in &seats { + self.common.idle_notifier_state.notify_activity(seat); + } + for output in shell.outputs() { self.backend.schedule_render(output); }