mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-11 07:52:50 -05:00
110 lines
2.7 KiB
QML
110 lines
2.7 KiB
QML
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Io
|
|
import qs.Common
|
|
pragma Singleton
|
|
|
|
pragma ComponentBehavior
|
|
|
|
Singleton {
|
|
id: root
|
|
|
|
property bool inhibitorAvailable: true
|
|
property bool idleInhibited: false
|
|
property string inhibitReason: "Keep system awake"
|
|
|
|
signal inhibitorChanged
|
|
|
|
function enableIdleInhibit() {
|
|
if (idleInhibited)
|
|
return
|
|
idleInhibited = true
|
|
inhibitorChanged()
|
|
}
|
|
|
|
function disableIdleInhibit() {
|
|
if (!idleInhibited)
|
|
return
|
|
idleInhibited = false
|
|
inhibitorChanged()
|
|
}
|
|
|
|
function toggleIdleInhibit() {
|
|
if (idleInhibited) {
|
|
disableIdleInhibit()
|
|
} else {
|
|
enableIdleInhibit()
|
|
}
|
|
}
|
|
|
|
function setInhibitReason(reason) {
|
|
inhibitReason = reason
|
|
|
|
if (idleInhibited) {
|
|
const wasActive = idleInhibited
|
|
idleInhibited = false
|
|
|
|
Qt.callLater(() => {
|
|
if (wasActive)
|
|
idleInhibited = true
|
|
})
|
|
}
|
|
}
|
|
|
|
Process {
|
|
id: idleInhibitProcess
|
|
|
|
command: {
|
|
if (!idleInhibited) {
|
|
return ["true"]
|
|
}
|
|
|
|
return ["systemd-inhibit", "--what=idle", "--who=quickshell", "--why="
|
|
+ inhibitReason, "--mode=block", "sleep", "infinity"]
|
|
}
|
|
|
|
running: idleInhibited
|
|
|
|
onExited: function (exitCode) {
|
|
if (idleInhibited && exitCode !== 0) {
|
|
console.warn("IdleInhibitorService: Inhibitor process crashed with exit code:",
|
|
exitCode)
|
|
idleInhibited = false
|
|
ToastService.showWarning("Idle inhibitor failed")
|
|
}
|
|
}
|
|
}
|
|
|
|
IpcHandler {
|
|
function toggle(): string {
|
|
root.toggleIdleInhibit()
|
|
return root.idleInhibited ? "Idle inhibit enabled" : "Idle inhibit disabled"
|
|
}
|
|
|
|
function enable(): string {
|
|
root.enableIdleInhibit()
|
|
return "Idle inhibit enabled"
|
|
}
|
|
|
|
function disable(): string {
|
|
root.disableIdleInhibit()
|
|
return "Idle inhibit disabled"
|
|
}
|
|
|
|
function status(): string {
|
|
return root.idleInhibited ? "Idle inhibit is enabled" : "Idle inhibit is disabled"
|
|
}
|
|
|
|
function reason(newReason: string): string {
|
|
if (!newReason) {
|
|
return "Current reason: " + root.inhibitReason
|
|
}
|
|
|
|
root.setInhibitReason(newReason)
|
|
return "Inhibit reason set to: " + newReason
|
|
}
|
|
|
|
target: "inhibit"
|
|
}
|
|
}
|