diff --git a/modules/lock/LockSurface.qml b/modules/lock/LockSurface.qml index daa4b3c..a7c67b9 100644 --- a/modules/lock/LockSurface.qml +++ b/modules/lock/LockSurface.qml @@ -139,14 +139,26 @@ WlSessionLockSurface { } } - // Keyboard input - focus lives on an Item since WlSessionLockSurface is a window + // Keyboard input - focus lives on an Item since WlSessionLockSurface is a window. + // Aggressively reclaim focus: Component.onCompleted may fire before the surface + // is configured, and other items can steal activeFocus during layout. Item { + id: _keyInput anchors.fill: parent focus: true Keys.onPressed: event => { if (!root._unlocking) root.auth.handleKey(event); } + onActiveFocusChanged: { + if (!activeFocus) + forceActiveFocus(); + } + } + + onVisibleChanged: { + if (visible) + _keyInput.forceActiveFocus(); } // Unlock animation diff --git a/nix/package.nix b/nix/package.nix index a6a585e..dcdef43 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -5,6 +5,7 @@ quickshell, qt6, nova-stats, + glib, }: stdenvNoCC.mkDerivation { pname = "nova-shell"; @@ -34,7 +35,12 @@ stdenvNoCC.mkDerivation { mkdir -p $out/bin makeWrapper ${lib.getExe quickshell} $out/bin/nova-shell \ --add-flags "-p $out/share/nova-shell/shell.qml" \ - --prefix PATH : ${lib.makeBinPath [ nova-stats ]} + --prefix PATH : ${ + lib.makeBinPath [ + nova-stats + glib + ] + } runHook postInstall '';