import Quickshell import Quickshell.Wayland import Quickshell.Io import Quickshell.Services.Pam import QtQml Scope { id: lockscreen property string currentText: "" PamContext { id: pam property list messages: [] config: "quickshell" onCompleted: result => { if (result === PamResult.Success) { lock.locked = false; } } onPamMessage: { messages = Array.from(messages).concat([{ "text": pam.message, "error": pam.messageIsError }]) } onActiveChanged: { messages = []; } } IpcHandler { target: "Lockscreen" function setLocked(locked: bool): void { lock.locked = locked; } function getLocked(): bool { return lock.locked; } } WlSessionLock { id: lock onLockedChanged: { if (!locked && pam.active) pam.abort(); } WlSessionLockSurface { id: lockSurface color: "black" LockSurface { id: surfaceContent onResponse: responseText => pam.respond(responseText) onAuthRunningChanged: { if (authRunning) pam.start(); } Connections { target: pam function onMessagesChanged() { surfaceContent.messages = pam.messages; } function onResponseRequiredChanged() { surfaceContent.responseRequired = pam.responseRequired; } function onActiveChanged() { surfaceContent.authRunning = pam.active; } } onCurrentTextChanged: lockscreen.currentText = currentText Connections { target: lockscreen function onCurrentTextChanged() { surfaceContent.currentText = lockscreen.currentText; } } Connections { target: lockSurface function onScreenChanged() { surfaceContent.screen = lockSurface.screen; } } } } } }