diff options
author | Damon Chaplin <damon@helixcode.com> | 2000-05-20 18:38:19 +0800 |
---|---|---|
committer | Damon Chaplin <damon@src.gnome.org> | 2000-05-20 18:38:19 +0800 |
commit | 4eb47f9a4696877218bf05d53c52f829d2afcdd5 (patch) | |
tree | 81a7adf9cc66caa99031a1908d7317d616ea2b64 /calendar/gui/e-week-view.c | |
parent | ccd4d84234d933ccf05769e71a3372e149d707d1 (diff) | |
download | gsoc2013-evolution-4eb47f9a4696877218bf05d53c52f829d2afcdd5.tar.gz gsoc2013-evolution-4eb47f9a4696877218bf05d53c52f829d2afcdd5.tar.zst gsoc2013-evolution-4eb47f9a4696877218bf05d53c52f829d2afcdd5.zip |
new files to implement iCalendar recurrence rules. These are only part
2000-05-20 Damon Chaplin <damon@helixcode.com>
* cal-util/cal-recur.[hc]: new files to implement iCalendar recurrence
rules. These are only part finished, but people may like to check that
the architecture seems OK.
2000-05-17 Damon Chaplin <damon@helixcode.com>
* gui/e-day-view.c (e_day_view_on_delete_occurrence):
* gui/e-week-view.c (e_week_view_on_delete_occurrence): use a copy of
the iCalObject so we detect the change in the "update_event" callback.
Maybe we should just update the view ourselves and then we wouldn't
need to detect any change in the callback.
* cal-util/calobj.c (ical_object_reset_recurrence): new function to
get rid of any recurrence rules. Used when we 'unrecur' an event.
* gui/e-day-view.c (e_day_view_key_press): don't add a new event if it
won't fit, or we end up adding a new event for each key press.
(e_day_view_update_event_label): don't update it if it doesn't have
an EText item (i.e. it isn't visible).
* gui/e-day-view-time-item.c: allow selection of times using this
column.
svn path=/trunk/; revision=3144
Diffstat (limited to 'calendar/gui/e-week-view.c')
-rw-r--r-- | calendar/gui/e-week-view.c | 46 |
1 files changed, 27 insertions, 19 deletions
diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c index 26fce815f9..a233d2a66d 100644 --- a/calendar/gui/e-week-view.c +++ b/calendar/gui/e-week-view.c @@ -2659,6 +2659,7 @@ e_week_view_on_delete_occurrence (GtkWidget *widget, gpointer data) { EWeekView *week_view; EWeekViewEvent *event; + iCalObject *ico; week_view = E_WEEK_VIEW (data); @@ -2668,9 +2669,13 @@ e_week_view_on_delete_occurrence (GtkWidget *widget, gpointer data) event = &g_array_index (week_view->events, EWeekViewEvent, week_view->popup_event_num); - ical_object_add_exdate (event->ico, event->start); - gnome_calendar_object_changed (week_view->calendar, event->ico, - CHANGE_DATES); + /* We must duplicate the iCalObject, or we won't know it has changed + when we get the "update_event" callback. */ + ico = ical_object_duplicate (event->ico); + + ical_object_add_exdate (ico, event->start); + gnome_calendar_object_changed (week_view->calendar, ico, CHANGE_DATES); + ical_object_unref (ico); } @@ -2697,7 +2702,7 @@ e_week_view_on_unrecur_appointment (GtkWidget *widget, gpointer data) { EWeekView *week_view; EWeekViewEvent *event; - iCalObject *ico; + iCalObject *ico, *new_ico; week_view = E_WEEK_VIEW (data); @@ -2707,24 +2712,27 @@ e_week_view_on_unrecur_appointment (GtkWidget *widget, gpointer data) event = &g_array_index (week_view->events, EWeekViewEvent, week_view->popup_event_num); + /* For the recurring object, we add a exception to get rid of the + instance. */ + ico = ical_object_duplicate (event->ico); + ical_object_add_exdate (ico, event->start); + /* For the unrecurred instance we duplicate the original object, create a new uid for it, get rid of the recurrence rules, and set the start & end times to the instances times. */ - ico = ical_object_duplicate (event->ico); - g_free (ico->uid); - ico->uid = ical_gen_uid (); - g_free (ico->recur); - ico->recur = 0; - ico->dtstart = event->start; - ico->dtend = event->end; + new_ico = ical_object_duplicate (event->ico); + g_free (new_ico->uid); + new_ico->uid = ical_gen_uid (); + ical_object_reset_recurrence (new_ico); + new_ico->dtstart = event->start; + new_ico->dtend = event->end; - /* For the recurring object, we add a exception to get rid of the - instance. */ - ical_object_add_exdate (event->ico, event->start); - - gnome_calendar_object_changed (week_view->calendar, event->ico, - CHANGE_ALL); - gnome_calendar_add_object (week_view->calendar, ico); - + /* Now update both iCalObjects. Note that we do this last since at + present the updates happen synchronously so our event may disappear. + */ + gnome_calendar_object_changed (week_view->calendar, ico, CHANGE_ALL); ical_object_unref (ico); + + gnome_calendar_add_object (week_view->calendar, new_ico); + ical_object_unref (new_ico); } |