stream-restore: skip entries set on source from gnome-control-center
authorHui Wang <hui.wang@canonical.com>
Sat, 7 Dec 2019 05:04:39 +0000 (13:04 +0800)
committerTanu Kaskinen <tanuk@iki.fi>
Sat, 14 Dec 2019 18:40:19 +0000 (18:40 +0000)
When users select an input device from gnome-control-center UI, the
source of this input device will be set to the
configured_default_source and the default_source, 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 source users select, this is not correct since the
source is default_source 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@canonical.com>
src/modules/module-stream-restore.c

index 9a66bef3725a0ee9fa0424acff26c4c63646702f..6a42466cbee4351bb6e9874b98a4d1f0490f2c3f 100644 (file)
@@ -1987,11 +1987,13 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
                 }
                 /* When users select an output device from gnome-control-center, 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.
+                 * default_sink and we shouldn't bind a stream to default_sink via preferred_sink or database. This also applies
+                 * to source, default_source and preferred_source.
                  * 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)) {
+                    if (entry->device_valid && ((m->core->default_sink && pa_safe_streq(device, m->core->default_sink->name)) ||
+                       (m->core->default_source && pa_safe_streq(device, m->core->default_source->name)))) {
                         entry_free(entry);
                         pa_pstream_send_tagstruct(pa_native_connection_get_pstream(c), reply);
                         return 0;