1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2025-12-07 05:55:37 -05:00

monitor logind dbus events

This commit is contained in:
bbedward
2025-08-12 12:00:56 -04:00
parent f3bf7de377
commit 87af4fc325

View File

@@ -8,39 +8,94 @@ import qs.Common
Item {
id: root
property string sid: Quickshell.env("XDG_SESSION_ID") || "self"
property string sessionPath: ""
function activate() {
loader.activeAsync = true
}
function checkLockedOnStartup() {
lockStateChecker.running = true
}
Component.onCompleted: {
checkLockedOnStartup()
getSessionPath.running = true
}
Process {
id: lockStateChecker
command: ["loginctl", "show-session", Quickshell.env("XDG_SESSION_ID"), "--property=LockedHint"]
id: getSessionPath
command: ["gdbus", "call", "--system", "--dest", "org.freedesktop.login1", "--object-path", "/org/freedesktop/login1", "--method", "org.freedesktop.login1.Manager.GetSession", sid]
running: false
onExited: (exitCode, exitStatus) => {
if (exitCode !== 0) {
console.warn("Failed to check session lock state, exit code:", exitCode)
}
}
stdout: StdioCollector {
onStreamFinished: {
if (text.trim() === "LockedHint=yes") {
const match = text.match(/objectpath '([^']+)'/)
if (match) {
root.sessionPath = match[1]
console.log("Found session path:", root.sessionPath)
checkCurrentLockState.running = true
lockStateMonitor.running = true
} else {
console.warn("Could not determine session path")
}
}
}
onExited: (exitCode, exitStatus) => {
if (exitCode !== 0) {
console.warn("Failed to get session path, exit code:", exitCode)
}
}
}
Process {
id: checkCurrentLockState
command: root.sessionPath ? ["gdbus", "call", "--system", "--dest", "org.freedesktop.login1", "--object-path", root.sessionPath, "--method", "org.freedesktop.DBus.Properties.Get", "org.freedesktop.login1.Session", "LockedHint"] : []
running: false
stdout: StdioCollector {
onStreamFinished: {
if (text.includes("true")) {
console.log("Session is locked on startup, activating lock screen")
loader.activeAsync = true
}
}
}
onExited: (exitCode, exitStatus) => {
if (exitCode !== 0) {
console.warn("Failed to check initial lock state, exit code:", exitCode)
}
}
}
Process {
id: lockStateMonitor
command: root.sessionPath ? ["gdbus", "monitor", "--system", "--dest", "org.freedesktop.login1", "--object-path", root.sessionPath] : []
running: false
stdout: StdioCollector {
onRead: (chunk) => {
if (chunk.includes("LockedHint") && chunk.includes("true")) {
console.log("login1: LockedHint=true -> show lock")
loader.activeAsync = true
} else if (chunk.includes("LockedHint") && chunk.includes("false")) {
console.log("login1: LockedHint=false -> hide lock")
loader.active = false
}
}
onStreamFinished: {
console.warn("gdbus monitor ended, restarting...")
Qt.callLater(() => {
if (root.sessionPath) lockStateMonitor.running = true
})
}
}
onExited: (exitCode, exitStatus) => {
if (exitCode !== 0) {
console.warn("gdbus monitor failed, exit code:", exitCode)
}
}
}
LazyLoader {
id: loader