From 914e48f2d3135bee3ad766e8286fa895def647ba Mon Sep 17 00:00:00 2001 From: Fimeg Date: Mon, 3 Aug 2026 22:20:51 -0400 Subject: [PATCH] shell: locking closes the keyboard, and unlocking does not bring it back MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The hold machinery remembers whether the keyboard was up when the first hold was taken, so releasing the last hold restores rather than clobbers it. Across a lock that restore is wrong: the keyboard was up because of something being typed before the phone went down, and the first thing you see on unlocking is a keyboard sitting over whatever you came back for. Intent to type does not survive the screen going away. Anything that still wants the keyboard — a field taking focus again — asks for it, on the path that already works. --- surfaces/quickshell/GlobalStates.qml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/surfaces/quickshell/GlobalStates.qml b/surfaces/quickshell/GlobalStates.qml index 3a7cc95..89668d5 100644 --- a/surfaces/quickshell/GlobalStates.qml +++ b/surfaces/quickshell/GlobalStates.qml @@ -88,6 +88,25 @@ Singleton { root.oskHolds = []; root.oskHoldRestoreOpen = false; } + + // Locking closes the keyboard, and unlocking does not bring it back. + // + // `oskHoldRestoreOpen` remembers whether the keyboard was up when the + // first hold was taken, so releasing the last hold restores rather than + // clobbers it. Across a lock that restore is wrong: the keyboard was up + // because of something the user was typing into before they put the phone + // down, and the first thing they see on unlocking is a keyboard over + // whatever they actually came back for. + // + // Intent to type does not survive the screen going away. Anything that + // still wants the keyboard — a field taking focus again — will ask for it, + // which is the path that already works. + onScreenLockedChanged: { + if (!root.screenLocked) return; + root.oskHolds = []; + root.oskHoldRestoreOpen = false; + root.oskOpen = false; + } // WRITER: ii overlay module property bool overlayOpen: false // WRITER: ii overview module + Dock.qml IPC