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
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to