diff options
author | Damon Chaplin <damon@ximian.com> | 2001-07-03 12:12:17 +0800 |
---|---|---|
committer | Damon Chaplin <damon@src.gnome.org> | 2001-07-03 12:12:17 +0800 |
commit | bacd3a85a434032316b3e63b95282175ce2b0659 (patch) | |
tree | 00e6b5444efed4ad1ef742968c292d52f4ee6a78 /widgets/misc/e-calendar-item.c | |
parent | 0e27010e0b193b787e93cbf50c08a6d477e33dee (diff) | |
download | gsoc2013-evolution-bacd3a85a434032316b3e63b95282175ce2b0659.tar.gz gsoc2013-evolution-bacd3a85a434032316b3e63b95282175ce2b0659.tar.zst gsoc2013-evolution-bacd3a85a434032316b3e63b95282175ce2b0659.zip |
added functions to set a callback to get the current time, which is used
2001-07-02 Damon Chaplin <damon@ximian.com>
* e-calendar-item.c:
* e-cell-date-edit.c:
* e-dateedit.c: added functions to set a callback to get the current
time, which is used instead of localtime(). We need this as we have to
use our own timezones.
svn path=/trunk/; revision=10728
Diffstat (limited to 'widgets/misc/e-calendar-item.c')
-rw-r--r-- | widgets/misc/e-calendar-item.c | 43 |
1 files changed, 36 insertions, 7 deletions
diff --git a/widgets/misc/e-calendar-item.c b/widgets/misc/e-calendar-item.c index c2f13ca1a6..c5399c14f8 100644 --- a/widgets/misc/e-calendar-item.c +++ b/widgets/misc/e-calendar-item.c @@ -415,8 +415,13 @@ e_calendar_item_init (ECalendarItem *calitem) calitem->date_range_changed = FALSE; calitem->style_callback = NULL; + calitem->style_callback_data = NULL; calitem->style_callback_destroy = NULL; + calitem->time_callback = NULL; + calitem->time_callback_data = NULL; + calitem->time_callback_destroy = NULL; + /* Translators: These are the first characters of each day of the week, 'M' for 'Monday', 'T' for Tuesday etc. */ calitem->days = _("MTWTFSS"); @@ -433,6 +438,7 @@ e_calendar_item_destroy (GtkObject *o) calitem = E_CALENDAR_ITEM (o); e_calendar_item_set_style_callback (calitem, NULL, NULL, NULL); + e_calendar_item_set_get_time_callback (calitem, NULL, NULL, NULL); g_free (calitem->styles); @@ -1162,7 +1168,7 @@ e_calendar_item_draw_day_numbers (ECalendarItem *calitem, GdkFont *font, *wkfont; GdkGC *fg_gc; GdkColor *bg_color, *fg_color, *box_color; - struct tm *today_tm; + struct tm today_tm; time_t t; gint char_height, min_cell_width, min_cell_height; gint day_num, drow, dcol, day_x, day_y; @@ -1235,11 +1241,15 @@ e_calendar_item_draw_day_numbers (ECalendarItem *calitem, } /* Get today's date, so we can highlight it. */ - t = time (NULL); - today_tm = localtime (&t); - today_year = today_tm->tm_year + 1900; - today_month = today_tm->tm_mon; - today_mday = today_tm->tm_mday; + if (calitem->time_callback) { + today_tm = (*calitem->time_callback) (calitem, calitem->time_callback_data); + } else { + t = time (NULL); + today_tm = *localtime (&t); + } + today_year = today_tm.tm_year + 1900; + today_month = today_tm.tm_mon; + today_mday = today_tm.tm_mday; /* We usually skip the last days of the previous month (mon = 0), except for the top-left month displayed. */ @@ -2827,7 +2837,7 @@ e_calendar_item_set_style_callback (ECalendarItem *calitem, { g_return_if_fail (E_IS_CALENDAR_ITEM (calitem)); - if (calitem->style_callback_data) + if (calitem->style_callback_data && calitem->style_callback_destroy) (*calitem->style_callback_destroy) (calitem->style_callback_data); calitem->style_callback = cb; @@ -2884,3 +2894,22 @@ e_calendar_item_signal_emission_idle_cb (gpointer data) return FALSE; } + +/* Sets a callback to use to get the current time. This is useful if the + application needs to use its own timezone data rather than rely on the + Unix timezone. */ +void +e_calendar_item_set_get_time_callback (ECalendarItem *calitem, + ECalendarItemGetTimeCallback cb, + gpointer data, + GtkDestroyNotify destroy) +{ + g_return_if_fail (E_IS_CALENDAR_ITEM (calitem)); + + if (calitem->time_callback_data && calitem->time_callback_destroy) + (*calitem->time_callback_destroy) (calitem->time_callback_data); + + calitem->time_callback = cb; + calitem->time_callback_data = data; + calitem->time_callback_destroy = destroy; +} |