From 931aca53925f1e89d9e720a1c0b0c3152deaa91d Mon Sep 17 00:00:00 2001 From: outfoxxed Date: Tue, 17 Sep 2024 23:04:06 -0700 Subject: [PATCH] service/pipewire: don't use configured default devices These don't appear to be intended for use by applications, only the non configured ones. This fixes the default device being unset on many computers and the device being lost on actions like headphone unplug which replace it. --- src/services/pipewire/metadata.cpp | 27 ++++----------------------- src/services/pipewire/metadata.hpp | 2 -- 2 files changed, 4 insertions(+), 25 deletions(-) diff --git a/src/services/pipewire/metadata.cpp b/src/services/pipewire/metadata.cpp index 3a64a38d..db0e4dd2 100644 --- a/src/services/pipewire/metadata.cpp +++ b/src/services/pipewire/metadata.cpp @@ -70,22 +70,11 @@ void PwDefaultsMetadata::onMetadataUpdate( ) { if (subject != 0) return; - // non "configured" sinks and sources have lower priority as wireplumber seems to only change - // the "configured" ones. - - bool sink = false; - if (strcmp(key, "default.configured.audio.sink") == 0) { - sink = true; - this->sinkConfigured = true; - } else if ((!this->sinkConfigured && strcmp(key, "default.audio.sink") == 0)) { - sink = true; - } - - if (sink) { + if (strcmp(key, "default.audio.sink") == 0) { this->defaultSinkHolder.setObject(metadata); auto newSink = PwDefaultsMetadata::parseNameSpaJson(value); - qCInfo(logMeta) << "Got default sink" << newSink << "configured:" << this->sinkConfigured; + qCInfo(logMeta) << "Got default sink" << newSink; if (newSink == this->mDefaultSink) return; this->mDefaultSink = newSink; @@ -93,19 +82,11 @@ void PwDefaultsMetadata::onMetadataUpdate( return; } - bool source = false; - if (strcmp(key, "default.configured.audio.source") == 0) { - source = true; - this->sourceConfigured = true; - } else if ((!this->sourceConfigured && strcmp(key, "default.audio.source") == 0)) { - source = true; - } - - if (source) { + if (strcmp(key, "default.audio.source") == 0) { this->defaultSourceHolder.setObject(metadata); auto newSource = PwDefaultsMetadata::parseNameSpaJson(value); - qCInfo(logMeta) << "Got default source" << newSource << "configured:" << this->sourceConfigured; + qCInfo(logMeta) << "Got default source" << newSource; if (newSource == this->mDefaultSource) return; this->mDefaultSource = newSource; diff --git a/src/services/pipewire/metadata.hpp b/src/services/pipewire/metadata.hpp index 4937a747..f57c9c58 100644 --- a/src/services/pipewire/metadata.hpp +++ b/src/services/pipewire/metadata.hpp @@ -55,9 +55,7 @@ private: PwBindableRef defaultSinkHolder; PwBindableRef defaultSourceHolder; - bool sinkConfigured = false; QString mDefaultSink; - bool sourceConfigured = false; QString mDefaultSource; };