From 9f1b76c4cf16db91ad63dc7f7478fcd1d45e9a93 Mon Sep 17 00:00:00 2001 From: Devin Lin Date: Thu, 23 Jun 2022 23:35:54 -0400 Subject: [PATCH] lockscreen: Improve physical keyboard input --- look-and-feel/contents/lockscreen/Keypad.qml | 21 ++----------------- .../contents/lockscreen/LockScreen.qml | 13 +++++++++++- .../contents/lockscreen/PasswordBar.qml | 2 ++ 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/look-and-feel/contents/lockscreen/Keypad.qml b/look-and-feel/contents/lockscreen/Keypad.qml index 6364f6ea..e012b383 100644 --- a/look-and-feel/contents/lockscreen/Keypad.qml +++ b/look-and-feel/contents/lockscreen/Keypad.qml @@ -21,6 +21,8 @@ Rectangle { required property var lockScreenState + property alias passwordBar: passwordBar + // 0 - keypad is not shown, 1 - keypad is shown property double swipeProgress @@ -50,25 +52,6 @@ Rectangle { easing.type: Easing.InOutQuad } } - - // listen for keyboard events - Keys.onPressed: { - if (event.modifiers === Qt.NoModifier) { - if (event.key === Qt.Key_Backspace) { - passwordBar.backspace(); - } else if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) { - passwordBar.enter(); - } else if (event.text != "") { - passwordBar.keyPress(event.text); - } - } - - if (event.modifiers & Qt.ControlModifier) { - if (event.key === Qt.Key_Backspace) { - passwordBar.clear(); - } - } - } RectangularGlow { anchors.topMargin: 1 diff --git a/look-and-feel/contents/lockscreen/LockScreen.qml b/look-and-feel/contents/lockscreen/LockScreen.qml index 20c6bbdc..333eccb8 100644 --- a/look-and-feel/contents/lockscreen/LockScreen.qml +++ b/look-and-feel/contents/lockscreen/LockScreen.qml @@ -29,10 +29,19 @@ PlasmaCore.ColorScope { property bool notificationsShown: false readonly property bool drawerOpen: flickable.openFactor >= 1 + property var passwordBar: keypadLoader.item.passwordBar colorGroup: PlasmaCore.Theme.ComplementaryColorGroup anchors.fill: parent + // listen for keyboard events, and focus on input area + Component.onCompleted: forceActiveFocus(); + Keys.onPressed: { + passwordBar.isPinMode = false; + flickable.goToOpenPosition(); + passwordBar.textField.forceActiveFocus(); + } + // wallpaper blur Loader { anchors.fill: parent @@ -167,6 +176,7 @@ PlasmaCore.ColorScope { // password keypad Loader { + id: keypadLoader width: parent.width asynchronous: true active: !root.lockScreenState.passwordless // only load keypad if not passwordless @@ -174,8 +184,9 @@ PlasmaCore.ColorScope { anchors.bottom: parent.bottom sourceComponent: ColumnLayout { - transform: Translate { y: flickable.keypadHeight - flickable.position } + property alias passwordBar: keypad.passwordBar + transform: Translate { y: flickable.keypadHeight - flickable.position } spacing: 0 // info notification text diff --git a/look-and-feel/contents/lockscreen/PasswordBar.qml b/look-and-feel/contents/lockscreen/PasswordBar.qml index 2fbcbc56..8953b027 100644 --- a/look-and-feel/contents/lockscreen/PasswordBar.qml +++ b/look-and-feel/contents/lockscreen/PasswordBar.qml @@ -20,6 +20,8 @@ Rectangle { required property var lockScreenState + property alias textField: textField + // toggle between pin and password mode property bool isPinMode: true