diff options
Diffstat (limited to 'calendar')
-rw-r--r-- | calendar/ChangeLog | 16 | ||||
-rw-r--r-- | calendar/gui/dialogs/alarm-dialog.c | 153 |
2 files changed, 146 insertions, 23 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index f64dea5182..692bdfd7aa 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,19 @@ +2004-06-25 JP Rosevaer <jpr@novell.com> + + * gui/dialogs/alarm-dialog.c (palarm_widgets_to_alarm): the args + are optional, don't store them if they aren't there + (check_custom_sound): sensitize the ok button based on whether or + not there needs to be input + (check_custom_message): ditto + (check_custom_program): ditto + (dalarm_message_toggled_cb): check custom message + (dalarm_description_changed_cb): ditto + (aalarm_sound_toggled_cb): check custom sound + (aalarm_attach_changed_cb): ditto + (palarm_program_changed_cb): check custom program + (action_selection_done_cb): use above checks as appropriate + (init_widgets): listen for changed signals + 2004-06-25 JP Rosevear <jpr@novell.com> * gui/dialogs/event-page.c (event_page_finalize): free old_summary diff --git a/calendar/gui/dialogs/alarm-dialog.c b/calendar/gui/dialogs/alarm-dialog.c index 779ecf6b7b..437e514853 100644 --- a/calendar/gui/dialogs/alarm-dialog.c +++ b/calendar/gui/dialogs/alarm-dialog.c @@ -401,12 +401,14 @@ palarm_widgets_to_alarm (Dialog *dialog, ECalComponentAlarm *alarm) icalattach_unref (attach); str = e_dialog_editable_get (dialog->palarm_args); - description.value = str; - description.altrep = NULL; - - e_cal_component_alarm_set_description (alarm, &description); + if (str && *str) { + description.value = str; + description.altrep = NULL; + + e_cal_component_alarm_set_description (alarm, &description); + } g_free (str); - + /* remove the X-EVOLUTION-NEEDS-DESCRIPTION property, so that * we don't re-set the alarm's description */ icalcomp = e_cal_component_alarm_get_icalcomponent (alarm); @@ -655,24 +657,6 @@ setup_select_names (Dialog *dialog) return TRUE; } -static void -action_selection_done_cb (GtkMenuShell *menu_shell, gpointer data) -{ - Dialog *dialog = data; - ECalComponentAlarmAction action; - int page = 0, i; - - action = e_dialog_option_menu_get (dialog->action, action_map); - for (i = 0; action_map[i] != -1 ; i++) { - if (action == action_map[i]) { - page = i; - break; - } - } - - gtk_notebook_set_page (GTK_NOTEBOOK (dialog->option_notebook), page); -} - /* Callback used when the repeat toggle button is toggled. We sensitize the * repeat group options as appropriate. */ @@ -688,6 +672,20 @@ repeat_toggle_toggled_cb (GtkToggleButton *toggle, gpointer data) } static void +check_custom_sound (Dialog *dialog) +{ + char *str; + gboolean sens; + + str = e_dialog_editable_get (dialog->aalarm_attach); + + sens = e_dialog_toggle_get (dialog->aalarm_sound) ? str && *str : TRUE; + gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog->toplevel), GTK_RESPONSE_OK, sens); + + g_free (str); +} + +static void aalarm_sound_toggled_cb (GtkToggleButton *toggle, gpointer data) { Dialog *dialog = data; @@ -696,6 +694,34 @@ aalarm_sound_toggled_cb (GtkToggleButton *toggle, gpointer data) active = gtk_toggle_button_get_active (toggle); gtk_widget_set_sensitive (dialog->aalarm_group, active); + check_custom_sound (dialog); +} + +static void +aalarm_attach_changed_cb (GtkWidget *widget, gpointer data) +{ + Dialog *dialog = data; + + check_custom_sound (dialog); +} + +static void +check_custom_message (Dialog *dialog) +{ + char *str; + GtkTextBuffer *text_buffer; + GtkTextIter text_iter_start, text_iter_end; + gboolean sens; + + text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (dialog->dalarm_description)); + gtk_text_buffer_get_start_iter (text_buffer, &text_iter_start); + gtk_text_buffer_get_end_iter (text_buffer, &text_iter_end); + str = gtk_text_buffer_get_text (text_buffer, &text_iter_start, &text_iter_end, FALSE); + + sens = e_dialog_toggle_get (dialog->dalarm_message) ? str && *str : TRUE; + gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog->toplevel), GTK_RESPONSE_OK, sens); + + g_free (str); } static void @@ -707,6 +733,73 @@ dalarm_message_toggled_cb (GtkToggleButton *toggle, gpointer data) active = gtk_toggle_button_get_active (toggle); gtk_widget_set_sensitive (dialog->dalarm_group, active); + check_custom_message (dialog); +} + +static void +dalarm_description_changed_cb (GtkWidget *widget, gpointer data) +{ + Dialog *dialog = data; + + check_custom_message (dialog); +} + +static void +check_custom_program (Dialog *dialog) +{ + char *str; + gboolean sens; + + str = e_dialog_editable_get (dialog->palarm_program); + + sens = str && *str; + gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog->toplevel), GTK_RESPONSE_OK, sens); +} + +static void +palarm_program_changed_cb (GtkWidget *widget, gpointer data) +{ + Dialog *dialog = data; + + check_custom_program (dialog); +} + +static void +action_selection_done_cb (GtkMenuShell *menu_shell, gpointer data) +{ + Dialog *dialog = data; + ECalComponentAlarmAction action; + int page = 0, i; + + action = e_dialog_option_menu_get (dialog->action, action_map); + for (i = 0; action_map[i] != -1 ; i++) { + if (action == action_map[i]) { + page = i; + break; + } + } + + gtk_notebook_set_page (GTK_NOTEBOOK (dialog->option_notebook), page); + + switch (action) { + case E_CAL_COMPONENT_ALARM_AUDIO: + check_custom_sound (dialog); + break; + + case E_CAL_COMPONENT_ALARM_DISPLAY: + check_custom_message (dialog); + break; + + case E_CAL_COMPONENT_ALARM_EMAIL: + break; + + case E_CAL_COMPONENT_ALARM_PROCEDURE: + check_custom_program (dialog); + break; + default: + g_assert_not_reached (); + return; + } } /* Hooks the widget signals */ @@ -714,6 +807,7 @@ static void init_widgets (Dialog *dialog) { GtkWidget *menu; + GtkTextBuffer *text_buffer; menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (dialog->action)); g_signal_connect (menu, "selection_done", @@ -723,10 +817,23 @@ init_widgets (Dialog *dialog) g_signal_connect (G_OBJECT (dialog->repeat_toggle), "toggled", G_CALLBACK (repeat_toggle_toggled_cb), dialog); + /* Handle custom sounds */ g_signal_connect (G_OBJECT (dialog->aalarm_sound), "toggled", G_CALLBACK (aalarm_sound_toggled_cb), dialog); + g_signal_connect (G_OBJECT (dialog->aalarm_attach), "changed", + G_CALLBACK (aalarm_attach_changed_cb), dialog); + + /* Handle custom messages */ g_signal_connect (G_OBJECT (dialog->dalarm_message), "toggled", G_CALLBACK (dalarm_message_toggled_cb), dialog); + text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (dialog->dalarm_description)); + g_signal_connect (G_OBJECT (text_buffer), "changed", + G_CALLBACK (dalarm_description_changed_cb), dialog); + + /* Handle program */ + g_signal_connect (G_OBJECT (dialog->palarm_program), "changed", + G_CALLBACK (palarm_program_changed_cb), dialog); + } gboolean |