aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/cal-util/cal-recur.c
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/cal-util/cal-recur.c')
-rw-r--r--calendar/cal-util/cal-recur.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/calendar/cal-util/cal-recur.c b/calendar/cal-util/cal-recur.c
index 49bf9a9a08..648e5293e9 100644
--- a/calendar/cal-util/cal-recur.c
+++ b/calendar/cal-util/cal-recur.c
@@ -489,16 +489,10 @@ cal_recur_generate_instances (CalComponent *comp,
else
dtend_time = time_day_end (dtstart_time);
-
- cal_component_get_rrule_list (comp, &rrules);
- cal_component_get_rdate_list (comp, &rdates);
- cal_component_get_exrule_list (comp, &exrules);
- cal_component_get_exdate_list (comp, &exdates);
-
/* If there is no recurrence, just call the callback if the event
intersects the given interval. */
-
- if (!(rrules || rdates || exrules || exdates)) {
+ if (!(cal_component_has_recurrences (comp)
+ || cal_component_has_exceptions (comp))) {
if ((end && dtstart_time < end && dtend_time > start)
|| (end == 0 && dtend_time > start)) {
(* cb) (comp, dtstart_time, dtend_time, cb_data);
@@ -507,6 +501,12 @@ cal_recur_generate_instances (CalComponent *comp,
goto out;
}
+ /* Get the recurrence rules */
+ cal_component_get_rrule_list (comp, &rrules);
+ cal_component_get_rdate_list (comp, &rdates);
+ cal_component_get_exrule_list (comp, &exrules);
+ cal_component_get_exdate_list (comp, &exdates);
+
/* Convert the interval start & end to CalObjTime. */
cal_object_time_from_time (&interval_start, start);
cal_object_time_from_time (&interval_end, end);
@@ -558,6 +558,12 @@ cal_recur_generate_instances (CalComponent *comp,
break;
}
+ cal_component_free_recur_list (rrules);
+ cal_component_free_period_list (rdates);
+ cal_component_free_recur_list (exrules);
+ cal_component_free_exdate_list (exdates);
+
+
out:
cal_component_free_datetime (&dtstart);
cal_component_free_datetime (&dtend);