rebased version,
On Wednesday 19 December 2012 08:23, Jérémy Zurcher wrote :
> Hi,
>
> - prevent segv while playing with controls when a card with empty channel
> list is selected (ie webcam)
>
> regards
> Jérémy
> diff --git a/e/src/modules/mixer/app_mixer.c b/e/src/modules/mixer/app_mixer.c
> index 2fb37d1..75cbdce 100644
> --- a/e/src/modules/mixer/app_mixer.c
> +++ b/e/src/modules/mixer/app_mixer.c
> @@ -126,6 +126,26 @@ _cb_changed_lock_sliders(void *data, Evas_Object *obj
> __UNUSED__)
> }
>
> static void
> +_disable_channel_editor(E_Mixer_App_Dialog_Data *app)
> +{
> + struct e_mixer_app_ui_channel_editor *ui = &app->ui.channel_editor;
> +
> + e_widget_entry_text_set(ui->card, "");
> + e_widget_entry_text_set(ui->channel, "");
> + e_widget_entry_text_set(ui->type, "");
> +
> + e_widget_slider_value_int_set(ui->left, 0);
> + e_widget_slider_value_int_set(ui->right, 0);
> + e_widget_check_checked_set(ui->mute, 0);
> + e_widget_check_checked_set(ui->lock_sliders, 0);
> +
> + e_widget_disabled_set(ui->left, 1);
> + e_widget_disabled_set(ui->right, 1);
> + e_widget_disabled_set(ui->mute, 1);
> + e_widget_disabled_set(ui->lock_sliders, 1);
> +}
> +
> +static void
> _update_channel_editor_state(E_Mixer_App_Dialog_Data *app, const
> E_Mixer_Channel_State state)
> {
> struct e_mixer_app_ui_channel_editor *ui = &app->ui.channel_editor;
> @@ -155,7 +175,10 @@ _populate_channel_editor(E_Mixer_App_Dialog_Data *app)
> card_name = e_mod_mixer_card_name_get(app->card);
>
> if (!card_name)
> - return;
> + {
> + _disable_channel_editor(app);
> + return;
> + }
>
> e_widget_entry_text_set(ui->card, card_name);
> eina_stringshare_del(card_name);
> @@ -170,6 +193,7 @@ _populate_channel_editor(E_Mixer_App_Dialog_Data *app)
> e_mod_mixer_state_get(app->sys, app->channel_info->id, &state);
> _update_channel_editor_state(app, state);
>
> + e_widget_disabled_set(ui->left, 0);
> e_widget_disabled_set(ui->right, app->channel_info->is_mono);
> app->lock_sliders = ( (state.left == state.right) &&
> !app->channel_info->is_mono );
> e_widget_disabled_set(ui->lock_sliders, app->channel_info->is_mono);
> @@ -325,7 +349,10 @@ static void
> select_card(E_Mixer_App_Dialog_Data *app)
> {
> _populate_channels(app);
> - e_widget_ilist_selected_set(app->ui.channels.list, 1);
> + 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
> ------------------------------------------------------------------------------
> LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
> Remotely access PCs and mobile devices and provide instant support
> Improve your efficiency, and focus on delivering more value-add services
> Discover what IT Professionals Know. Rescue delivers
> http://p.sf.net/sfu/logmein_12329d2d
> _______________________________________________
> enlightenment-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
--
Jérémy Zurcher
av General Guisan 49
1400 Yverdon-les-bains
+41 (0) 79 599 84 27
diff --git a/e/src/modules/mixer/app_mixer.c b/e/src/modules/mixer/app_mixer.c
index 737bf86..10175b0 100644
--- a/e/src/modules/mixer/app_mixer.c
+++ b/e/src/modules/mixer/app_mixer.c
@@ -125,10 +125,34 @@ _cb_changed_lock_sliders(void *data, Evas_Object *obj
__UNUSED__)
}
static void
+_disable_channel_editor(E_Mixer_App_Dialog_Data *app)
+{
+ struct e_mixer_app_ui_channel_editor *ui = &app->ui.channel_editor;
+
+ e_widget_entry_text_set(ui->card, "");
+ e_widget_entry_text_set(ui->channel, "");
+ e_widget_entry_text_set(ui->type, "");
+
+ e_widget_slider_value_int_set(ui->left, 0);
+ e_widget_slider_value_int_set(ui->right, 0);
+ e_widget_check_checked_set(ui->mute, 0);
+ e_widget_check_checked_set(ui->lock_sliders, 0);
+
+ e_widget_disabled_set(ui->left, 1);
+ e_widget_disabled_set(ui->right, 1);
+ e_widget_disabled_set(ui->mute, 1);
+ e_widget_disabled_set(ui->lock_sliders, 1);
+}
+
+static void
_update_channel_editor_state(E_Mixer_App_Dialog_Data *app, const
E_Mixer_Channel_State state)
{
struct e_mixer_app_ui_channel_editor *ui = &app->ui.channel_editor;
+ e_widget_disabled_set(ui->left, 0);
+ e_widget_disabled_set(ui->right, 0);
+ e_widget_disabled_set(ui->lock_sliders, 0);
+
e_widget_slider_value_int_set(ui->left, state.left);
e_widget_slider_value_int_set(ui->right, state.right);
@@ -154,7 +178,10 @@ _populate_channel_editor(E_Mixer_App_Dialog_Data *app)
card_name = e_mod_mixer_card_name_get(app->card);
if (!card_name)
- return;
+ {
+ _disable_channel_editor(app);
+ return;
+ }
e_widget_entry_text_set(ui->card, card_name);
eina_stringshare_del(card_name);
@@ -321,7 +348,10 @@ static void
select_card(E_Mixer_App_Dialog_Data *app)
{
_populate_channels(app);
- e_widget_ilist_selected_set(app->ui.channels.list, 1);
+ 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
------------------------------------------------------------------------------
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel