summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHui Wang <hui.wang@canonical.com>2019-01-17 11:21:45 +0800
committerHui Wang <hui.wang@canonical.com>2019-11-27 12:26:40 +0800
commitf899d5f4669dcd536cc142cee99fe359dd8af3d6 (patch)
tree37009924971a3b35592e3533f6a90a29a76f611e
parent43e3a7f3c32ef78c69e446aad2c55edd5f1b44b9 (diff)
stream-restore: skip entries setting action from gnome-control-center
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@canonical.com>
-rw-r--r--src/modules/module-stream-restore.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c
index 1481058c4..911236e24 100644
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@ -2051,7 +2051,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
@@ -2092,7 +2092,18 @@ 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, 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);
+ pa_pstream_send_tagstruct(pa_native_connection_get_pstream(c), reply);
+ return 0;
+ }
+ }
#ifdef HAVE_DBUS
old = entry_read(u, name);
#endif