From 322c0cad7043d9b4b10b7dc71cec028ad00834d9 Mon Sep 17 00:00:00 2001 From: Damon Chaplin Date: Wed, 11 Oct 2000 18:19:16 +0000 Subject: call calendar_config_write_on_exit() to write out some special config 2000-10-11 Damon Chaplin * gui/main.c (main): call calendar_config_write_on_exit() to write out some special config settings (as the mail component does). * gui/calendar-commands.c (properties_cmd): changed to use the new preferences dialog. (update_all_config_settings): new function to iterate over all the calendars and update the config settings. * gui/dialogs/cal-prefs-dialog.glade: preferences dialog. * gui/dialogs/cal-prefs-dialog.[hc]: new files for the preferences dialog. * gui/calendar-config.[hc]: new files to handle loading/saving config settings. * cal-util/cal-recur.c: fixed bug in YEARLY when no filters were set, plus minor changes. * cal-util/test-recur.c: updated. * gui/e-day-view-time-item.c: * gui/popup-menu.c: update to #include * gui/component-factory.c (owner_set_cb): called calendar_config_init. (owner_set_cb): (owner_unset_cb): updated the prototypes. * gui/main.c (main): added call to calendar_config_write_on_exit(). * gui/component-factory.h: * gui/component-factory.c (owner_set_cb): added global evolution_dir just like the mail component, so we know we to store config stuff. svn path=/trunk/; revision=5856 --- calendar/cal-util/cal-recur.c | 98 ++++++++++++++++++++++++++++--------------- 1 file changed, 64 insertions(+), 34 deletions(-) (limited to 'calendar/cal-util/cal-recur.c') diff --git a/calendar/cal-util/cal-recur.c b/calendar/cal-util/cal-recur.c index 1fdb515502..74a0dbf6f7 100644 --- a/calendar/cal-util/cal-recur.c +++ b/calendar/cal-util/cal-recur.c @@ -1082,6 +1082,12 @@ generate_instances_for_chunk (CalComponent *comp, start_tm.tm_isdst = -1; start_time = mktime (&start_tm); + if (start_time == -1) { + g_warning ("mktime failed - time_t out of range?"); + finished = TRUE; + break; + } + if (start_time < comp_dtstart || (interval_end_time != -1 && start_time >= interval_end_time)) @@ -1107,6 +1113,12 @@ generate_instances_for_chunk (CalComponent *comp, end_tm.tm_isdst = -1; end_time = mktime (&end_tm); + if (end_time == -1) { + g_warning ("mktime failed - time_t out of range?"); + finished = TRUE; + break; + } + if (end_time < interval_start_time) continue; @@ -1426,12 +1438,18 @@ cal_obj_generate_set_yearly (RecurData *recur_data, occs_arrays[num_occs_arrays++] = occs; } - /* Add all the arrays together. */ - occs = occs_arrays[0]; - for (i = 1; i < num_occs_arrays; i++) { - occs2 = occs_arrays[i]; - g_array_append_vals (occs, occs2->data, occs2->len); - g_array_free (occs2, TRUE); + /* Add all the arrays together. If no filters were used we just + create an array with one element. */ + if (num_occs_arrays > 0) { + occs = occs_arrays[0]; + for (i = 1; i < num_occs_arrays; i++) { + occs2 = occs_arrays[i]; + g_array_append_vals (occs, occs2->data, occs2->len); + g_array_free (occs2, TRUE); + } + } else { + occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); + g_array_append_vals (occs, occ, 1); } /* Now expand BYHOUR, BYMINUTE & BYSECOND. */ @@ -1720,6 +1738,7 @@ cal_obj_remove_exceptions (GArray *occs, for (i = 0; i < occs_len; i++) { occ = &g_array_index (occs, CalObjTime, i); keep_occ = TRUE; + /* If the occurrence is a duplicate of the previous one, skip it. */ if (prev_occ @@ -1747,7 +1766,9 @@ cal_obj_remove_exceptions (GArray *occs, to one that matches or follows this occurrence. */ while (ex_occ) { - cmp = cal_obj_date_only_compare_func (ex_occ, occ); + cmp = cal_obj_time_compare_func (ex_occ, occ); + /* I'm pretty sure this is wrong. */ + /*cmp = cal_obj_date_only_compare_func (ex_occ, occ);*/ if (cmp > 0) break; @@ -3257,41 +3278,50 @@ cal_obj_time_compare_func (const void *arg1, const void *arg2) { CalObjTime *cotime1, *cotime2; + gint retval; 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; + retval = -1; + else if (cotime1->year > cotime2->year) + retval = 1; + + else if (cotime1->month < cotime2->month) + retval = -1; + else if (cotime1->month > cotime2->month) + retval = 1; + + else if (cotime1->day < cotime2->day) + retval = -1; + else if (cotime1->day > cotime2->day) + retval = 1; + + else if (cotime1->hour < cotime2->hour) + retval = -1; + else if (cotime1->hour > cotime2->hour) + retval = 1; + + else if (cotime1->minute < cotime2->minute) + retval = -1; + else if (cotime1->minute > cotime2->minute) + retval = 1; + + else if (cotime1->second < cotime2->second) + retval = -1; + else if (cotime1->second > cotime2->second) + retval = 1; - if (cotime1->day < cotime2->day) - return -1; - if (cotime1->day > cotime2->day) - return 1; - - if (cotime1->hour < cotime2->hour) - return -1; - if (cotime1->hour > cotime2->hour) - return 1; - - if (cotime1->minute < cotime2->minute) - return -1; - if (cotime1->minute > cotime2->minute) - return 1; + else + retval = 0; - if (cotime1->second < cotime2->second) - return -1; - if (cotime1->second > cotime2->second) - return 1; +#if 0 + g_print ("%s - ", cal_obj_time_to_string (cotime1)); + g_print ("%s : %i\n", cal_obj_time_to_string (cotime2), retval); +#endif - return 0; + return retval; } static gint -- cgit v1.2.3