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

idle: add option to prevent idle when mpris is playing

This commit is contained in:
bbedward
2025-11-09 11:01:32 -05:00
parent d309957927
commit 1524d27f4c
14 changed files with 559 additions and 74 deletions

View File

@@ -4,6 +4,7 @@ pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import Quickshell.Wayland
import Quickshell.Services.Mpris
import qs.Common
import qs.Services
@@ -18,6 +19,14 @@ Singleton {
}
}
readonly property bool idleInhibitorAvailable: {
try {
return typeof IdleInhibitor !== "undefined"
} catch (e) {
return false
}
}
property bool enabled: true
property bool respectInhibitors: true
property bool _enableGate: true
@@ -28,6 +37,8 @@ Singleton {
readonly property int suspendTimeout: isOnBattery ? SettingsData.batterySuspendTimeout : SettingsData.acSuspendTimeout
readonly property int suspendBehavior: isOnBattery ? SettingsData.batterySuspendBehavior : SettingsData.acSuspendBehavior
readonly property bool mediaPlaying: MprisController.activePlayer !== null
onMonitorTimeoutChanged: _rearmIdleMonitors()
onLockTimeoutChanged: _rearmIdleMonitors()
onSuspendTimeoutChanged: _rearmIdleMonitors()
@@ -45,6 +56,7 @@ Singleton {
property var monitorOffMonitor: null
property var lockMonitor: null
property var suspendMonitor: null
property var mediaInhibitor: null
function wake() {
requestMonitorOn()
@@ -99,6 +111,20 @@ Singleton {
root.requestSuspend()
}
})
if (idleInhibitorAvailable) {
const inhibitorString = `
import QtQuick
import Quickshell.Wayland
IdleInhibitor {
active: false
}
`
mediaInhibitor = Qt.createQmlObject(inhibitorString, root, "IdleService.MediaInhibitor")
mediaInhibitor.active = Qt.binding(() => root.idleInhibitorAvailable && SettingsData.preventIdleForMedia && root.mediaPlaying)
}
} catch (e) {
console.warn("IdleService: Error creating IdleMonitors:", e)
}