From 41828c4180fb921df7992a5405f5ff05d2ac2fff Mon Sep 17 00:00:00 2001 From: outfoxxed Date: Thu, 25 Dec 2025 20:58:05 -0800 Subject: [PATCH] services/pipewire: use node volume controls when routeDevice missing For bluez audio streams and potentially other types of synthetic device, volume controls are managed via the node and persistence is handled by the service. --- changelog/next.md | 1 + src/services/pipewire/node.cpp | 7 +++++-- src/services/pipewire/node.hpp | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/changelog/next.md b/changelog/next.md index 9d8dd04..8a48ba5 100644 --- a/changelog/next.md +++ b/changelog/next.md @@ -26,6 +26,7 @@ set shell id. ## Bug Fixes - Fixed volume control breaking with pipewire pro audio mode. +- Fixed volume control breaking with bluez streams and potentially others. - Fixed escape sequence handling in desktop entries. - Fixed volumes not initializing if a pipewire device was already loaded before its node. - Fixed hyprland active toplevel not resetting after window closes. diff --git a/src/services/pipewire/node.cpp b/src/services/pipewire/node.cpp index d454a46..c34fa17 100644 --- a/src/services/pipewire/node.cpp +++ b/src/services/pipewire/node.cpp @@ -222,8 +222,11 @@ void PwNode::onInfo(void* data, const pw_node_info* info) { self->routeDevice = id; if (self->boundData) self->boundData->onDeviceChanged(); } else { - qCCritical(logNode) << self << "has attached device" << self->device - << "but no card.profile.device property."; + qCDebug( + logNode + ) << self + << "has attached device" << self->device + << "but no card.profile.device property. Node volume control will be used."; } } diff --git a/src/services/pipewire/node.hpp b/src/services/pipewire/node.hpp index e3e1913..45e1551 100644 --- a/src/services/pipewire/node.hpp +++ b/src/services/pipewire/node.hpp @@ -244,7 +244,9 @@ public: qint32 routeDevice = -1; bool proAudio = false; - [[nodiscard]] bool shouldUseDevice() const { return this->device && !this->proAudio; } + [[nodiscard]] bool shouldUseDevice() const { + return this->device && !this->proAudio && this->routeDevice != -1; + } signals: void propertiesChanged();