mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-06 05:25:41 -05:00
@@ -4,26 +4,24 @@ pragma ComponentBehavior: Bound
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import Quickshell.Wayland
|
||||
import Quickshell.Services.Mpris
|
||||
import qs.Common
|
||||
import qs.Services
|
||||
|
||||
Singleton {
|
||||
id: root
|
||||
|
||||
readonly property bool idleMonitorAvailable: {
|
||||
try {
|
||||
return typeof IdleMonitor !== "undefined"
|
||||
return typeof IdleMonitor !== "undefined";
|
||||
} catch (e) {
|
||||
return false
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
readonly property bool idleInhibitorAvailable: {
|
||||
try {
|
||||
return typeof IdleInhibitor !== "undefined"
|
||||
return typeof IdleInhibitor !== "undefined";
|
||||
} catch (e) {
|
||||
return false
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,32 +42,37 @@ Singleton {
|
||||
onSuspendTimeoutChanged: _rearmIdleMonitors()
|
||||
|
||||
function _rearmIdleMonitors() {
|
||||
_enableGate = false
|
||||
Qt.callLater(() => { _enableGate = true })
|
||||
_enableGate = false;
|
||||
Qt.callLater(() => {
|
||||
_enableGate = true;
|
||||
});
|
||||
}
|
||||
|
||||
signal lockRequested()
|
||||
signal requestMonitorOff()
|
||||
signal requestMonitorOn()
|
||||
signal requestSuspend()
|
||||
signal lockRequested
|
||||
signal fadeToLockRequested
|
||||
signal cancelFadeToLock
|
||||
signal requestMonitorOff
|
||||
signal requestMonitorOn
|
||||
signal requestSuspend
|
||||
|
||||
property var monitorOffMonitor: null
|
||||
property var lockMonitor: null
|
||||
property var suspendMonitor: null
|
||||
property var mediaInhibitor: null
|
||||
property var lockComponent: null
|
||||
|
||||
function wake() {
|
||||
requestMonitorOn()
|
||||
requestMonitorOn();
|
||||
}
|
||||
|
||||
function createMediaInhibitor() {
|
||||
if (!idleInhibitorAvailable) {
|
||||
return
|
||||
return;
|
||||
}
|
||||
|
||||
if (mediaInhibitor) {
|
||||
mediaInhibitor.destroy()
|
||||
mediaInhibitor = null
|
||||
mediaInhibitor.destroy();
|
||||
mediaInhibitor = null;
|
||||
}
|
||||
|
||||
const inhibitorString = `
|
||||
@@ -79,23 +82,23 @@ Singleton {
|
||||
IdleInhibitor {
|
||||
active: false
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
mediaInhibitor = Qt.createQmlObject(inhibitorString, root, "IdleService.MediaInhibitor")
|
||||
mediaInhibitor.active = Qt.binding(() => root.mediaPlaying)
|
||||
mediaInhibitor = Qt.createQmlObject(inhibitorString, root, "IdleService.MediaInhibitor");
|
||||
mediaInhibitor.active = Qt.binding(() => root.mediaPlaying);
|
||||
}
|
||||
|
||||
function destroyMediaInhibitor() {
|
||||
if (mediaInhibitor) {
|
||||
mediaInhibitor.destroy()
|
||||
mediaInhibitor = null
|
||||
mediaInhibitor.destroy();
|
||||
mediaInhibitor = null;
|
||||
}
|
||||
}
|
||||
|
||||
function createIdleMonitors() {
|
||||
if (!idleMonitorAvailable) {
|
||||
console.info("IdleService: IdleMonitor not available, skipping creation")
|
||||
return
|
||||
console.info("IdleService: IdleMonitor not available, skipping creation");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -108,60 +111,68 @@ Singleton {
|
||||
respectInhibitors: true
|
||||
timeout: 0
|
||||
}
|
||||
`
|
||||
`;
|
||||
|
||||
monitorOffMonitor = Qt.createQmlObject(qmlString, root, "IdleService.MonitorOffMonitor")
|
||||
monitorOffMonitor.enabled = Qt.binding(() => root._enableGate && root.enabled && root.idleMonitorAvailable && root.monitorTimeout > 0)
|
||||
monitorOffMonitor.respectInhibitors = Qt.binding(() => root.respectInhibitors)
|
||||
monitorOffMonitor.timeout = Qt.binding(() => root.monitorTimeout)
|
||||
monitorOffMonitor.isIdleChanged.connect(function() {
|
||||
monitorOffMonitor = Qt.createQmlObject(qmlString, root, "IdleService.MonitorOffMonitor");
|
||||
monitorOffMonitor.enabled = Qt.binding(() => root._enableGate && root.enabled && root.idleMonitorAvailable && root.monitorTimeout > 0);
|
||||
monitorOffMonitor.respectInhibitors = Qt.binding(() => root.respectInhibitors);
|
||||
monitorOffMonitor.timeout = Qt.binding(() => root.monitorTimeout);
|
||||
monitorOffMonitor.isIdleChanged.connect(function () {
|
||||
if (monitorOffMonitor.isIdle) {
|
||||
root.requestMonitorOff()
|
||||
root.requestMonitorOff();
|
||||
} else {
|
||||
root.requestMonitorOn()
|
||||
root.requestMonitorOn();
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
lockMonitor = Qt.createQmlObject(qmlString, root, "IdleService.LockMonitor")
|
||||
lockMonitor.enabled = Qt.binding(() => root._enableGate && root.enabled && root.idleMonitorAvailable && root.lockTimeout > 0)
|
||||
lockMonitor.respectInhibitors = Qt.binding(() => root.respectInhibitors)
|
||||
lockMonitor.timeout = Qt.binding(() => root.lockTimeout)
|
||||
lockMonitor.isIdleChanged.connect(function() {
|
||||
lockMonitor = Qt.createQmlObject(qmlString, root, "IdleService.LockMonitor");
|
||||
lockMonitor.enabled = Qt.binding(() => root._enableGate && root.enabled && root.idleMonitorAvailable && root.lockTimeout > 0);
|
||||
lockMonitor.respectInhibitors = Qt.binding(() => root.respectInhibitors);
|
||||
lockMonitor.timeout = Qt.binding(() => root.lockTimeout);
|
||||
lockMonitor.isIdleChanged.connect(function () {
|
||||
if (lockMonitor.isIdle) {
|
||||
root.lockRequested()
|
||||
if (SettingsData.fadeToLockEnabled) {
|
||||
root.fadeToLockRequested();
|
||||
} else {
|
||||
root.lockRequested();
|
||||
}
|
||||
} else {
|
||||
if (SettingsData.fadeToLockEnabled) {
|
||||
root.cancelFadeToLock();
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
suspendMonitor = Qt.createQmlObject(qmlString, root, "IdleService.SuspendMonitor")
|
||||
suspendMonitor.enabled = Qt.binding(() => root._enableGate && root.enabled && root.idleMonitorAvailable && root.suspendTimeout > 0)
|
||||
suspendMonitor.respectInhibitors = Qt.binding(() => root.respectInhibitors)
|
||||
suspendMonitor.timeout = Qt.binding(() => root.suspendTimeout)
|
||||
suspendMonitor.isIdleChanged.connect(function() {
|
||||
suspendMonitor = Qt.createQmlObject(qmlString, root, "IdleService.SuspendMonitor");
|
||||
suspendMonitor.enabled = Qt.binding(() => root._enableGate && root.enabled && root.idleMonitorAvailable && root.suspendTimeout > 0);
|
||||
suspendMonitor.respectInhibitors = Qt.binding(() => root.respectInhibitors);
|
||||
suspendMonitor.timeout = Qt.binding(() => root.suspendTimeout);
|
||||
suspendMonitor.isIdleChanged.connect(function () {
|
||||
if (suspendMonitor.isIdle) {
|
||||
root.requestSuspend()
|
||||
root.requestSuspend();
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
if (SettingsData.preventIdleForMedia) {
|
||||
createMediaInhibitor()
|
||||
createMediaInhibitor();
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn("IdleService: Error creating IdleMonitors:", e)
|
||||
console.warn("IdleService: Error creating IdleMonitors:", e);
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: root
|
||||
function onRequestMonitorOff() {
|
||||
CompositorService.powerOffMonitors()
|
||||
CompositorService.powerOffMonitors();
|
||||
}
|
||||
|
||||
function onRequestMonitorOn() {
|
||||
CompositorService.powerOnMonitors()
|
||||
CompositorService.powerOnMonitors();
|
||||
}
|
||||
|
||||
function onRequestSuspend() {
|
||||
SessionService.suspendWithBehavior(root.suspendBehavior)
|
||||
SessionService.suspendWithBehavior(root.suspendBehavior);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -169,7 +180,7 @@ Singleton {
|
||||
target: SessionService
|
||||
function onPrepareForSleep() {
|
||||
if (SettingsData.lockBeforeSuspend) {
|
||||
root.lockRequested()
|
||||
root.lockRequested();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -178,19 +189,19 @@ Singleton {
|
||||
target: SettingsData
|
||||
function onPreventIdleForMediaChanged() {
|
||||
if (SettingsData.preventIdleForMedia) {
|
||||
createMediaInhibitor()
|
||||
createMediaInhibitor();
|
||||
} else {
|
||||
destroyMediaInhibitor()
|
||||
destroyMediaInhibitor();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
if (!idleMonitorAvailable) {
|
||||
console.warn("IdleService: IdleMonitor not available - power management disabled. This requires a newer version of Quickshell.")
|
||||
console.warn("IdleService: IdleMonitor not available - power management disabled. This requires a newer version of Quickshell.");
|
||||
} else {
|
||||
console.info("IdleService: Initialized with idle monitoring support")
|
||||
createIdleMonitors()
|
||||
console.info("IdleService: Initialized with idle monitoring support");
|
||||
createIdleMonitors();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user