diff --git a/shell/modules/IdleInhibitorModule.qml b/shell/modules/IdleInhibitorModule.qml index 81508a9..4cda17d 100644 --- a/shell/modules/IdleInhibitorModule.qml +++ b/shell/modules/IdleInhibitorModule.qml @@ -1,51 +1,31 @@ import QtQuick import Quickshell -import Quickshell.Io import "." as M import "../services" as S M.BarIcon { id: root - color: root.active ? S.Theme.base09 : root.accentColor + color: S.IdleInhibitService.active ? S.Theme.base09 : root.accentColor tooltip: { - const parts = ["Idle inhibition: " + (root.active ? "active" : "inactive")]; - if (root._inhibitors) - parts.push(root._inhibitors); + const parts = ["Idle inhibition: " + (S.IdleInhibitService.active ? "active" : "inactive")]; + if (S.IdleInhibitService.inhibitors) + parts.push(S.IdleInhibitService.inhibitors); return parts.join("\n"); } - property bool active: false - property string _inhibitors: "" - - icon: root.active ? "\uF06E" : "\uF070" - - Process { - id: inhibitor - command: ["systemd-inhibit", "--what=idle", "--who=nova-shell", "--why=user", "sleep", "infinity"] - running: root.active - } - - // Poll current inhibitors - Process { - id: listProc - running: true - command: ["sh", "-c", "systemd-inhibit --list 2>/dev/null | grep -i idle | awk '{print $NF}' | sort -u | tr '\\n' ', ' | sed 's/, $//'"] - stdout: StdioCollector { - onStreamFinished: root._inhibitors = text.trim() ? "Blocked by: " + text.trim() : "" - } - } + icon: S.IdleInhibitService.active ? "\uF06E" : "\uF070" Timer { interval: 5000 running: root._hovered repeat: true triggeredOnStart: true - onTriggered: listProc.running = true + onTriggered: S.IdleInhibitService.refreshInhibitors() } MouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor - onClicked: root.active = !root.active + onClicked: S.IdleInhibitService.toggle() } } diff --git a/shell/services/IdleInhibitService.qml b/shell/services/IdleInhibitService.qml new file mode 100644 index 0000000..f74878e --- /dev/null +++ b/shell/services/IdleInhibitService.qml @@ -0,0 +1,31 @@ +pragma Singleton + +import QtQuick +import Quickshell.Io + +QtObject { + id: root + + property bool active: false + property string inhibitors: "" + + function toggle() { + active = !active; + } + + function refreshInhibitors() { + _listProc.running = true; + } + + property Process _inhibitor: Process { + command: ["systemd-inhibit", "--what=idle", "--who=nova-shell", "--why=user", "sleep", "infinity"] + running: root.active + } + + property Process _listProc: Process { + command: ["sh", "-c", "systemd-inhibit --list 2>/dev/null | grep -i idle | awk '{print $NF}' | sort -u | tr '\\n' ', ' | sed 's/, $//'"] + stdout: StdioCollector { + onStreamFinished: root.inhibitors = text.trim() ? "Blocked by: " + text.trim() : "" + } + } +} diff --git a/shell/services/qmldir b/shell/services/qmldir index 59fb32a..57dad10 100644 --- a/shell/services/qmldir +++ b/shell/services/qmldir @@ -11,3 +11,4 @@ singleton BacklightService 1.0 BacklightService.qml singleton MprisService 1.0 MprisService.qml singleton NetworkService 1.0 NetworkService.qml singleton BluetoothService 1.0 BluetoothService.qml +singleton IdleInhibitService 1.0 IdleInhibitService.qml