From 434833e9da16052fb081f36b599fe8f1c7a9f955 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Sun, 7 Mar 2021 11:09:41 +0000 Subject: mixer - properly update default sink and set def sink too in mixer popup mixer popup SAVED the def mixer but never SET it... and this led to a bunch of issues when getting gixed. now its saved and set. NOW the mixer popup has a quick way to select the output sink (device). handy if uyou use usb audio for heapdhones but on board audio for speakers for example (or hdmi audio or something). @fix --- src/modules/mixer/backend.c | 8 ++++++-- src/modules/mixer/lib/backends/pulseaudio/pulse.c | 14 +++++++------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/modules/mixer/backend.c b/src/modules/mixer/backend.c index e705b964af..559fb25142 100644 --- a/src/modules/mixer/backend.c +++ b/src/modules/mixer/backend.c @@ -71,6 +71,7 @@ static void _backend_changed(void); static int _backend_log_domain = 0; static int _volume_init = 0; static Eina_Bool _backend_init_flag = EINA_FALSE; +static Eina_Bool _restored = EINA_FALSE; EINTERN int E_EVENT_MIXER_BACKEND_CHANGED = 0; EINTERN int E_EVENT_MIXER_SINKS_CHANGED = 0; @@ -405,6 +406,7 @@ _disconnected(void) e_client_volume_sink_del(sink); } _sink_default = NULL; + _restored = EINA_FALSE; _backend_changed(); } @@ -421,7 +423,7 @@ _ready(void) _sink_default = emix_sinks_get()->data; } - if (emix_config_save_get()) + if (emix_config_save_get() && !_restored) { Emix_Sink *s; const char *sinkname; @@ -442,6 +444,7 @@ _ready(void) } } emix_config_save_state_restore(); + _restored = EINA_TRUE; } _backend_changed(); @@ -1181,7 +1184,7 @@ backend_init(void) if (!backend_loaded) goto err; if (emix_sink_default_support()) - _sink_default = emix_sink_default_get(); + _sink_default = emix_sink_default_get(); _actions_register(); @@ -1332,6 +1335,7 @@ backend_sink_default_set(const Emix_Sink *s) if (s) { DBG("Sink default set %s", s->name); + emix_sink_default_set((Emix_Sink *)s); emix_config_save_sink_set(s->name); } _backend_changed(); diff --git a/src/modules/mixer/lib/backends/pulseaudio/pulse.c b/src/modules/mixer/lib/backends/pulseaudio/pulse.c index 81743b41cb..ac18a74f0d 100644 --- a/src/modules/mixer/lib/backends/pulseaudio/pulse.c +++ b/src/modules/mixer/lib/backends/pulseaudio/pulse.c @@ -669,7 +669,7 @@ _sink_default_cb(pa_context *c EINA_UNUSED, const pa_sink_info *info, int eol, { Eina_Bool prev_default = sink->base.default_sink; sink->base.default_sink = (uint32_t)sink->idx == info->index; - if (ctx->cb && prev_default != sink->base.default_sink) + if (ctx->cb && (prev_default != sink->base.default_sink)) ctx->cb((void *)ctx->userdata, EMIX_SINK_CHANGED_EVENT, (Emix_Sink *)sink); } @@ -719,11 +719,12 @@ _server_info_cb(pa_context *c, const pa_server_info *info, { pa_operation *o; - if (pa_context_errno(c) != PA_OK) - { - WRN("Could not get pa server info, error: %d", pa_context_errno(c)); - return; - } +// this seems to trap old errors then forget to update defaults as below +// if (pa_context_errno(c) != PA_OK) +// { +// WRN("Could not get pa server info, error: %d", pa_context_errno(c)); +// return; +// } EINA_SAFETY_ON_NULL_RETURN(info); @@ -1359,7 +1360,6 @@ _sink_input_volume_set(Emix_Sink_Input *input, Emix_Volume *volume) pa_cvolume vol = _emix_volume_convert(volume); EINA_SAFETY_ON_FALSE_RETURN(ctx && ctx->context && input != NULL); - if (!(o = pa_context_set_sink_input_volume(ctx->context, sink_input->idx, &vol, NULL, NULL))) -- cgit v1.2.1