diff options
Diffstat (limited to 'calendar/cal-util')
-rw-r--r-- | calendar/cal-util/cal-component.c | 5 | ||||
-rw-r--r-- | calendar/cal-util/cal-recur.c | 29 |
2 files changed, 26 insertions, 8 deletions
diff --git a/calendar/cal-util/cal-component.c b/calendar/cal-util/cal-component.c index 6e652b4851..5fc5addf19 100644 --- a/calendar/cal-util/cal-component.c +++ b/calendar/cal-util/cal-component.c @@ -2078,15 +2078,12 @@ cal_component_get_start_plus_duration (CalComponent *comp, /* If DTSTART is a DATE value, then we need to check if the DURATION includes any hours, minutes or seconds. If it does, we need to - make the DTEND/DUE a DATE-TIME value. If not, we need to subtract - one from the days, since the end date will be inclusive. */ + make the DTEND/DUE a DATE-TIME value. */ duration.days += duration.weeks * 7; if (dt->value->is_date) { if (duration.hours != 0 || duration.minutes != 0 || duration.seconds != 0) { dt->value->is_date = 0; - } else { - duration.days--; } } diff --git a/calendar/cal-util/cal-recur.c b/calendar/cal-util/cal-recur.c index d17c626274..cfccdaf19f 100644 --- a/calendar/cal-util/cal-recur.c +++ b/calendar/cal-util/cal-recur.c @@ -707,18 +707,38 @@ cal_recur_generate_instances_of_rule (CalComponent *comp, if (start == -1) start = dtstart_time; - /* If there is no DTEND, then use the same as the DTSTART. For - DATE-TIME values that means we will just have a single point in - time. For DATE values it means we end up with the entire day. */ - if (!dtend.value) + if (dtend.value) { + /* If both DTSTART and DTEND are DATE values, and they are the + same day, we add 1 day to DTEND. This means that most + events created with the old Evolution behavior will still + work OK. I'm not sure what Outlook does in this case. */ + if (dtstart.value->is_date && dtend.value->is_date) { + if (icaltime_compare_date_only (*dtstart.value, + *dtend.value) == 0) { + icaltime_adjust (dtend.value, 1, 0, 0, 0); + } + } + } else { + /* If there is no DTEND, then if DTSTART is a DATE-TIME value + we use the same time (so we have a single point in time). + If DTSTART is a DATE value we add 1 day. */ + dtend.value = g_new (struct icaltimetype, 1); *dtend.value = *dtstart.value; + if (dtstart.value->is_date) { + icaltime_adjust (dtend.value, 1, 0, 0, 0); + } + } + if (dtend.tzid && !dtend.value->is_date) { end_zone = (*tz_cb) (dtend.tzid, tz_cb_data); } else { end_zone = default_timezone; } + /* We don't do this any more, since Outlook assumes that the DTEND + date is not included. */ +#if 0 /* If DTEND is a DATE value, we add 1 day to it so that it includes the entire day. */ if (dtend.value->is_date) { @@ -727,6 +747,7 @@ cal_recur_generate_instances_of_rule (CalComponent *comp, dtend.value->second = 0; icaltime_adjust (dtend.value, 1, 0, 0, 0); } +#endif dtend_time = icaltime_as_timet_with_zone (*dtend.value, end_zone); /* If there is no recurrence, just call the callback if the event |