forked from enlightenment/enlightenment
mixer: cleanup card and channel selection code path
_populate_channel_editor: use app->sys_card_name instead of e_mod_mixer_card_name_get _populate_channels: select default channel or first one _create_cards: do not reselect card and channel e_mixer_app_dialog_select: cleanup, remove unused _find_card_by_name and _find_channel_by_name _mixer_popup_cb_mixer: do not modifiy current selection on popup
This commit is contained in:
parent
01e98a4534
commit
46230e204c
|
@ -5,7 +5,7 @@ extern const char _e_mixer_Name[];
|
|||
typedef struct E_Mixer_App_Dialog_Data
|
||||
{
|
||||
E_Mixer_System *sys;
|
||||
const char *card;
|
||||
const char *sys_card_name;
|
||||
const char *channel_name;
|
||||
int lock_sliders;
|
||||
Eina_List *cards;
|
||||
|
@ -161,19 +161,14 @@ _populate_channel_editor(E_Mixer_App_Dialog_Data *app)
|
|||
{
|
||||
struct e_mixer_app_ui_channel_editor *ui = &app->ui.channel_editor;
|
||||
E_Mixer_Channel_State state;
|
||||
const char *card_name;
|
||||
|
||||
card_name = e_mod_mixer_card_name_get(app->card);
|
||||
|
||||
if (!card_name)
|
||||
if ((!app->sys_card_name) || (!app->channel_name))
|
||||
{
|
||||
_disable_channel_editor(app);
|
||||
return;
|
||||
}
|
||||
|
||||
e_widget_entry_text_set(ui->card, card_name);
|
||||
eina_stringshare_del(card_name);
|
||||
|
||||
e_widget_entry_text_set(ui->card, app->sys_card_name);
|
||||
e_widget_entry_text_set(ui->channel, app->channel_name);
|
||||
|
||||
if (e_mod_mixer_channel_is_boost(app->channel_info))
|
||||
|
@ -257,7 +252,7 @@ _populate_channels(E_Mixer_App_Dialog_Data *app)
|
|||
Eina_List *l;
|
||||
Evas_Object *ilist;
|
||||
int header_input;
|
||||
int i;
|
||||
int i, selected;
|
||||
|
||||
ilist = app->ui.channels.list;
|
||||
edje_freeze();
|
||||
|
@ -266,18 +261,16 @@ _populate_channels(E_Mixer_App_Dialog_Data *app)
|
|||
|
||||
if (app->sys)
|
||||
e_mod_mixer_del(app->sys);
|
||||
app->sys = e_mod_mixer_new(app->card);
|
||||
app->sys = e_mod_mixer_new(app->sys_card_name);
|
||||
if (_mixer_using_default)
|
||||
e_mixer_system_callback_set(app->sys, _cb_system_update, app);
|
||||
|
||||
eina_stringshare_del(app->channel_name);
|
||||
app->channel_name = e_mod_mixer_channel_default_name_get(app->sys);
|
||||
|
||||
if (app->channel_infos)
|
||||
e_mod_mixer_channel_infos_free(app->channel_infos);
|
||||
app->channel_infos = e_mod_mixer_channel_infos_get(app->sys);
|
||||
|
||||
i = 0;
|
||||
selected = 0;
|
||||
header_input = 0;
|
||||
for (l = app->channel_infos; l; l = l->next, i++)
|
||||
{
|
||||
|
@ -300,33 +293,29 @@ _populate_channels(E_Mixer_App_Dialog_Data *app)
|
|||
info->app = app;
|
||||
e_widget_ilist_append(ilist, NULL, info->name, _cb_channel_selected,
|
||||
info, info->name);
|
||||
if (app->channel_name && info->name &&
|
||||
if ((selected == 0) && app->channel_name && info->name &&
|
||||
(strcmp(app->channel_name, info->name) == 0))
|
||||
{
|
||||
e_widget_ilist_selected_set(ilist, i);
|
||||
app->channel_info = info;
|
||||
selected = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ((selected == 0) && (i > 0))
|
||||
e_widget_ilist_selected_set(ilist, 0);
|
||||
else
|
||||
app->channel_name = NULL;
|
||||
|
||||
e_widget_ilist_go(ilist);
|
||||
e_widget_ilist_thaw(ilist);
|
||||
edje_thaw();
|
||||
}
|
||||
|
||||
static void
|
||||
select_card(E_Mixer_App_Dialog_Data *app)
|
||||
{
|
||||
_populate_channels(app);
|
||||
if (e_widget_ilist_count(app->ui.channels.list) > 0)
|
||||
e_widget_ilist_selected_set(app->ui.channels.list, 1);
|
||||
else
|
||||
_disable_channel_editor(app);
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_card_selected(void *data)
|
||||
{
|
||||
select_card(data);
|
||||
_populate_channels(data);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -336,12 +325,11 @@ _create_cards(E_Dialog *dialog __UNUSED__, Evas *evas, E_Mixer_App_Dialog_Data *
|
|||
const char *card;
|
||||
Eina_List *l;
|
||||
|
||||
app->card = e_mod_mixer_card_default_get();
|
||||
app->cards = e_mod_mixer_card_names_get();
|
||||
if (eina_list_count(app->cards) < 2)
|
||||
return;
|
||||
|
||||
ui->list = e_widget_ilist_add(evas, 32, 32, &app->card);
|
||||
ui->list = e_widget_ilist_add(evas, 32, 32, &app->sys_card_name);
|
||||
e_widget_size_min_set(ui->list, 180, 100);
|
||||
e_widget_ilist_go(ui->list);
|
||||
EINA_LIST_FOREACH(app->cards, l, card)
|
||||
|
@ -442,12 +430,6 @@ _create_ui(E_Dialog *dialog, E_Mixer_App_Dialog_Data *app)
|
|||
_create_channels(dialog, evas, app);
|
||||
_create_channel_editor(dialog, evas, app);
|
||||
|
||||
if (ui->cards.list)
|
||||
e_widget_ilist_selected_set(ui->cards.list, 0);
|
||||
else
|
||||
select_card(app);
|
||||
e_widget_ilist_selected_set(ui->channels.list, 1);
|
||||
|
||||
e_widget_size_min_get(ui->hlayout, &mw, &mh);
|
||||
if (mw < 300)
|
||||
mw = 300;
|
||||
|
@ -462,8 +444,9 @@ _mixer_app_dialog_del(E_Dialog *dialog, E_Mixer_App_Dialog_Data *app)
|
|||
if (app->del.func)
|
||||
app->del.func(dialog, app->del.data);
|
||||
|
||||
eina_stringshare_del(app->card);
|
||||
eina_stringshare_del(app->channel_name);
|
||||
if ((!app->ui.cards.list) && (app->ui.channels.list))
|
||||
eina_stringshare_del(app->sys_card_name);
|
||||
|
||||
if (app->cards)
|
||||
e_mod_mixer_card_names_free(app->cards);
|
||||
if (app->channel_infos)
|
||||
|
@ -527,77 +510,49 @@ e_mixer_app_dialog_new(E_Container *con, void (*func)(E_Dialog *dialog, void *da
|
|||
return dialog;
|
||||
}
|
||||
|
||||
static inline int
|
||||
_find_card_by_name(E_Mixer_App_Dialog_Data *app, const char *card_name)
|
||||
{
|
||||
Eina_List *l;
|
||||
int i;
|
||||
|
||||
if (!card_name)
|
||||
return 0;
|
||||
|
||||
for (i = 0, l = app->cards; l; i++, l = l->next)
|
||||
if (strcmp(card_name, l->data) == 0)
|
||||
return i;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static inline int
|
||||
_find_channel_by_name(E_Mixer_App_Dialog_Data *app, const char *channel_name)
|
||||
{
|
||||
E_Mixer_Channel_Info *info;
|
||||
Eina_List *l;
|
||||
int i = 0;
|
||||
int header_input;
|
||||
|
||||
if (!channel_name)
|
||||
return 0;
|
||||
|
||||
header_input = 0;
|
||||
EINA_LIST_FOREACH(app->channel_infos, l, info)
|
||||
{
|
||||
if (header_input != e_mod_mixer_channel_group_get(info))
|
||||
{
|
||||
header_input = e_mod_mixer_channel_group_get(info);
|
||||
i++;
|
||||
}
|
||||
|
||||
if (strcmp(channel_name, info->name) == 0)
|
||||
return i;
|
||||
|
||||
++i;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
e_mixer_app_dialog_select(E_Dialog *dialog, const char *card_name, const char *channel_name)
|
||||
e_mixer_app_dialog_select(E_Dialog *dialog, const char *sys_card_name, const char *channel_name)
|
||||
{
|
||||
int n, i;
|
||||
Eina_List *l;
|
||||
E_Mixer_App_Dialog_Data *app;
|
||||
int n;
|
||||
|
||||
if (!dialog)
|
||||
return 0;
|
||||
|
||||
if ((!card_name) || (!channel_name))
|
||||
if ((!sys_card_name) || (!channel_name))
|
||||
return 0;
|
||||
|
||||
app = dialog->data;
|
||||
if (!app)
|
||||
return 0;
|
||||
|
||||
n = _find_card_by_name(app, card_name);
|
||||
n = -1;
|
||||
for (i = 0, l = app->cards; l; i++, l = l->next)
|
||||
{
|
||||
if (strcmp(sys_card_name, l->data) == 0)
|
||||
{
|
||||
n = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (n < 0)
|
||||
return 0;
|
||||
{
|
||||
/* FIXME device disappeared, very bad !! */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* app->channel_name will be overriden by selection in _populate_channels */
|
||||
app->channel_name = channel_name;
|
||||
|
||||
if (app->ui.cards.list)
|
||||
e_widget_ilist_selected_set(app->ui.cards.list, n);
|
||||
|
||||
n = _find_channel_by_name(app, channel_name);
|
||||
if (n < 0)
|
||||
return 0;
|
||||
e_widget_ilist_selected_set(app->ui.channels.list, n);
|
||||
else if (app->ui.channels.list)
|
||||
{
|
||||
app->sys_card_name = eina_stringshare_add(sys_card_name);
|
||||
_populate_channels(app);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -563,7 +563,8 @@ _mixer_popup_cb_mixer(void *data, void *data2 __UNUSED__)
|
|||
ctxt = mixer_mod->data;
|
||||
if (ctxt->mixer_dialog)
|
||||
{
|
||||
_mixer_app_select_current(ctxt->mixer_dialog, inst);
|
||||
/* maybe not update mixer dialog current selection */
|
||||
/* _mixer_app_select_current(ctxt->mixer_dialog, inst); */
|
||||
e_dialog_show(ctxt->mixer_dialog);
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue