jeyzu pushed a commit to branch devs/jeyzu/mixer.
commit 4dbaae89bed398fba18245a0f48619a1082b14a0
Author: Jérémy Zurcher <[email protected]>
Date: Fri Mar 1 09:37:22 2013 +0100
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
---
src/modules/mixer/app_mixer.c | 133 ++++++++++++++---------------------------
src/modules/mixer/e_mod_main.c | 3 +-
2 files changed, 46 insertions(+), 90 deletions(-)
diff --git a/src/modules/mixer/app_mixer.c b/src/modules/mixer/app_mixer.c
index fdb06b4..dd4f8ce 100644
--- a/src/modules/mixer/app_mixer.c
+++ b/src/modules/mixer/app_mixer.c
@@ -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)
+int
+e_mixer_app_dialog_select(E_Dialog *dialog, const char *sys_card_name, const
char *channel_name)
{
+ int n, i;
Eina_List *l;
- int i;
+ E_Mixer_App_Dialog_Data *app;
- if (!card_name)
+ if (!dialog)
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 ((!sys_card_name) || (!channel_name))
+ return 0;
- if (!channel_name)
+ app = dialog->data;
+ if (!app)
return 0;
- header_input = 0;
- EINA_LIST_FOREACH(app->channel_infos, l, info)
+ n = -1;
+ for (i = 0, l = app->cards; l; i++, l = l->next)
{
- if (header_input != e_mod_mixer_channel_group_get(info))
+ if (strcmp(sys_card_name, l->data) == 0)
{
- header_input = e_mod_mixer_channel_group_get(info);
- i++;
+ n = i;
+ break;
}
-
- 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_Data *app;
- int n;
-
- if (!dialog)
- return 0;
-
- if ((!card_name) || (!channel_name))
- return 0;
+ if (n < 0)
+ {
+ /* FIXME device disappeared, very bad !! */
+ return 0;
+ }
- app = dialog->data;
- if (!app)
- return 0;
+ /* app->channel_name will be overriden by selection in _populate_channels */
+ app->channel_name = channel_name;
- n = _find_card_by_name(app, card_name);
- if (n < 0)
- return 0;
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;
}
diff --git a/src/modules/mixer/e_mod_main.c b/src/modules/mixer/e_mod_main.c
index 7640740..27ea786 100644
--- a/src/modules/mixer/e_mod_main.c
+++ b/src/modules/mixer/e_mod_main.c
@@ -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;
}
--
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb