From 325523b06a3b34d1b759b582a2db33a8013d7517 Mon Sep 17 00:00:00 2001
From: Chris Robinson <chris.kcat@gmail.com>
Date: Thu, 26 Aug 2021 23:26:42 -0700
Subject: Fix when a PipeWire metadata property is being cleared

---
 alc/backends/pipewire.cpp | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

(limited to 'alc/backends/pipewire.cpp')

diff --git a/alc/backends/pipewire.cpp b/alc/backends/pipewire.cpp
index 096997c4..1847e866 100644
--- a/alc/backends/pipewire.cpp
+++ b/alc/backends/pipewire.cpp
@@ -717,6 +717,13 @@ int MetadataProxy::propertyCallback(uint32_t id, const char *key, const char *ty
         return 0;
     }
 
+    if(!type)
+    {
+        TRACE("Default %s device cleared\n", isCapture ? "capture" : "playback");
+        if(!isCapture) DefaultSinkDev.clear();
+        else DefaultSourceDev.clear();
+        return 0;
+    }
     if(std::strcmp(type, "Spa:String:JSON") != 0)
     {
         ERR("Unexpected %s property type: %s\n", key, type);
@@ -859,7 +866,7 @@ void EventManager::addCallback(uint32_t id, uint32_t, const char *type, uint32_t
     }
     else if(std::strcmp(type, PW_TYPE_INTERFACE_Metadata) == 0)
     {
-        const char *data_class{spa_dict_lookup(props, "metadata.name")};
+        const char *data_class{spa_dict_lookup(props, PW_KEY_METADATA_NAME)};
         if(!data_class) return;
 
         if(std::strcmp(data_class, "default") != 0)
-- 
cgit v1.2.3