Blame SOURCES/0002-sink-source-update-the-default-sink-source-on-port-s.patch

43a070
From 1e13b722545a23699479bb177648f30f7be396ca Mon Sep 17 00:00:00 2001
43a070
From: Tanu Kaskinen <tanuk@iki.fi>
43a070
Date: Sun, 7 May 2017 12:12:39 +0300
43a070
Subject: [PATCH 2/4] sink, source: update the default sink/source on port
43a070
 switches
43a070
43a070
When sinks are compared during the default sink selection, the active
43a070
port's availability is inspected. Therefore, the default sink should be
43a070
updated when the active port changes, because the new port may have
43a070
different availability status than the old port.
43a070
43a070
For example, let's say that a laptop has an analog sink with a speaker
43a070
and a headphone port, and headphones are initially plugged in, so both
43a070
ports can be used[1]. The headphone port is initially the active port.
43a070
There's also a null sink in the system. When the headphones are
43a070
unplugged, the headphone port becomes unavailable, and the null sink
43a070
becomes the new default sink. Then module-switch-on-connect changes the
43a070
analog sink port to speakers. Now the default sink should change back to
43a070
the analog sink, but that doesn't happen without this patch.
43a070
43a070
[1] Actually we currently mark speakers as unavailable when headphones
43a070
are plugged in, but that's not strictly necessary. My example relies on
43a070
both ports being available initially, so the bug can't be reproduced
43a070
with the current mixer configuration.
43a070
---
43a070
 src/pulsecore/sink.c   | 3 +++
43a070
 src/pulsecore/source.c | 3 +++
43a070
 2 files changed, 6 insertions(+)
43a070
43a070
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
43a070
index aa2182220..ebb13c2c9 100644
43a070
--- a/src/pulsecore/sink.c
43a070
+++ b/src/pulsecore/sink.c
43a070
@@ -3355,6 +3355,9 @@ int pa_sink_set_port(pa_sink *s, const char *name, bool save) {
43a070
 
43a070
     pa_sink_set_port_latency_offset(s, s->active_port->latency_offset);
43a070
 
43a070
+    /* The active port affects the default sink selection. */
43a070
+    pa_core_update_default_sink(s->core);
43a070
+
43a070
     pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SINK_PORT_CHANGED], s);
43a070
 
43a070
     return 0;
43a070
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
43a070
index 8ce781804..3f0f53b52 100644
43a070
--- a/src/pulsecore/source.c
43a070
+++ b/src/pulsecore/source.c
43a070
@@ -2630,6 +2630,9 @@ int pa_source_set_port(pa_source *s, const char *name, bool save) {
43a070
     s->active_port = port;
43a070
     s->save_port = save;
43a070
 
43a070
+    /* The active port affects the default source selection. */
43a070
+    pa_core_update_default_source(s->core);
43a070
+
43a070
     pa_source_set_port_latency_offset(s, s->active_port->latency_offset);
43a070
 
43a070
     pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SOURCE_PORT_CHANGED], s);
43a070
-- 
43a070
2.14.3
43a070