aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/e-week-view.c
diff options
context:
space:
mode:
authorDamon Chaplin <damon@helixcode.com>2000-05-20 18:38:19 +0800
committerDamon Chaplin <damon@src.gnome.org>2000-05-20 18:38:19 +0800
commit4eb47f9a4696877218bf05d53c52f829d2afcdd5 (patch)
tree81a7adf9cc66caa99031a1908d7317d616ea2b64 /calendar/gui/e-week-view.c
parentccd4d84234d933ccf05769e71a3372e149d707d1 (diff)
downloadgsoc2013-evolution-4eb47f9a4696877218bf05d53c52f829d2afcdd5.tar
gsoc2013-evolution-4eb47f9a4696877218bf05d53c52f829d2afcdd5.tar.gz
gsoc2013-evolution-4eb47f9a4696877218bf05d53c52f829d2afcdd5.tar.bz2
gsoc2013-evolution-4eb47f9a4696877218bf05d53c52f829d2afcdd5.tar.lz
gsoc2013-evolution-4eb47f9a4696877218bf05d53c52f829d2afcdd5.tar.xz
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.c46
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);
}