From dac959d85813debca9762eaf4c4cf8cebc1090fe Mon Sep 17 00:00:00 2001 From: Chenthill Palanisamy Date: Fri, 16 Apr 2010 13:37:40 +0200 Subject: Bug 596601 (bnc) - monitor system timezone changes in evolution --- calendar/gui/e-cal-model.c | 15 +++++++++++++++ calendar/gui/e-cal-model.h | 3 +++ calendar/gui/e-day-view.c | 11 +++++------ calendar/gui/e-week-view.c | 14 ++++++++------ 4 files changed, 31 insertions(+), 12 deletions(-) (limited to 'calendar') diff --git a/calendar/gui/e-cal-model.c b/calendar/gui/e-cal-model.c index 5cf20941b8..cb1966fb17 100644 --- a/calendar/gui/e-cal-model.c +++ b/calendar/gui/e-cal-model.c @@ -141,6 +141,7 @@ enum { CAL_VIEW_PROGRESS, CAL_VIEW_DONE, STATUS_MESSAGE, + TIMEZONE_CHANGED, LAST_SIGNAL }; @@ -474,6 +475,16 @@ e_cal_model_class_init (ECalModelClass *class) e_marshal_VOID__STRING_DOUBLE, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_DOUBLE); + signals[TIMEZONE_CHANGED] = g_signal_new ( + "timezone-changed", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (ECalModelClass, timezone_changed), + NULL, NULL, + e_marshal_VOID__POINTER_POINTER, + G_TYPE_NONE, 2, + G_TYPE_POINTER, + G_TYPE_POINTER); } static void @@ -1434,12 +1445,14 @@ void e_cal_model_set_timezone (ECalModel *model, icaltimezone *zone) { + icaltimezone *old_zone; g_return_if_fail (E_IS_CAL_MODEL (model)); if (model->priv->zone == zone) return; e_table_model_pre_change (E_TABLE_MODEL (model)); + old_zone = model->priv->zone; model->priv->zone = zone; /* the timezone affects the times shown for date fields, @@ -1447,6 +1460,8 @@ e_cal_model_set_timezone (ECalModel *model, e_table_model_changed (E_TABLE_MODEL (model)); g_object_notify (G_OBJECT (model), "timezone"); + g_signal_emit (G_OBJECT (model), signals[TIMEZONE_CHANGED], 0, + old_zone, zone); } void diff --git a/calendar/gui/e-cal-model.h b/calendar/gui/e-cal-model.h index 2d30f1877f..0b31ca34ec 100644 --- a/calendar/gui/e-cal-model.h +++ b/calendar/gui/e-cal-model.h @@ -167,6 +167,9 @@ struct _ECalModelClass { void (*status_message) (ECalModel *model, const gchar *message, gdouble percent); + void (*timezone_changed) (ECalModel *model, + icaltimezone *old_zone, + icaltimezone *new_zone); }; typedef time_t (*ECalModelDefaultTimeFunc) (ECalModel *model, gpointer user_data); diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c index 3df599f5d7..9fb0a78ee4 100644 --- a/calendar/gui/e-day-view.c +++ b/calendar/gui/e-day-view.c @@ -992,12 +992,13 @@ model_comps_deleted_cb (ETableModel *etm, gpointer data, gpointer user_data) } static void -timezone_changed_cb (ECalendarView *cal_view, icaltimezone *old_zone, +timezone_changed_cb (ECalModel *cal_model, icaltimezone *old_zone, icaltimezone *new_zone, gpointer user_data) { struct icaltimetype tt; time_t lower; - EDayView *day_view = (EDayView *) cal_view; + EDayView *day_view = (EDayView *) user_data; + ECalendarView *cal_view = (ECalendarView *) day_view; g_return_if_fail (E_IS_DAY_VIEW (day_view)); @@ -1338,10 +1339,6 @@ e_day_view_init (EDayView *day_view) GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_ASK); e_drag_dest_add_calendar_targets (day_view->main_canvas); - - /* connect to ECalendarView's signals */ - g_signal_connect (G_OBJECT (day_view), "timezone_changed", - G_CALLBACK (timezone_changed_cb), NULL); } static void @@ -1358,6 +1355,8 @@ init_model (EDayView *day_view, ECalModel *model) G_CALLBACK (model_rows_inserted_cb), day_view); g_signal_connect (G_OBJECT (model), "comps_deleted", G_CALLBACK (model_comps_deleted_cb), day_view); + g_signal_connect (G_OBJECT (model), "timezone_changed", + G_CALLBACK (timezone_changed_cb), day_view); } /* Turn off the background of the canvas windows. This reduces flicker diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c index c319520924..b96ec7e093 100644 --- a/calendar/gui/e-week-view.c +++ b/calendar/gui/e-week-view.c @@ -422,11 +422,12 @@ week_view_time_range_changed_cb (EWeekView *week_view, } static void -timezone_changed_cb (ECalendarView *cal_view, +timezone_changed_cb (ECalModel *cal_model, icaltimezone *old_zone, icaltimezone *new_zone, gpointer user_data) { + ECalendarView *cal_view = (ECalendarView *) user_data; struct icaltimetype tt = icaltime_null_time (); time_t lower; EWeekView *week_view = (EWeekView *) cal_view; @@ -829,10 +830,6 @@ e_week_view_init (EWeekView *week_view) week_view->move_cursor = gdk_cursor_new (GDK_FLEUR); week_view->resize_width_cursor = gdk_cursor_new (GDK_SB_H_DOUBLE_ARROW); week_view->last_cursor_set = NULL; - - /* connect to ECalendarView's signals */ - g_signal_connect (G_OBJECT (week_view), "timezone_changed", - G_CALLBACK (timezone_changed_cb), NULL); } /** @@ -844,9 +841,14 @@ e_week_view_init (EWeekView *week_view) ECalendarView * e_week_view_new (ECalModel *model) { + ECalendarView *view; g_return_val_if_fail (E_IS_CAL_MODEL (model), NULL); - return g_object_new (E_TYPE_WEEK_VIEW, "model", model, NULL); + view = g_object_new (E_TYPE_WEEK_VIEW, "model", model, NULL); + + g_signal_connect (G_OBJECT (model), "timezone_changed", + G_CALLBACK (timezone_changed_cb), view); + return view; } static void -- cgit v1.2.3