diff options
author | Arturo Espinosa <unammx@src.gnome.org> | 1998-04-30 06:19:39 +0800 |
---|---|---|
committer | Arturo Espinosa <unammx@src.gnome.org> | 1998-04-30 06:19:39 +0800 |
commit | 5c1c9710338cb7f3b29ed1eac1006bb95f39c048 (patch) | |
tree | dacbe29633e17a82ac619ea4c0a2fd67a650d56d /calendar/gui/gnome-cal.c | |
parent | b14e3c892ce8feac4e72ab80800fb7b6e0408002 (diff) | |
download | gsoc2013-evolution-5c1c9710338cb7f3b29ed1eac1006bb95f39c048.tar gsoc2013-evolution-5c1c9710338cb7f3b29ed1eac1006bb95f39c048.tar.gz gsoc2013-evolution-5c1c9710338cb7f3b29ed1eac1006bb95f39c048.tar.bz2 gsoc2013-evolution-5c1c9710338cb7f3b29ed1eac1006bb95f39c048.tar.lz gsoc2013-evolution-5c1c9710338cb7f3b29ed1eac1006bb95f39c048.tar.xz gsoc2013-evolution-5c1c9710338cb7f3b29ed1eac1006bb95f39c048.tar.zst gsoc2013-evolution-5c1c9710338cb7f3b29ed1eac1006bb95f39c048.zip |
Various fixes and optimizations; Tagging of the days with appointements.
Various fixes and optimizations; Tagging of the days with
appointements. the 1969 bug is gone. Really.
Miguel.
svn path=/trunk/; revision=201
Diffstat (limited to 'calendar/gui/gnome-cal.c')
-rw-r--r-- | calendar/gui/gnome-cal.c | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c index d37d4156a8..e4312e9341 100644 --- a/calendar/gui/gnome-cal.c +++ b/calendar/gui/gnome-cal.c @@ -275,7 +275,7 @@ mail_notify (char *mail_address, char *text, time_t app_time) pid = fork (); if (pid == 0){ const int top = max_open_files (); - int dev_null, i; + int dev_null; dev_null = open ("/dev/null", O_RDWR); dup2 (p [0], 0); @@ -329,3 +329,54 @@ calendar_notify (time_t time, void *data) } } +/* + * called from the calendar_iterate routine to mark the days of a GtkCalendar + */ +static int +mark_gtk_calendar_day (iCalObject *obj, time_t start, time_t end, void *c) +{ + GtkCalendar *gtk_cal = c; + struct tm *tm_s; + int days, day; + + tm_s = localtime (&start); + days = difftime (end, start) / (60*60*24); + + for (day = 0; day <= days; day++){ + time_t new = mktime (tm_s); + struct tm *tm_day; + + tm_day = localtime (&new); + gtk_calendar_mark_day (gtk_cal, tm_day->tm_mday); + tm_s->tm_mday++; + } + return TRUE; +} + +/* + * Tags the dates with appointments in a GtkCalendar based on the + * GnomeCalendar contents + */ +void +gnome_calendar_tag_calendar (GnomeCalendar *cal, GtkCalendar *gtk_cal) +{ + time_t month_begin, month_end; + struct tm tm; + GList *l; + + /* compute month_begin */ + tm.tm_hour = 0; + tm.tm_min = 0; + tm.tm_sec = 0; + tm.tm_mday = 0; + tm.tm_mon = gtk_cal->month; + tm.tm_year = gtk_cal->year - 1900; + tm.tm_isdst= -1; + + month_begin = mktime (&tm); + tm.tm_mon++; + month_end = mktime (&tm); + + gtk_calendar_clear_marks (gtk_cal); + calendar_iterate (cal->cal, month_begin, month_end, mark_gtk_calendar_day, gtk_cal); +} |