diff options
author | JP Rosevear <jpr@helixcode.com> | 2000-09-06 09:06:48 +0800 |
---|---|---|
committer | JP Rosevear <jpr@src.gnome.org> | 2000-09-06 09:06:48 +0800 |
commit | 114f5b7f916184cf8269b36a06b74b74bb7b18e2 (patch) | |
tree | eb0fe5dcdda6dae6727c5f616e3e418cd6c9d65f /calendar/cal-util/cal-recur.c | |
parent | e8648e48175c1b6d26bff5316c2c7d738245a63c (diff) | |
download | gsoc2013-evolution-114f5b7f916184cf8269b36a06b74b74bb7b18e2.tar.gz gsoc2013-evolution-114f5b7f916184cf8269b36a06b74b74bb7b18e2.tar.zst gsoc2013-evolution-114f5b7f916184cf8269b36a06b74b74bb7b18e2.zip |
Kill all exdates if there are no dates in the box
2000-09-05 JP Rosevear <jpr@helixcode.com>
* gui/event-editor.c (dialog_to_comp_object): Kill all exdates if
there are no dates in the box
* cal-util/cal-recur.c (generate_instances_for_year): Add a
special
case for when there are exceptions but no rrules or rdates.
(cal_obj_remove_exceptions): Use date only compare func
(cal_obj_date_only_compare_func): New compare function that
compares the date only, not the time.
* gui/event-editor.c (dialog_to_comp_object): Need a break for the
yearly recurrence type
(dialog_to_comp_object): We need to allocate icaltimetypes for the
exdate list
(fill_widgets): Handle a weekly recurrence with no particular day
set
(dialog_to_comp_object): Kill all rrules if "None" is selected as
the recurrence type by the user
svn path=/trunk/; revision=5218
Diffstat (limited to 'calendar/cal-util/cal-recur.c')
-rw-r--r-- | calendar/cal-util/cal-recur.c | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/calendar/cal-util/cal-recur.c b/calendar/cal-util/cal-recur.c index fd4d875d83..49bf9a9a08 100644 --- a/calendar/cal-util/cal-recur.c +++ b/calendar/cal-util/cal-recur.c @@ -792,6 +792,18 @@ generate_instances_for_year (CalComponent *comp, g_array_append_val (occs, cotime); } + /* Special case when there are exceptions but no recurrence rules */ + if (occs->len == 0) { + CalComponentDateTime dt; + time_t t; + + cal_component_get_dtstart (comp, &dt); + t = icaltime_as_timet (*dt.value); + cal_object_time_from_time (&cotime, t); + + g_array_append_val (occs, cotime); + } + /* Expand each of the exception rules. */ for (elem = exrules; elem; elem = elem->next) { struct icalrecurrencetype *ir; @@ -1392,7 +1404,7 @@ cal_obj_remove_exceptions (GArray *occs, /* Step through the exceptions until we come to one that matches or follows this occurrence. */ while (ex_occ) { - cmp = cal_obj_time_compare_func (ex_occ, occ); + cmp = cal_obj_date_only_compare_func (ex_occ, occ); if (cmp > 0) break; @@ -2952,6 +2964,32 @@ cal_obj_time_compare_func (const void *arg1, return 0; } +static gint +cal_obj_date_only_compare_func (const void *arg1, + const void *arg2) +{ + CalObjTime *cotime1, *cotime2; + + cotime1 = (CalObjTime*) arg1; + cotime2 = (CalObjTime*) arg2; + + if (cotime1->year < cotime2->year) + return -1; + if (cotime1->year > cotime2->year) + return 1; + + if (cotime1->month < cotime2->month) + return -1; + if (cotime1->month > cotime2->month) + return 1; + + if (cotime1->day < cotime2->day) + return -1; + if (cotime1->day > cotime2->day) + return 1; + + return 0; +} /* Returns the weekday of the given CalObjTime, from 0 - 6. The week start day is Monday by default, but can be set in the recurrence rule. */ |