From 14d4d05acc235ab7033316d16530783c90e95faa Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Fri, 5 Sep 2025 23:31:35 +0200 Subject: ... --- .../gkleen@sif/shell/quickshell/displaymanager.qml | 115 +++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 accounts/gkleen@sif/shell/quickshell/displaymanager.qml (limited to 'accounts/gkleen@sif/shell/quickshell/displaymanager.qml') diff --git a/accounts/gkleen@sif/shell/quickshell/displaymanager.qml b/accounts/gkleen@sif/shell/quickshell/displaymanager.qml new file mode 100644 index 00000000..b452c03d --- /dev/null +++ b/accounts/gkleen@sif/shell/quickshell/displaymanager.qml @@ -0,0 +1,115 @@ +//@ pragma UseQApplication + +import Quickshell +import Quickshell.Wayland +import Quickshell.Io +import Quickshell.Services.Greetd +import QtQml + + +ShellRoot { + id: displaymanager + + settings.watchFiles: false + + property string currentText: "" + property string username: @username@ + property list command: @niri_session@ + property list messages: [] + property bool responseRequired: false + property bool responseVisible: false + + signal startAuth() + + onStartAuth: { + if (Greetd.state !== GreetdState.Inactive) + Greetd.cancelSession(); + displaymanager.messages = []; + Greetd.createSession(displaymanager.username); + } + + Connections { + target: Greetd + function onStateChanged() { + console.log("greetd state: ", GreetdState.toString(Greetd.state)); + if (Greetd.state === GreetdState.ReadyToLaunch) + Greetd.launch(displaymanager.command); + } + function onAuthMessage(message: string, error: bool, responseRequired: bool, echoResponse: bool) { + displaymanager.responseVisible = echoResponse; + displaymanager.responseRequired = responseRequired; + displaymanager.messages = Array.from(displaymanager.messages).concat([{ "text": message, "error": error }]); + } + function onAuthFailure(message: string) { + displaymanager.responseRequired = false; + displaymanager.messages = Array.from(displaymanager.messages).concat([{ "text": message, "error": true }]); + } + } + + Component.onCompleted: { + if (Greetd.state !== GreetdState.Inactive) + Greetd.cancelSession(); + } + + Variants { + model: Quickshell.screens + + delegate: Scope { + id: screenScope + + required property var modelData + + PanelWindow { + color: "black" + + screen: screenScope.modelData + + WlrLayershell.keyboardFocus: WlrKeyboardFocus.Exclusive + + anchors.top: true + anchors.bottom: true + anchors.left: true + anchors.right: true + + LockSurface { + id: surfaceContent + + screen: screenScope.modelData + + onCurrentTextChanged: displaymanager.currentText = currentText + Connections { + target: displaymanager + function onCurrentTextChanged() { surfaceContent.currentText = displaymanager.currentText; } + function onMessagesChanged() { surfaceContent.messages = Array.from(displaymanager.messages); } + function onResponseRequiredChanged() { surfaceContent.responseRequired = displaymanager.responseRequired; } + function onResponseVisibleChanged() { surfaceContent.responseVisible = displaymanager.responseVisible; } + } + + onResponse: responseText => Greetd.respond(responseText); + Connections { + target: Greetd + function onStateChanged() { + if (Greetd.state === GreetdState.Authenticating) { + surfaceContent.authRunning = true; + } else { + surfaceContent.authRunning = false; + } + } + } + + onAuthRunningChanged: { + if (surfaceContent.authRunning && Greetd.state !== GreetdState.Authenticating) + displaymanager.startAuth(); + } + Component.onCompleted: { + surfaceContent.authRunning = Greetd.state === GreetdState.Authenticating + surfaceContent.messages = Array.from(displaymanager.messages); + surfaceContent.responseVisible = displaymanager.responseVisible; + surfaceContent.responseRequired = displaymanager.responseRequired; + surfaceContent.currentText = displaymanager.currentText; + } + } + } + } + } +} -- cgit v1.2.3