1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-01-24 21:42:51 -05:00

Merge branch 'master' of github.com:bbedward/DankMaterialShell into notif-work

This commit is contained in:
bbedward
2025-08-12 12:09:02 -04:00

View File

@@ -8,40 +8,95 @@ 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: ["sh", "-c", "loginctl show-session $(loginctl list-sessions --no-legend | awk '{print $1}' | head -1) --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