aboutsummaryrefslogtreecommitdiff
path: root/modules/system/quickshell/LockContext.qml
diff options
context:
space:
mode:
Diffstat (limited to 'modules/system/quickshell/LockContext.qml')
-rw-r--r--modules/system/quickshell/LockContext.qml58
1 files changed, 58 insertions, 0 deletions
diff --git a/modules/system/quickshell/LockContext.qml b/modules/system/quickshell/LockContext.qml
new file mode 100644
index 0000000..05fd1de
--- /dev/null
+++ b/modules/system/quickshell/LockContext.qml
@@ -0,0 +1,58 @@
+import QtQuick
+import Quickshell
+import Quickshell.Services.Pam
+
+Scope {
+ id: root
+ signal unlocked()
+ signal failed()
+
+ property string currentText: ""
+ property bool unlockInProgress: false
+ property string pamMessage: ""
+ property bool pamError: false
+
+ onCurrentTextChanged: {
+ pamError = false;
+ pamMessage = "";
+ }
+
+ function tryUnlock() {
+ if (currentText === "" || unlockInProgress) return;
+ unlockInProgress = true;
+ pam.start();
+ }
+
+ function reset() {
+ currentText = "";
+ pamError = false;
+ pamMessage = "";
+ unlockInProgress = false;
+ }
+
+ PamContext {
+ id: pam
+ configDirectory: "pam"
+ config: "password.conf"
+
+ onPamMessage: {
+ root.pamMessage = pam.message;
+ root.pamError = pam.messageIsError;
+ if (this.responseRequired) {
+ this.respond(root.currentText);
+ }
+ }
+
+ onCompleted: result => {
+ if (result == PamResult.Success) {
+ root.currentText = "";
+ root.unlocked();
+ } else {
+ root.currentText = "";
+ root.pamError = true;
+ root.failed();
+ }
+ root.unlockInProgress = false;
+ }
+ }
+}