diff --git a/quickshell/Common/Ref.qml b/quickshell/Common/Ref.qml index 9a466e0e2..0bb9cfa03 100644 --- a/quickshell/Common/Ref.qml +++ b/quickshell/Common/Ref.qml @@ -3,6 +3,7 @@ import Quickshell QtObject { required property Singleton service + property var modules: null property bool active: true property bool _held: false @@ -11,7 +12,15 @@ QtObject { if (wanted === _held) return; _held = wanted; - service.refCount += wanted ? 1 : -1; + if (modules === null) { + service.refCount += wanted ? 1 : -1; + return; + } + if (wanted) { + service.addRef(modules); + return; + } + service.removeRef(modules); } onActiveChanged: sync(active) diff --git a/quickshell/Modules/ControlCenter/Components/HeaderPane.qml b/quickshell/Modules/ControlCenter/Components/HeaderPane.qml index d883d180d..2cbddcbfd 100644 --- a/quickshell/Modules/ControlCenter/Components/HeaderPane.qml +++ b/quickshell/Modules/ControlCenter/Components/HeaderPane.qml @@ -19,8 +19,11 @@ Rectangle { signal settingsButtonClicked signal headerTapped - Component.onCompleted: DgopService.addRef("system") - Component.onDestruction: DgopService.removeRef("system") + Ref { + service: DgopService + modules: "system" + active: root.visible && (root.Window.window?.visible ?? false) + } implicitHeight: 70 radius: Theme.cornerRadius diff --git a/quickshell/Modules/ControlCenter/Details/DiskUsageDetail.qml b/quickshell/Modules/ControlCenter/Details/DiskUsageDetail.qml index 3e5d8c3ab..95ce91a61 100644 --- a/quickshell/Modules/ControlCenter/Details/DiskUsageDetail.qml +++ b/quickshell/Modules/ControlCenter/Details/DiskUsageDetail.qml @@ -20,12 +20,10 @@ Rectangle { border.color: Theme.outlineMedium border.width: Theme.layerOutlineWidth - Component.onCompleted: { - DgopService.addRef(["diskmounts"]); - } - - Component.onDestruction: { - DgopService.removeRef(["diskmounts"]); + Ref { + service: DgopService + modules: ["diskmounts"] + active: root.visible && (root.Window.window?.visible ?? false) } DankFlickable { diff --git a/quickshell/Modules/ControlCenter/Widgets/DiskUsagePill.qml b/quickshell/Modules/ControlCenter/Widgets/DiskUsagePill.qml index d821fb219..5f9afcb21 100644 --- a/quickshell/Modules/ControlCenter/Widgets/DiskUsagePill.qml +++ b/quickshell/Modules/ControlCenter/Widgets/DiskUsagePill.qml @@ -67,11 +67,10 @@ CompoundPill { return Theme.surfaceText; } - Component.onCompleted: { - DgopService.addRef(["diskmounts"]); - } - Component.onDestruction: { - DgopService.removeRef(["diskmounts"]); + Ref { + service: DgopService + modules: ["diskmounts"] + active: root.visible && (root.Window.window?.visible ?? false) } onToggled: { diff --git a/quickshell/Modules/ControlCenter/Widgets/SmallDiskUsageButton.qml b/quickshell/Modules/ControlCenter/Widgets/SmallDiskUsageButton.qml index 564eab5cf..40a9e0bb5 100644 --- a/quickshell/Modules/ControlCenter/Widgets/SmallDiskUsageButton.qml +++ b/quickshell/Modules/ControlCenter/Widgets/SmallDiskUsageButton.qml @@ -117,10 +117,9 @@ Rectangle { onClicked: root.clicked() } - Component.onCompleted: { - DgopService.addRef(["diskmounts"]); - } - Component.onDestruction: { - DgopService.removeRef(["diskmounts"]); + Ref { + service: DgopService + modules: ["diskmounts"] + active: root.visible && (root.Window.window?.visible ?? false) } }