From c9e7e7022b982f0dc05f2e5c16d390c7f0c9bcb2 Mon Sep 17 00:00:00 2001 From: Kiana Sheibani Date: Tue, 11 Nov 2025 00:33:44 -0500 Subject: [PATCH] feat: use Quickshell-internal idle inhibitor This was a pain to set up properly... --- modules/bar/popouts/IdleInhibit.qml | 2 +- modules/ui/UI.qml | 1 + modules/ui/UIState.qml | 5 +++- services/Idle.qml | 41 ++++++++--------------------- 4 files changed, 17 insertions(+), 32 deletions(-) diff --git a/modules/bar/popouts/IdleInhibit.qml b/modules/bar/popouts/IdleInhibit.qml index 68ab17c..f154dd1 100644 --- a/modules/bar/popouts/IdleInhibit.qml +++ b/modules/bar/popouts/IdleInhibit.qml @@ -23,7 +23,7 @@ ColumnLayout { Toggle { label.text: qsTr("Inhibit While Playing Audio") checked: Idle.inhibitPipewire - toggle.onToggled: Idle.toggleInhibitPipewire() + toggle.onToggled: Idle.inhibitPipewire = !Idle.inhibitPipewire } component Toggle: RowLayout { diff --git a/modules/ui/UI.qml b/modules/ui/UI.qml index 7eb2f11..cb7ee66 100644 --- a/modules/ui/UI.qml +++ b/modules/ui/UI.qml @@ -30,6 +30,7 @@ Variants { UIState { id: uiState + window: window screen: scope.modelData } diff --git a/modules/ui/UIState.qml b/modules/ui/UIState.qml index 52c8e5e..038b3fc 100644 --- a/modules/ui/UIState.qml +++ b/modules/ui/UIState.qml @@ -8,12 +8,15 @@ import Quickshell.Hyprland Scope { id: root + required property QtObject window required property ShellScreen screen property alias uiState: uiState PersistentProperties { id: uiState - reloadableId: `uiState-${QsWindow.window.screen.name}` + reloadableId: `uiState-${root.screen.name}` + + readonly property QtObject window: root.window // Open panels property bool dashboard diff --git a/services/Idle.qml b/services/Idle.qml index 794e715..c5bc5fc 100644 --- a/services/Idle.qml +++ b/services/Idle.qml @@ -1,47 +1,28 @@ pragma Singleton +import qs.util import QtQuick import Quickshell -import Quickshell.Io +import Quickshell.Wayland +import Quickshell.Services.Pipewire Singleton { id: root - property alias inhibit: inhibitor.running - property bool inhibitPipewire + property bool inhibit: false + property bool inhibitPipewire: true - function toggleInhibitPipewire() { - root.inhibitPipewire = !root.inhibitPipewire; - pipewireInhibitor.running = true; - } - - // Idle Inhibitor - - Process { + IdleInhibitor { id: inhibitor - command: ["wayland-idle-inhibitor"] + enabled: root.inhibit || + (root.inhibitPipewire && + !!Pipewire.nodes.values.find(node => node.isSink && node.isStream)) + window: null } - // Idle Inhibit on Pipewire - - readonly property string pipewireInhibitorService: "wayland-pipewire-idle-inhibit.service" - Timer { - id: pipewireInhibitorTimer running: true repeat: true - triggeredOnStart: true - onTriggered: pipewireInhibitorCheck.running = true - } - - Process { - id: pipewireInhibitorCheck - command: ["systemctl", "status", "--user", root.pipewireInhibitorService] - onExited: (code, _) => root.inhibitPipewire = (code === 0) - } - - Process { - id: pipewireInhibitor - command: ["systemctl", root.inhibitPipewire ? "start" : "stop", "--user", root.pipewireInhibitorService] + onTriggered: inhibitor.window = States.screens.values().next()?.value?.window } }