[pulseaudio-discuss] [PATCH v3 8/8] stream-restore: skip entries setting action from gnome-control-center

Hui Wang hui.wang at canonical.com
Sun Aug 18 05:32:41 UTC 2019


When users select an output device from gnome-control-center UI, the
sink of this output device will be set to the configured_default_sink
and the default_sink, these actions are expected, but after these
actions, the gnome-control-center will call extension_cb() to modify
the entries in the database, let all stream entries to bind the sink
users select, this is not correct since the sink is default_sink now.

This is a temp fix for this issue, after gnome-control-center fixes
this problem, this patch should be reverted.

Signed-off-by: Hui Wang <hui.wang at canonical.com>
---
 src/modules/module-stream-restore.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c
index 838b7fcaa..161f47fdb 100644
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@ -2057,7 +2057,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
             }
 
             while (!pa_tagstruct_eof(t)) {
-                const char *name, *device;
+                const char *name, *device, *client_name;
                 bool muted;
                 struct entry *entry;
 #ifdef HAVE_DBUS
@@ -2098,7 +2098,17 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
                     entry_free(entry);
                     goto fail;
                 }
-
+                /* When users select an output device from gnome-control-center UI, the gnome-control-center will change all entries
+                 * in the database to bind the sink of this output device, this is not correct since at this moment, the sink is
+                 * default_sink and we shouldn't bind a stream to default_sink via preferred_sink or database.
+                 * After gnome-control-center fix the issue, let us remove this code */
+                client_name = pa_strnull(pa_proplist_gets(pa_native_connection_get_client(c)->proplist, PA_PROP_APPLICATION_PROCESS_BINARY));
+                if (pa_safe_streq(client_name, "gnome-control-center")) {
+                    if (entry->device_valid && m->core->default_sink && pa_safe_streq(device, m->core->default_sink->name)) {
+                        entry_free(entry);
+                        goto fail;
+                    }
+                }
 #ifdef HAVE_DBUS
                 old = entry_read(u, name);
 #endif
-- 
2.17.1



More information about the pulseaudio-discuss mailing list