diff options
Diffstat (limited to 'src/modules/mixer/e_mod_main.c')
-rw-r--r-- | src/modules/mixer/e_mod_main.c | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/src/modules/mixer/e_mod_main.c b/src/modules/mixer/e_mod_main.c index 24692c6e71..7b41488ba2 100644 --- a/src/modules/mixer/e_mod_main.c +++ b/src/modules/mixer/e_mod_main.c @@ -64,6 +64,21 @@ struct _Instance static Context *mixer_context = NULL; static Eina_List *_handlers = NULL; +static Emix_Sink* +current_focused_client_sink_get(void) +{ + E_Client *client = e_client_focused_get(); + if (!client) return NULL; + Eina_List *inputs = client->sinks; + if (eina_list_count(inputs) == 0) return NULL; + E_Client_Volume_Sink *first_vsink = eina_list_data_get(inputs); + if (!first_vsink) return NULL; + Emix_Sink_Input *input = e_client_volume_sink_input_get(first_vsink); + if (!input) return NULL; + + return input->sink; +} + static void _mixer_popup_update(Instance *inst, int mute, int vol) { @@ -108,9 +123,14 @@ _mixer_gadget_update(void) if (inst->list) { + Emix_Sink *current_sink = current_focused_client_sink_get(); + EINA_LIST_FOREACH(elm_list_items_get(inst->list), ll, it) { - if (backend_sink_default_get() == elm_object_item_data_get(it)) + Emix_Sink *sink = elm_object_item_data_get(it); + if (sink == current_sink) + elm_list_item_selected_set(it, EINA_TRUE); + else if (!current_sink && backend_sink_default_get() == elm_object_item_data_get(it)) elm_list_item_selected_set(it, EINA_TRUE); } } @@ -184,6 +204,7 @@ _mixer_sinks_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event E { Instance *inst; Eina_List *l, *ll; + Emix_Sink *current_sink = current_focused_client_sink_get(); EINA_LIST_FOREACH(mixer_context->instances, l, inst) { @@ -199,10 +220,13 @@ _mixer_sinks_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event E it = elm_list_item_append(inst->list, s->name, NULL, NULL, _sink_selected_cb, s); - if (backend_sink_default_get() == s) + if (current_sink == s) + default_it = it; + else if (!current_sink && backend_sink_default_get() == s) default_it = it; } elm_list_go(inst->list); + if (default_it) elm_list_item_selected_set(default_it, EINA_TRUE); } @@ -211,14 +235,16 @@ _mixer_sinks_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event E return ECORE_CALLBACK_PASS_ON; } + static void _popup_new(Instance *inst) { Evas_Object *button, *list, *slider, *bx; - Emix_Sink *s; + Emix_Sink *s, *current_focused_sink; Eina_List *l; Elm_Object_Item *default_it = NULL; + current_focused_sink = current_focused_client_sink_get(); inst->popup = e_gadcon_popup_new(inst->gcc, 0); list = elm_box_add(e_comp->elm); @@ -227,12 +253,15 @@ _popup_new(Instance *inst) evas_object_size_hint_align_set(inst->list, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(inst->list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_show(inst->list); + EINA_LIST_FOREACH((Eina_List *)emix_sinks_get(), l, s) { Elm_Object_Item *it; it = elm_list_item_append(inst->list, s->name, NULL, NULL, _sink_selected_cb, s); - if (backend_sink_default_get() == s) + if (current_focused_sink == s) + default_it = it; + else if (!current_focused_sink && backend_sink_default_get() == s) default_it = it; } elm_list_go(inst->list); |