diff options
-rw-r--r-- | calendar/ChangeLog | 12 | ||||
-rw-r--r-- | calendar/cal-util/cal-component.c | 10 | ||||
-rw-r--r-- | calendar/cal-util/cal-component.h | 1 | ||||
-rw-r--r-- | calendar/gui/event-editor.c | 60 |
4 files changed, 61 insertions, 22 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index c4f1824877..f1f2a56241 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,15 @@ +2001-02-06 JP Rosevear <jpr@ximian.com> + + * gui/event-editor.c (fill_reminder_widgets): Match new + append_alarm signature + (reminder_to_comp_object): only add alarms tagged as new, no + longer delete all alarms first + (append_reminder): the row data is now of type ReminderData, + rename from append_alarm + (reminder_add_cb): math new append_alarm signature + (reminder_delete_cb): if the alarm existed before the dialog was + loaded, delete it immediately from the cal component + 2001-02-05 JP Rosevear <jpr@ximian.com> * cal-util/cal-component.c (cal_component_alarm_set_trigger): Set diff --git a/calendar/cal-util/cal-component.c b/calendar/cal-util/cal-component.c index de7a768a17..a485aa8fa7 100644 --- a/calendar/cal-util/cal-component.c +++ b/calendar/cal-util/cal-component.c @@ -3702,6 +3702,16 @@ cal_component_alarm_new (void) return alarm; } +CalComponentAlarm * +cal_component_alarm_clone (CalComponentAlarm *alarm) +{ + CalComponentAlarm *alarm; + + alarm = cal_component_alarm_new (); + + return alarm; +} + /** * cal_component_alarm_get_uid: * @alarm: An alarm subcomponent. diff --git a/calendar/cal-util/cal-component.h b/calendar/cal-util/cal-component.h index b912c04e9e..6f3bb1c8f3 100644 --- a/calendar/cal-util/cal-component.h +++ b/calendar/cal-util/cal-component.h @@ -338,6 +338,7 @@ void cal_component_alarms_free (CalComponentAlarms *alarms); /* CalComponentAlarms */ CalComponentAlarm *cal_component_alarm_new (void); +CalComponentAlarm *cal_component_alarm_clone (CalComponentAlarm *alarm); const char *cal_component_alarm_get_uid (CalComponentAlarm *alarm); diff --git a/calendar/gui/event-editor.c b/calendar/gui/event-editor.c index f758e6483e..420d8136ae 100644 --- a/calendar/gui/event-editor.c +++ b/calendar/gui/event-editor.c @@ -42,8 +42,8 @@ #include "widget-util.h" -enum { BEFORE, AFTER}; -enum { MINUTES, HOURS, DAYS}; +enum {BEFORE, AFTER}; +enum {MINUTES, HOURS, DAYS}; /* Reminder maps */ static const int reminder_action_map[] = { @@ -105,6 +105,14 @@ static const int month_day_options_map[] = { -1 }; +/* Row data for the reminders */ +typedef enum {NEW_ALARM, EXISTING_ALARM} ReminderStatus; + +typedef struct { + ReminderStatus status; + CalComponentAlarm *alarm; +} ReminderData; + struct _EventEditorPrivate { /* Glade XML data */ GladeXML *xml; @@ -213,7 +221,7 @@ static void event_editor_destroy (GtkObject *object); static GtkObjectClass *parent_class; -static void append_alarm (EventEditor *ee, CalComponentAlarm *alarm); +static void append_reminder (EventEditor *ee, CalComponentAlarm *alarm, ReminderStatus status); static void append_exception (EventEditor *ee, time_t t); static void check_all_day (EventEditor *ee); static void set_all_day (GtkWidget *toggle, EventEditor *ee); @@ -1652,7 +1660,7 @@ fill_reminder_widgets (EventEditor *ee) CalComponentAlarm *ca = cal_component_get_alarm (priv->comp, l->data); /* Add it to the clist */ - append_alarm (ee, ca); + append_reminder (ee, ca, EXISTING_ALARM); } cal_component_free_alarm_uids (alarms); } @@ -2107,24 +2115,18 @@ static void reminder_to_comp_object (EventEditor *ee, CalComponent *comp) { EventEditorPrivate *priv; - GList *alarms, *l; GtkCList *reminder_list; + ReminderData *rdata; int i; priv = ee->priv; - /* Erase all the old ones */ - alarms = cal_component_get_alarm_uids (comp); - for (l = alarms; l != NULL; l = l->next) - cal_component_remove_alarm (comp, l->data); - cal_component_free_alarm_uids (alarms); - reminder_list = GTK_CLIST (priv->reminder_list); for (i = 0; i < reminder_list->rows; i++) { - CalComponentAlarm *alarm; - - alarm = gtk_clist_get_row_data (reminder_list, i); - cal_component_add_alarm (priv->comp, alarm); + rdata = gtk_clist_get_row_data (reminder_list, i); + if (rdata->status == NEW_ALARM) + cal_component_add_alarm (priv->comp, rdata->alarm); + g_free (rdata); } } @@ -3133,14 +3135,15 @@ date_changed_cb (EDateEdit *dedit, gpointer data) preview_recur (ee); } -/* Appends an exception date to the list */ +/* Appends an alarm to the list */ static void -append_alarm (EventEditor *ee, CalComponentAlarm *alarm) +append_reminder (EventEditor *ee, CalComponentAlarm *alarm, ReminderStatus status) { EventEditorPrivate *priv; + GtkCList *clist; + ReminderData *rdata; char *c[1]; int i; - GtkCList *clist; priv = ee->priv; @@ -3149,7 +3152,10 @@ append_alarm (EventEditor *ee, CalComponentAlarm *alarm) c[0] = get_alarm_string (alarm); i = e_utf8_gtk_clist_append (clist, c); - gtk_clist_set_row_data (clist, i, alarm); + rdata = g_new (ReminderData, 1); + rdata->status = status; + rdata->alarm = alarm; + gtk_clist_set_row_data (clist, i, rdata); gtk_clist_select_row (clist, i, 0); g_free (c[0]); @@ -3163,7 +3169,7 @@ reminder_add_cb (GtkWidget *widget, EventEditor *ee) EventEditorPrivate *priv; CalComponentAlarm *alarm; CalAlarmTrigger trigger; - + priv = ee->priv; event_editor_set_changed (ee, TRUE); @@ -3192,7 +3198,7 @@ reminder_add_cb (GtkWidget *widget, EventEditor *ee) cal_component_alarm_set_action (alarm, e_dialog_option_menu_get (priv->reminder_action, reminder_action_map)); - append_alarm (ee, alarm); + append_reminder (ee, alarm, NEW_ALARM); } /* Callback for the "delete reminder" button */ @@ -3201,6 +3207,7 @@ reminder_delete_cb (GtkWidget *widget, EventEditor *ee) { EventEditorPrivate *priv; GtkCList *clist; + ReminderData *rdata; int sel; priv = ee->priv; @@ -3213,7 +3220,16 @@ reminder_delete_cb (GtkWidget *widget, EventEditor *ee) sel = GPOINTER_TO_INT (clist->selection->data); - cal_component_alarm_free (gtk_clist_get_row_data (clist, sel)); + rdata = gtk_clist_get_row_data (clist, sel); + + if (rdata->status == EXISTING_ALARM) { + const char *uid; + + uid = cal_component_alarm_get_uid (rdata->alarm); + cal_component_remove_alarm (priv->comp, uid); + } + cal_component_alarm_free (rdata->alarm); + g_free (rdata); gtk_clist_remove (clist, sel); if (sel >= clist->rows) |