From a1917d19bebf407ba68d4f3e7302dda5ae8a5502 Mon Sep 17 00:00:00 2001 From: CratusGod <117301615+CratusGod@users.noreply.github.com> Date: Thu, 5 Nov 2026 17:35:31 +0700 Subject: [PATCH] [ryoku] audio: merge the duplicate onSinkChanged handlers 1b2d040 added a second onSinkChanged to services/Audio.qml beside the existing bluez card refresh. QML rejects a handler set twice ("Property value set multiple times"), so the shell died at launch on 1.8.8. One handler now restarts the list settle and refreshes the bluez card. Note: Fixed: The shell starts again on 1.8.8 instead of dying at launch on Audio.qml --- ryoku/shell/CHANGELOG.md | 3 +++ ryoku/shell/quickshell/shell/services/Audio.qml | 7 +++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ryoku/shell/CHANGELOG.md b/ryoku/shell/CHANGELOG.md index 7a48e990a..087f7d22c 100644 --- a/ryoku/shell/CHANGELOG.md +++ b/ryoku/shell/CHANGELOG.md @@ -1,6 +1,9 @@ # Changelog: ryoku/shell/ ## Unreleased +- **The shell starts again after the visualizer sink fix.** `services/Audio.qml` + declared `onSinkChanged` twice, which QML rejects as "Property value set + multiple times", so the shell died at launch. The two handlers are now one. - **Visualizers follow newly connected audio outputs.** Bar and desktop visualizers retarget when the default output changes without a shell reload. - **A crashed lock screen comes back after display-link churn.** Once qylock has diff --git a/ryoku/shell/quickshell/shell/services/Audio.qml b/ryoku/shell/quickshell/shell/services/Audio.qml index 119340ac4..75688ba27 100644 --- a/ryoku/shell/quickshell/shell/services/Audio.qml +++ b/ryoku/shell/quickshell/shell/services/Audio.qml @@ -162,7 +162,11 @@ Singleton { onLiveCaptureStreamsChanged: listSettle.restart() onLiveLinksChanged: listSettle.restart() - onSinkChanged: listSettle.restart() + onSinkChanged: { + listSettle.restart(); + if (root.sinkIsBluez) + root.refreshBtCard(); + } Component.onCompleted: root.syncAudioLists() function setOutput(n) { if (n) Pipewire.preferredDefaultAudioSink = n; } @@ -235,7 +239,6 @@ Singleton { readonly property bool sinkIsBluez: root.isBluez(root.sink) onSinkIsBluezChanged: root.refreshBtCard() - onSinkChanged: if (root.sinkIsBluez) root.refreshBtCard() // MAC from a bluez node name (bluez_output..), colon-formatted. function btMac(n) {