mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-11 07:52:50 -05:00
110 lines
2.8 KiB
QML
110 lines
2.8 KiB
QML
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Io
|
|
import qs.Common
|
|
pragma Singleton
|
|
pragma ComponentBehavior: Bound
|
|
|
|
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"
|
|
}
|
|
} |