[evolution/kill-bonobo] Trim more fat off the GnomeCalendar API.



commit 026e76465697c7a8df48af89f4b3845902219fe7
Author: Matthew Barnes <mbarnes redhat com>
Date:   Tue Aug 18 22:47:49 2009 -0400

    Trim more fat off the GnomeCalendar API.
    
    Oh and hey look, I can see events now!

 calendar/gui/ea-gnome-calendar.c            |   11 +-
 calendar/gui/gnome-cal.c                    |  392 +++++++--------------------
 calendar/gui/gnome-cal.h                    |   50 ++--
 calendar/gui/goto.c                         |    6 +-
 calendar/gui/print.c                        |    6 +-
 modules/calendar/e-cal-shell-content.c      |    2 +-
 modules/calendar/e-cal-shell-view-private.c |  166 +++++++++++-
 modules/calendar/e-cal-shell-view-private.h |    2 +
 8 files changed, 306 insertions(+), 329 deletions(-)
---
diff --git a/calendar/gui/ea-gnome-calendar.c b/calendar/gui/ea-gnome-calendar.c
index f021214..58ecad7 100644
--- a/calendar/gui/ea-gnome-calendar.c
+++ b/calendar/gui/ea-gnome-calendar.c
@@ -130,6 +130,8 @@ ea_gnome_calendar_new (GtkWidget *widget)
 const gchar *
 ea_gnome_calendar_get_label_description (GnomeCalendar *gcal)
 {
+	GnomeCalendarViewType view_type;
+	ECalendarView *calendar_view;
 	ECalModel *model;
 	icaltimezone *zone;
 	struct icaltimetype start_tt, end_tt;
@@ -139,10 +141,15 @@ ea_gnome_calendar_get_label_description (GnomeCalendar *gcal)
 	gchar end_buffer[256];
 	GnomeCalendarViewType view;
 
-	model = gnome_calendar_get_calendar_model (gcal);
-	gnome_calendar_get_visible_time_range (gcal, &start_time, &end_time);
+	model = gnome_calendar_get_model (gcal);
 	zone = e_cal_model_get_timezone (model);
 
+	view_type = gnome_calendar_get_view (gcal);
+	calendar_view = gnome_calendar_get_calendar_view (gcal, view_type);
+
+	e_calendar_view_get_visible_time_range (
+		calendar_view, &start_time, &end_time);
+
 	start_tt = icaltime_from_timet_with_zone (start_time, FALSE, zone);
 	start_tm.tm_year = start_tt.year - 1900;
 	start_tm.tm_mon = start_tt.month - 1;
diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c
index 3594ee3..1076647 100644
--- a/calendar/gui/gnome-cal.c
+++ b/calendar/gui/gnome-cal.c
@@ -77,6 +77,8 @@ static GHashTable *non_intrusive_error_table = NULL;
 struct _GnomeCalendarPrivate {
 	EShellSettings *shell_settings;
 
+	ECalModel *model;
+
 	/* The clients for display */
 	GHashTable *clients;
 	GList *clients_list;
@@ -162,18 +164,11 @@ static guint signals[LAST_SIGNAL];
 static void gnome_calendar_destroy (GtkObject *object);
 static void gnome_calendar_goto_date (GnomeCalendar *gcal,
 				      GnomeCalendarGotoDateType goto_date);
-static void gnome_calendar_change_view (GnomeCalendar *gcal,
-					 GnomeCalendarViewType view_type);
 
-static void update_view_times (GnomeCalendar *gcal, time_t start_time);
 static void gnome_calendar_update_date_navigator (GnomeCalendar *gcal);
 
 static gboolean gnome_calendar_hpane_resized (GtkWidget *w, GdkEventButton *e, GnomeCalendar *gcal);
 
-static void gnome_calendar_on_date_navigator_selection_changed (ECalendarItem    *calitem,
-								GnomeCalendar    *gcal);
-static void gnome_calendar_notify_dates_shown_changed (GnomeCalendar *gcal);
-
 static void update_todo_view (GnomeCalendar *gcal);
 static void update_memo_view (GnomeCalendar *gcal);
 static void default_client_cal_opened_cb (ECal *ecal, ECalendarStatus status, GnomeCalendar *gcal);
@@ -249,7 +244,7 @@ update_adjustment (GnomeCalendar *gcal,
 	start_tt.month = g_date_get_month (&date);
 	start_tt.day = g_date_get_day (&date);
 
-	model = gnome_calendar_get_calendar_model (gcal);
+	model = gnome_calendar_get_model (gcal);
 	timezone = e_cal_model_get_timezone (model);
 	lower = icaltime_as_timet_with_zone (start_tt, timezone);
 
@@ -413,6 +408,7 @@ gnome_calendar_constructed (GObject *object)
 	/* Create the model for the views. */
 	model = e_cal_model_calendar_new (shell_settings);
 	e_cal_model_set_flags (model, E_CAL_MODEL_FLAGS_EXPAND_RECURRENCES);
+	gcal->priv->model = model;
 
 	g_signal_connect (
 		model, "cal-view-progress",
@@ -511,7 +507,7 @@ gnome_calendar_class_init (GnomeCalendarClass *class)
 	class->source_added = NULL;
 	class->source_removed = NULL;
 	class->goto_date = gnome_calendar_goto_date;
-	class->change_view = gnome_calendar_change_view;
+	class->change_view = gnome_calendar_set_view;
 
 	g_object_class_install_property (
 		object_class,
@@ -723,7 +719,7 @@ ensure_dates_are_in_default_zone (GnomeCalendar *gcal,
 	icaltimezone *timezone;
 	icaltimetype dt;
 
-	model = gnome_calendar_get_calendar_model (gcal);
+	model = gnome_calendar_get_model (gcal);
 	timezone = e_cal_model_get_timezone (model);
 
 	if (timezone == NULL)
@@ -828,8 +824,11 @@ get_times_for_views (GnomeCalendar *gcal, GnomeCalendarViewType view_type, time_
 	guint offset;
 	struct icaltimetype tt = icaltime_null_time ();
 	icaltimezone *timezone;
+	gboolean range_selected;
+
+	model = gnome_calendar_get_model (gcal);
+	range_selected = gnome_calendar_get_range_selected (gcal);
 
-	model = gnome_calendar_get_calendar_model (gcal);
 	timezone = e_cal_model_get_timezone (model);
 	week_start_day = e_cal_model_get_week_start_day (model);
 
@@ -911,7 +910,7 @@ get_times_for_views (GnomeCalendar *gcal, GnomeCalendarViewType view_type, time_
 		/* FIXME We should be using the same day of the week enum every where */
 		display_start = (E_WEEK_VIEW (priv->views[view_type])->display_start_day + 1) % 7;
 
-		if (!priv->range_selected && (!E_WEEK_VIEW (priv->views[view_type])->multi_week_view || !E_WEEK_VIEW (priv->views[view_type])->month_scroll_by_week))
+		if (!range_selected && (!E_WEEK_VIEW (priv->views[view_type])->multi_week_view || !E_WEEK_VIEW (priv->views[view_type])->month_scroll_by_week))
 			*start_time = time_month_begin_with_zone (*start_time, timezone);
 		*start_time = time_week_begin_with_zone (*start_time, display_start, timezone);
 		*end_time = time_add_week_with_zone (*start_time, shown, timezone);
@@ -940,7 +939,7 @@ get_date_navigator_range (GnomeCalendar *gcal, time_t *start_time, time_t *end_t
 	struct icaltimetype end_tt;
 	icaltimezone *timezone;
 
-	model = gnome_calendar_get_calendar_model (gcal);
+	model = gnome_calendar_get_model (gcal);
 	timezone = e_cal_model_get_timezone (model);
 
 	start_tt = icaltime_null_time ();
@@ -1109,6 +1108,7 @@ gnome_calendar_set_search_query (GnomeCalendar *gcal,
                                  time_t end_range)
 {
 	GnomeCalendarPrivate *priv;
+	ECalModel *model;
 	gint i;
 	time_t start, end;
 
@@ -1117,6 +1117,8 @@ gnome_calendar_set_search_query (GnomeCalendar *gcal,
 
 	priv = gcal->priv;
 
+	model = gnome_calendar_get_model (gcal);
+
 	/* Set the query on the date navigator */
 
 	g_free (priv->sexp);
@@ -1135,18 +1137,20 @@ gnome_calendar_set_search_query (GnomeCalendar *gcal,
 	/* Set the query on the views */
 	if (i == GNOME_CAL_LIST_VIEW) {
 		if (!priv->lview_select_daten_range) {
-			e_cal_model_set_search_query_with_time_range (e_calendar_view_get_model (priv->views[i]), sexp, start, end);
+			e_cal_model_set_search_query_with_time_range (
+				model, sexp, start, end);
 		} else {
 			start = priv->base_view_time;
 			get_times_for_views (gcal, GNOME_CAL_LIST_VIEW, &start, &end, NULL);
 
-			e_cal_model_set_search_query_with_time_range (e_calendar_view_get_model (priv->views[i]), sexp, start, end);
+			e_cal_model_set_search_query_with_time_range (
+				model, sexp, start, end);
 
 			if (priv->current_view_type == GNOME_CAL_LIST_VIEW)
 				gnome_calendar_update_date_navigator (gcal);
 		}
 	} else
-		e_cal_model_set_search_query (e_calendar_view_get_model (priv->views[i]), sexp);
+		e_cal_model_set_search_query (model, sexp);
 
 	/* Set the query on the task pad */
 	update_todo_view (gcal);
@@ -1159,7 +1163,7 @@ set_timezone (GnomeCalendar *gcal)
 	icaltimezone *timezone;
 	GList *l;
 
-	model = gnome_calendar_get_calendar_model (gcal);
+	model = gnome_calendar_get_model (gcal);
 	timezone = e_cal_model_get_timezone (model);
 
 	for (l = gcal->priv->clients_list; l != NULL; l = l->next) {
@@ -1244,7 +1248,7 @@ update_memo_view (GnomeCalendar *gcal)
 
 	/* Set the query on the memo pad*/
 	model = e_memo_table_get_model (E_MEMO_TABLE (priv->memo));
-	view_model = e_calendar_view_get_model(priv->views[priv->current_view_type]);
+	view_model = gnome_calendar_get_model (gcal);
 	e_cal_model_get_time_range (view_model, &start, &end);
 
 	if (start != -1 && end != -1) {
@@ -1403,8 +1407,6 @@ gnome_calendar_destroy (GtkObject *object)
 	GnomeCalendar *gcal;
 	GnomeCalendarPrivate *priv;
 	gchar *filename;
-	ECalModel *cal_model;
-	ECalendarView *view;
 
 	g_return_if_fail (object != NULL);
 	g_return_if_fail (GNOME_IS_CALENDAR (object));
@@ -1421,6 +1423,15 @@ gnome_calendar_destroy (GtkObject *object)
 			priv->shell_settings = NULL;
 		}
 
+		if (priv->model != NULL) {
+			g_signal_handlers_disconnect_by_func (
+				priv->model, view_progress_cb, gcal);
+			g_signal_handlers_disconnect_by_func (
+				priv->model, view_done_cb, gcal);
+			g_object_unref (priv->model);
+			priv->model = NULL;
+		}
+
 		/* Clean up the clients */
 		for (l = priv->clients_list; l != NULL; l = l->next) {
 			g_signal_handlers_disconnect_matched (l->data, G_SIGNAL_MATCH_DATA,
@@ -1477,15 +1488,6 @@ gnome_calendar_destroy (GtkObject *object)
 			priv->update_marcus_bains_line_timeout = 0;
 		}
 
-		/* Disconnect all handlers */
-		view = gnome_calendar_get_calendar_view (
-			gcal, GNOME_CAL_WEEK_VIEW);
-		cal_model = e_calendar_view_get_model (view);
-		g_signal_handlers_disconnect_by_func (
-			cal_model, view_progress_cb, gcal);
-		g_signal_handlers_disconnect_by_func (
-			cal_model, view_done_cb, gcal);
-
 		g_mutex_free (priv->todo_update_lock);
 
 		g_free (priv);
@@ -1520,7 +1522,7 @@ gnome_calendar_goto_date (GnomeCalendar *gcal,
 
 	g_return_if_fail (GNOME_IS_CALENDAR(gcal));
 
-	model = gnome_calendar_get_calendar_model (gcal);
+	model = gnome_calendar_get_model (gcal);
 	week_start_day = e_cal_model_get_week_start_day (model);
 	timezone = e_cal_model_get_timezone (model);
 
@@ -1603,19 +1605,23 @@ gnome_calendar_goto (GnomeCalendar *gcal, time_t new_time)
 	}
 }
 
-static void
-update_view_times (GnomeCalendar *gcal, time_t start_time)
+void
+gnome_calendar_update_view_times (GnomeCalendar *gcal,
+                                  time_t start_time)
 {
 	GnomeCalendarPrivate *priv;
 	ECalModel *model;
 	time_t real_start_time = start_time;
 	time_t end_time, select_time = 0;
 
+	g_return_if_fail (GNOME_IS_CALENDAR (gcal));
+
 	priv = gcal->priv;
 
 	priv->base_view_time = start_time;
 
-	model = e_calendar_view_get_model (priv->views[priv->current_view_type]);
+	model = gnome_calendar_get_model (gcal);
+
 	get_times_for_views (gcal, priv->current_view_type, &real_start_time, &end_time, &select_time);
 
 	if (priv->current_view_type == GNOME_CAL_LIST_VIEW && !priv->lview_select_daten_range)
@@ -1633,7 +1639,7 @@ gnome_calendar_direction (GnomeCalendar *gcal, gint direction)
 	ECalModel *model;
 	icaltimezone *timezone;
 
-	model = gnome_calendar_get_calendar_model (gcal);
+	model = gnome_calendar_get_model (gcal);
 	timezone = e_cal_model_get_timezone (model);
 
 	switch (gnome_calendar_get_view (gcal)) {
@@ -1683,13 +1689,13 @@ gnome_calendar_dayjump (GnomeCalendar *gcal, time_t time)
 
 	g_return_if_fail (GNOME_IS_CALENDAR (gcal));
 
-	model = gnome_calendar_get_calendar_model (gcal);
+	model = gnome_calendar_get_model (gcal);
 	timezone = e_cal_model_get_timezone (model);
 
 	gcal->priv->base_view_time =
 		time_day_begin_with_zone (time, timezone);
 
-	update_view_times (gcal, gcal->priv->base_view_time);
+	gnome_calendar_update_view_times (gcal, gcal->priv->base_view_time);
 	gnome_calendar_set_view (gcal, GNOME_CAL_DAY_VIEW);
 }
 
@@ -1724,22 +1730,6 @@ gnome_calendar_get_view (GnomeCalendar *gcal)
 	return gcal->priv->current_view_type;
 }
 
-static void
-set_view (GnomeCalendar *gcal, GnomeCalendarViewType view_type, gboolean range_selected)
-{
-	ECalendarView *view;
-
-	g_return_if_fail (GNOME_IS_CALENDAR (gcal));
-
-	gcal->priv->range_selected = range_selected;
-	gcal->priv->current_view_type = view_type;
-
-	view = gnome_calendar_get_calendar_view (gcal, view_type);
-	gtk_widget_grab_focus (GTK_WIDGET (view));
-
-	g_object_notify (G_OBJECT (gcal), "view");
-}
-
 /**
  * gnome_calendar_set_view:
  * @gcal: A calendar.
@@ -1750,20 +1740,20 @@ set_view (GnomeCalendar *gcal, GnomeCalendarViewType view_type, gboolean range_s
  * the view; otherwise the last configuration will be kept.
  **/
 void
-gnome_calendar_set_view (GnomeCalendar *gcal, GnomeCalendarViewType view_type)
+gnome_calendar_set_view (GnomeCalendar *gcal,
+                         GnomeCalendarViewType view_type)
 {
+	ECalendarView *calendar_view;
+
 	g_return_if_fail (GNOME_IS_CALENDAR (gcal));
 
-	set_view (gcal, view_type, FALSE);
-}
+	gcal->priv->current_view_type = view_type;
+	gnome_calendar_set_range_selected (gcal, FALSE);
 
-static void
-gnome_calendar_change_view (GnomeCalendar *gcal, GnomeCalendarViewType view_type)
-{
-	if (gnome_calendar_get_view(gcal) == view_type)
-		return;
+	calendar_view = gnome_calendar_get_calendar_view (gcal, view_type);
+	gtk_widget_grab_focus (GTK_WIDGET (calendar_view));
 
-	gnome_calendar_set_view(gcal, view_type);
+	g_object_notify (G_OBJECT (gcal), "view");
 }
 
 void
@@ -1773,6 +1763,7 @@ gnome_calendar_display_view (GnomeCalendar *gcal,
 	CalendarView *cal_view;
 	ECalendarView *view;
 	gboolean preserve_day;
+	gboolean range_selected;
 	time_t start_time;
 	gint ii;
 
@@ -1787,7 +1778,7 @@ gnome_calendar_display_view (GnomeCalendar *gcal,
 
 	switch (view_type) {
 	case GNOME_CAL_DAY_VIEW:
-		if (!gcal->priv->range_selected)
+		if (!gnome_calendar_get_range_selected (gcal))
 			e_day_view_set_days_shown (E_DAY_VIEW (view), 1);
 
 		gtk_widget_show (GTK_WIDGET (gcal->priv->date_navigator));
@@ -1804,7 +1795,7 @@ gnome_calendar_display_view (GnomeCalendar *gcal,
 		break;
 
 	case GNOME_CAL_MONTH_VIEW:
-		if (!gcal->priv->range_selected)
+		if (!gnome_calendar_get_range_selected (gcal))
 			e_week_view_set_weeks_shown (E_WEEK_VIEW (view), 6);
 
 		preserve_day = TRUE;
@@ -1822,7 +1813,9 @@ gnome_calendar_display_view (GnomeCalendar *gcal,
 		g_return_if_reached ();
 	}
 
-	set_view (gcal, view_type, gcal->priv->range_selected);
+	range_selected = gnome_calendar_get_range_selected (gcal);
+	gnome_calendar_set_view (gcal, view_type);
+	gnome_calendar_set_range_selected (gcal, range_selected);
 
 	/* XXX Move this to set_view()? */
 	E_CALENDAR_VIEW (gcal->priv->views[view_type])->in_focus = TRUE;
@@ -1965,7 +1958,7 @@ client_cal_opened_cb (ECal *ecal, ECalendarStatus status, GnomeCalendar *gcal)
 	g_free (msg);
 
 	/* add client to the views */
-	model = e_calendar_view_get_model (priv->views[priv->current_view_type]);
+	model = gnome_calendar_get_model (gcal);
 	add_mclient (model, ecal);
 
 	/* update date navigator query */
@@ -1980,6 +1973,7 @@ default_client_cal_opened_cb (ECal *ecal, ECalendarStatus status, GnomeCalendar
 	GnomeCalendarPrivate *priv;
 	ESource *source;
 	ECalLoadState state;
+	ECalModel *model;
 
 	priv = gcal->priv;
 
@@ -2027,10 +2021,8 @@ default_client_cal_opened_cb (ECal *ecal, ECalendarStatus status, GnomeCalendar
 
 	g_signal_handlers_disconnect_matched (ecal, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, default_client_cal_opened_cb, NULL);
 
-	e_cal_model_set_default_client (
-		e_calendar_view_get_model (
-		E_CALENDAR_VIEW (priv->views[priv->current_view_type])),
-		ecal);
+	model = gnome_calendar_get_model (gcal);
+	e_cal_model_set_default_client (model, ecal);
 }
 
 typedef void (*open_func) (ECal *, ECalendarStatus, GnomeCalendar *);
@@ -2158,8 +2150,6 @@ void
 gnome_calendar_set_date_navigator (GnomeCalendar *gcal,
                                    ECalendar *date_navigator)
 {
-	ECalendarItem *calitem;
-
 	g_return_if_fail (GNOME_IS_CALENDAR (gcal));
 
 	if (date_navigator != NULL) {
@@ -2167,25 +2157,16 @@ gnome_calendar_set_date_navigator (GnomeCalendar *gcal,
 		g_object_ref (date_navigator);
 	}
 
-	/* FIXME This ignores the possibility that a date navigator
-	 *       object already exists.  But this function should
-	 *       only be called once anyway. */
 	if (gcal->priv->date_navigator != NULL)
 		g_object_unref (gcal->priv->date_navigator);
 
 	gcal->priv->date_navigator = date_navigator;
-	calitem = date_navigator->calitem;
-
-	g_signal_connect (
-		calitem, "selection-changed",
-		G_CALLBACK (gnome_calendar_on_date_navigator_selection_changed),
-		gcal);
 
 	g_object_notify (G_OBJECT (gcal), "date-navigator");
 }
 
 /**
- * gnome_calendar_get_calendar_model:
+ * gnome_calendar_get_model:
  * @gcal: A calendar view.
  *
  * Queries the calendar model object that a calendar view is using.
@@ -2193,91 +2174,11 @@ gnome_calendar_set_date_navigator (GnomeCalendar *gcal,
  * Return value: A calendar client interface object.
  **/
 ECalModel *
-gnome_calendar_get_calendar_model (GnomeCalendar *gcal)
-{
-	ECalendarView *calendar_view;
-
-	g_return_val_if_fail (GNOME_IS_CALENDAR (gcal), NULL);
-
-	/* XXX This is kind of silly.  The views all share the same
-	 *     model now.  We should just keep our own reference. */
-	calendar_view = gcal->priv->views[gcal->priv->current_view_type];
-
-	return e_calendar_view_get_model (calendar_view);
-}
-
-/**
- * gnome_calendar_get_default_client
- */
-ECal *
-gnome_calendar_get_default_client (GnomeCalendar *gcal)
+gnome_calendar_get_model (GnomeCalendar *gcal)
 {
-	GnomeCalendarPrivate *priv;
-
 	g_return_val_if_fail (GNOME_IS_CALENDAR (gcal), NULL);
 
-	priv = gcal->priv;
-
-	return e_cal_model_get_default_client (e_calendar_view_get_model (gcal->priv->views[priv->current_view_type]));
-}
-
-/**
- * gnome_calendar_add_source:
- * @gcal: A GnomeCalendar.
- * @source: #ESource to add to the calendar views.
- *
- * Adds the given calendar source to the calendar views.
- *
- * Returns: TRUE if successful, FALSE if error.
- */
-gboolean
-gnome_calendar_add_source (GnomeCalendar *gcal, ESource *source)
-{
-	GnomeCalendarPrivate *priv;
-	ECal *client;
-
-	g_return_val_if_fail (GNOME_IS_CALENDAR (gcal), FALSE);
-	g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
-
-	priv = gcal->priv;
-
-	client = g_hash_table_lookup (priv->clients, e_source_peek_uid (source));
-	if (client) {
-		/* We already have it */
-
-		return TRUE;
-	} else {
-		ESource *default_source;
-
-		if (priv->default_client) {
-			default_source = e_cal_get_source (priv->default_client);
-
-			g_message ("Check if default client matches (%s %s)", e_source_peek_uid (default_source), e_source_peek_uid (source));
-			/* We don't have it but the default client is it */
-			if (!strcmp (e_source_peek_uid (default_source), e_source_peek_uid (source)))
-				client = g_object_ref (priv->default_client);
-		}
-
-		/* Create a new one */
-		if (!client) {
-			client = auth_new_cal_from_source (source, E_CAL_SOURCE_TYPE_EVENT);
-			if (!client)
-				return FALSE;
-		}
-	}
-
-	g_signal_connect (G_OBJECT (client), "backend_error", G_CALLBACK (backend_error_cb), gcal);
-	g_signal_connect (G_OBJECT (client), "backend_died", G_CALLBACK (backend_died_cb), gcal);
-
-	/* add the client to internal structure */
-	g_hash_table_insert (priv->clients, g_strdup (e_source_peek_uid (source)), client);
-	priv->clients_list = g_list_prepend (priv->clients_list, client);
-
-	g_signal_emit (gcal, signals[SOURCE_ADDED], 0, source);
-
-	open_ecal (gcal, client, FALSE, client_cal_opened_cb);
-
-	return TRUE;
+	return gcal->priv->model;
 }
 
 /**
@@ -2339,7 +2240,7 @@ gnome_calendar_remove_source_by_uid (GnomeCalendar *gcal, const gchar *uid)
 		}
 	}
 
-	model = e_calendar_view_get_model (priv->views[priv->current_view_type]);
+	model = gnome_calendar_get_model (gcal);
 	e_cal_model_remove_client (model, client);
 
 	/* update date navigator query */
@@ -2391,11 +2292,28 @@ gnome_calendar_set_default_source (GnomeCalendar *gcal, ESource *source)
 	return TRUE;
 }
 
+gboolean
+gnome_calendar_get_range_selected (GnomeCalendar *gcal)
+{
+	g_return_val_if_fail (GNOME_IS_CALENDAR (gcal), FALSE);
+
+	return gcal->priv->range_selected;
+}
+
+void
+gnome_calendar_set_range_selected (GnomeCalendar *gcal,
+                                   gboolean range_selected)
+{
+	g_return_if_fail (GNOME_IS_CALENDAR (gcal));
+
+	gcal->priv->range_selected = range_selected;
+}
+
 void
 gnome_calendar_set_selected_time_range (GnomeCalendar *gcal,
 					time_t	       start_time)
 {
-	update_view_times (gcal, start_time);
+	gnome_calendar_update_view_times (gcal, start_time);
 	gnome_calendar_update_date_navigator (gcal);
 	gnome_calendar_notify_dates_shown_changed (gcal);
 }
@@ -2413,16 +2331,11 @@ gnome_calendar_get_selected_time_range (GnomeCalendar *gcal,
 					time_t	 *start_time,
 					time_t	 *end_time)
 {
-	GnomeCalendarViewType view_type;
-	ECalendarView *view;
 	ECalModel *model;
 
 	g_return_if_fail (GNOME_IS_CALENDAR (gcal));
 
-	view_type = gnome_calendar_get_view (gcal);
-	view = gnome_calendar_get_calendar_view (gcal, view_type);
-	model = e_calendar_view_get_model (view);
-
+	model = gnome_calendar_get_model (gcal);
 	e_cal_model_get_time_range (model, start_time, end_time);
 }
 
@@ -2504,25 +2417,6 @@ gnome_calendar_get_current_time_range (GnomeCalendar *gcal,
 	e_calendar_view_get_selected_time_range (view, start_time, end_time);
 }
 
-/* Gets the visible time range for the current view. Returns FALSE if no
-   time range has been set yet. */
-gboolean
-gnome_calendar_get_visible_time_range (GnomeCalendar *gcal,
-				       time_t	 *start_time,
-				       time_t	 *end_time)
-{
-	GnomeCalendarViewType view_type;
-	ECalendarView *view;
-
-	g_return_val_if_fail (GNOME_IS_CALENDAR (gcal), FALSE);
-
-	view_type = gnome_calendar_get_view (gcal);
-	view = gnome_calendar_get_calendar_view (gcal, view_type);
-
-	return e_calendar_view_get_visible_time_range (
-		view, start_time, end_time);
-}
-
 /* This updates the month shown and the days selected in the calendar, if
    necessary. */
 static void
@@ -2548,7 +2442,7 @@ gnome_calendar_update_date_navigator (GnomeCalendar *gcal)
 	if (priv->current_view_type == GNOME_CAL_LIST_VIEW && !priv->lview_select_daten_range)
 		return;
 
-	model = gnome_calendar_get_calendar_model (gcal);
+	model = gnome_calendar_get_model (gcal);
 	timezone = e_cal_model_get_timezone (model);
 	week_start_day = e_cal_model_get_week_start_day (model);
 	e_cal_model_get_time_range (model, &start, &end);
@@ -2568,114 +2462,19 @@ gnome_calendar_update_date_navigator (GnomeCalendar *gcal)
 				       &start_date, &end_date);
 }
 
-static void
-gnome_calendar_on_date_navigator_selection_changed (ECalendarItem *calitem, GnomeCalendar *gcal)
-{
-	GnomeCalendarPrivate *priv;
-	GnomeCalendarViewType view_type;
-	ECalendarView *view;
-	ECalModel *model;
-	GDate start_date, end_date, new_start_date, new_end_date;
-	gint new_days_shown;
-	gint week_start_day;
-	gboolean starts_on_week_start_day;
-	time_t new_time, start, end;
-	struct icaltimetype tt;
-	icaltimezone *timezone;
-
-	priv = gcal->priv;
-
-	starts_on_week_start_day = FALSE;
-
-	view_type = gnome_calendar_get_view (gcal);
-	model = gnome_calendar_get_calendar_model (gcal);
-	timezone = e_cal_model_get_timezone (model);
-	week_start_day = e_cal_model_get_week_start_day (model);
-	e_cal_model_get_time_range (model, &start, &end);
-
-	time_to_gdate_with_zone (&start_date, start, timezone);
-	if (view_type == GNOME_CAL_MONTH_VIEW) {
-		ECalendarView *calendar_view;
-		EWeekView *week_view;
-
-		calendar_view = gnome_calendar_get_calendar_view (gcal, view_type);
-		week_view = E_WEEK_VIEW (calendar_view);
-
-		if (week_start_day == 0 && (!week_view->multi_week_view || week_view->compress_weekend))
-			g_date_add_days (&start_date, 1);
-	}
-	time_to_gdate_with_zone (&end_date, end, timezone);
-	g_date_subtract_days (&end_date, 1);
-
-	e_calendar_item_get_selection (calitem, &new_start_date, &new_end_date);
-
-	/* If the selection hasn't changed just return. */
-	if (!g_date_compare (&start_date, &new_start_date)
-	    && !g_date_compare (&end_date, &new_end_date)) {
-		return;
-	}
-
-	new_days_shown = g_date_get_julian (&new_end_date) - g_date_get_julian (&new_start_date) + 1;
-
-	/* If a complete week is selected we show the Week view.
-	   Note that if weekends are compressed and the week start day is set
-	   to Sunday we don't actually show complete weeks in the Week view,
-	   so this may need tweaking. */
-	if (g_date_get_weekday (&new_start_date) % 7 == week_start_day)
-		starts_on_week_start_day = TRUE;
-
-	/* Update selection to be in the new time range */
-	tt = icaltime_null_time ();
-	tt.year = g_date_get_year (&new_start_date);
-	tt.month  = g_date_get_month (&new_start_date);
-	tt.day = g_date_get_day (&new_start_date);
-	new_time = icaltime_as_timet_with_zone (tt, timezone);
-
-	/* Switch views as appropriate, and change the number of days or weeks
-	   shown. */
-	if (new_days_shown > 9) {
-		/* FIXME Gross hack so that the view times are updated properly */
-		priv->range_selected = TRUE;
-
-		if (priv->current_view_type != GNOME_CAL_LIST_VIEW) {
-			view = gnome_calendar_get_calendar_view (
-				gcal, GNOME_CAL_MONTH_VIEW);
-			e_week_view_set_weeks_shown (
-				E_WEEK_VIEW (view), (new_days_shown + 6) / 7);
-			view_type = GNOME_CAL_MONTH_VIEW;
-		} else
-			view_type = GNOME_CAL_LIST_VIEW;
-	} else if (new_days_shown == 7 && starts_on_week_start_day) {
-		view_type = GNOME_CAL_WEEK_VIEW;
-	} else {
-		view = gnome_calendar_get_calendar_view (
-			gcal, GNOME_CAL_DAY_VIEW);
-		e_day_view_set_days_shown (E_DAY_VIEW (view), new_days_shown);
-
-		if (new_days_shown == 5 && starts_on_week_start_day
-		    && priv->current_view_type == GNOME_CAL_WORK_WEEK_VIEW)
-			view_type = GNOME_CAL_WORK_WEEK_VIEW;
-		else
-			view_type = GNOME_CAL_DAY_VIEW;
-	}
-
-	/* Make the views display things properly */
-	update_view_times (gcal, new_time);
-	set_view (gcal, view_type, TRUE);
-
-	gnome_calendar_notify_dates_shown_changed (gcal);
-}
-
 static gboolean
 gnome_calendar_hpane_resized (GtkWidget *w, GdkEventButton *e, GnomeCalendar *gcal)
 {
 	GnomeCalendarPrivate *priv;
 	ECalendarView *view;
+	gboolean range_selected;
 	gint times_width;
 
 	priv = gcal->priv;
 
-	if (priv->current_view_type == GNOME_CAL_MONTH_VIEW && !priv->range_selected) {
+	range_selected = gnome_calendar_get_range_selected (gcal);
+
+	if (priv->current_view_type == GNOME_CAL_MONTH_VIEW && !range_selected) {
 		priv->hpane_pos_month_view = gtk_paned_get_position (GTK_PANED (priv->hpane));
 		calendar_config_set_month_hpane_pos (priv->hpane_pos_month_view);
 	} else {
@@ -2736,19 +2535,26 @@ gnome_calendar_paste_clipboard (GnomeCalendar *gcal)
 	e_calendar_view_paste_clipboard (view);
 }
 
-static void
+void
 gnome_calendar_notify_dates_shown_changed (GnomeCalendar *gcal)
 {
+	GnomeCalendarViewType view_type;
+	ECalendarView *calendar_view;
 	GnomeCalendarPrivate *priv;
 	time_t start_time, end_time;
+	gboolean has_time_range;
 
 	g_return_if_fail (GNOME_IS_CALENDAR (gcal));
 
 	priv = gcal->priv;
 
+	view_type = gnome_calendar_get_view (gcal);
+	calendar_view = gnome_calendar_get_calendar_view (gcal, view_type);
+
 	/* If no time range is set yet, just return. */
-	if (!gnome_calendar_get_visible_time_range (gcal, &start_time,
-						    &end_time))
+	has_time_range = e_calendar_view_get_visible_time_range (
+		calendar_view, &start_time, &end_time);
+	if (!has_time_range)
 		return;
 
 	/* We check if the visible date range has changed, and only emit the
diff --git a/calendar/gui/gnome-cal.h b/calendar/gui/gnome-cal.h
index 40b0adc..a9e2492 100644
--- a/calendar/gui/gnome-cal.h
+++ b/calendar/gui/gnome-cal.h
@@ -108,10 +108,8 @@ ECalendar *	gnome_calendar_get_date_navigator
 void		gnome_calendar_set_date_navigator
 						(GnomeCalendar *gcal,
 						 ECalendar *date_navigator);
-ECalModel *gnome_calendar_get_calendar_model    (GnomeCalendar *gcal);
-ECal *gnome_calendar_get_default_client    (GnomeCalendar *gcal);
+ECalModel *	gnome_calendar_get_model	(GnomeCalendar *gcal);
 
-gboolean   gnome_calendar_add_source      (GnomeCalendar *gcal, ESource *source);
 gboolean   gnome_calendar_remove_source   (GnomeCalendar *gcal, ESource *source);
 gboolean   gnome_calendar_remove_source_by_uid   (GnomeCalendar *gcal, const gchar *uid);
 gboolean   gnome_calendar_set_default_source (GnomeCalendar *gcal, ESource *source);
@@ -126,39 +124,49 @@ void       gnome_calendar_next		(GnomeCalendar *gcal);
 void       gnome_calendar_previous		(GnomeCalendar *gcal);
 void       gnome_calendar_goto		(GnomeCalendar *gcal,
 						 time_t new_time);
+void		gnome_calendar_update_view_times(GnomeCalendar *gcal,
+						 time_t start_time);
 void       gnome_calendar_dayjump		(GnomeCalendar *gcal,
 						 time_t time);
 /* Jumps to the current day */
 void       gnome_calendar_goto_today            (GnomeCalendar *gcal);
 
-GnomeCalendarViewType gnome_calendar_get_view (GnomeCalendar *gcal);
-void gnome_calendar_set_view (GnomeCalendar *gcal, GnomeCalendarViewType view_type);
+GnomeCalendarViewType
+		gnome_calendar_get_view		(GnomeCalendar *gcal);
+void		gnome_calendar_set_view		(GnomeCalendar *gcal,
+						 GnomeCalendarViewType view_type);
 void		gnome_calendar_display_view	(GnomeCalendar *gcal,
 						 GnomeCalendarViewType view_type);
 
-struct _ECalendarView *gnome_calendar_get_calendar_view (GnomeCalendar *gcal,
-							 GnomeCalendarViewType view_type);
+struct _ECalendarView *
+		gnome_calendar_get_calendar_view(GnomeCalendar *gcal,
+						 GnomeCalendarViewType view_type);
 
-void	   gnome_calendar_set_selected_time_range (GnomeCalendar *gcal,
-						   time_t	  start_time);
-void	   gnome_calendar_get_selected_time_range (GnomeCalendar *gcal,
-						   time_t	 *start_time,
-						   time_t	 *end_time);
+gboolean	gnome_calendar_get_range_selected
+						(GnomeCalendar *gcal);
+void		gnome_calendar_set_range_selected
+						(GnomeCalendar *gcal,
+						 gboolean range_selected);
+void		gnome_calendar_set_selected_time_range
+						(GnomeCalendar *gcal,
+						 time_t start_time);
+void		gnome_calendar_get_selected_time_range
+						(GnomeCalendar *gcal,
+						 time_t *start_time,
+						 time_t *end_time);
 
 void       gnome_calendar_new_task		(GnomeCalendar *gcal, time_t *dtstart, time_t *dtend);
 
 /* Returns the selected time range for the current view. Note that this may be
    different from the fields in the GnomeCalendar, since the view may clip
    this or choose a more appropriate time. */
-void	   gnome_calendar_get_current_time_range (GnomeCalendar *gcal,
-						  time_t	 *start_time,
-						  time_t	 *end_time);
-
-/* Gets the visible time range for the current view. Returns FALSE if no
-   time range has been set yet. */
-gboolean   gnome_calendar_get_visible_time_range (GnomeCalendar *gcal,
-						  time_t	 *start_time,
-						  time_t	 *end_time);
+void		gnome_calendar_get_current_time_range
+						(GnomeCalendar *gcal,
+						 time_t *start_time,
+						 time_t *end_time);
+
+void		gnome_calendar_notify_dates_shown_changed
+						(GnomeCalendar *gcal);
 
 /* Returns the number of selected events (0 or 1 at present). */
 gint	   gnome_calendar_get_num_events_selected (GnomeCalendar *gcal);
diff --git a/calendar/gui/goto.c b/calendar/gui/goto.c
index 5f3e80f..15e8337 100644
--- a/calendar/gui/goto.c
+++ b/calendar/gui/goto.c
@@ -77,9 +77,11 @@ ecal_date_range_changed (ECalendarItem *calitem, gpointer user_data)
 {
 #if 0  /* KILL-BONOBO */
 	GoToDialog *dlg = user_data;
+	ECalModel *model;
 	ECal *client;
 
-	client = gnome_calendar_get_default_client (dlg->gcal);
+	model = gnome_calendar_get_model (dlg->gcal);
+	client = e_cal_model_get_default_client (model);
 	if (client)
 		tag_calendar_by_client (dlg->ecal, client);
 #endif
@@ -99,7 +101,7 @@ ecal_event (ECalendarItem *calitem, gpointer user_data)
 	icaltimezone *timezone;
 	time_t et;
 
-	model = gnome_calendar_get_calendar_model (dlg->gcal);
+	model = gnome_calendar_get_model (dlg->gcal);
 	e_calendar_item_get_selection (calitem, &start_date, &end_date);
 	timezone = e_cal_model_get_timezone (model);
 
diff --git a/calendar/gui/print.c b/calendar/gui/print.c
index b68320e..e6563cd 100644
--- a/calendar/gui/print.c
+++ b/calendar/gui/print.c
@@ -676,7 +676,7 @@ print_month_small (GtkPrintContext *context, GnomeCalendar *gcal, time_t month,
 				sprintf (buf, "%d", day);
 
 				/* this is a slow messy way to do this ... but easy ... */
-				e_cal_model_generate_instances (gnome_calendar_get_calendar_model (gcal), now,
+				e_cal_model_generate_instances (gnome_calendar_get_model (gcal), now,
 								time_day_end_with_zone (now, zone),
 								instance_cb, &found);
 
@@ -1247,7 +1247,7 @@ print_day_details (GtkPrintContext *context, GnomeCalendar *gcal, time_t whence,
 	double font_size, max_font_size;
 	cairo_t *cr;
 
-	ECalModel *model = gnome_calendar_get_calendar_model (gcal);
+	ECalModel *model = gnome_calendar_get_model (gcal);
 
 	start = time_day_begin_with_zone (whence, zone);
 	end = time_day_end_with_zone (start, zone);
@@ -1733,7 +1733,7 @@ print_week_summary (GtkPrintContext *context, GnomeCalendar *gcal,
 	GArray *spans;
 	PangoFontDescription *font;
 	double cell_width, cell_height;
-	ECalModel *model = gnome_calendar_get_calendar_model (gcal);
+	ECalModel *model = gnome_calendar_get_model (gcal);
 
 	psi.days_shown = weeks_shown * 7;
 	psi.events = g_array_new (FALSE, FALSE, sizeof (EWeekViewEvent));
diff --git a/modules/calendar/e-cal-shell-content.c b/modules/calendar/e-cal-shell-content.c
index 7d819d8..03d7947 100644
--- a/modules/calendar/e-cal-shell-content.c
+++ b/modules/calendar/e-cal-shell-content.c
@@ -565,7 +565,7 @@ e_cal_shell_content_get_model (ECalShellContent *cal_shell_content)
 
 	calendar = e_cal_shell_content_get_calendar (cal_shell_content);
 
-	return gnome_calendar_get_calendar_model (calendar);
+	return gnome_calendar_get_model (calendar);
 }
 
 GnomeCalendar *
diff --git a/modules/calendar/e-cal-shell-view-private.c b/modules/calendar/e-cal-shell-view-private.c
index 4573e5f..d677131 100644
--- a/modules/calendar/e-cal-shell-view-private.c
+++ b/modules/calendar/e-cal-shell-view-private.c
@@ -75,7 +75,115 @@ static void
 cal_shell_view_date_navigator_selection_changed_cb (ECalShellView *cal_shell_view,
                                                     ECalendarItem *calitem)
 {
-	/* FIXME */
+	ECalShellContent *cal_shell_content;
+	GnomeCalendarViewType switch_to;
+	GnomeCalendarViewType view_type;
+	GnomeCalendar *calendar;
+	ECalModel *model;
+	GDate start_date, end_date;
+	GDate new_start_date, new_end_date;
+	icaltimetype tt;
+	icaltimezone *timezone;
+	time_t start, end, new_time;
+	gboolean starts_on_week_start_day;
+	gint new_days_shown;
+	gint week_start_day;
+
+	cal_shell_content = cal_shell_view->priv->cal_shell_content;
+	calendar = e_cal_shell_content_get_calendar (cal_shell_content);
+
+	model = gnome_calendar_get_model (calendar);
+	view_type = gnome_calendar_get_view (calendar);
+	switch_to = view_type;
+
+	timezone = e_cal_model_get_timezone (model);
+	week_start_day = e_cal_model_get_week_start_day (model);
+	e_cal_model_get_time_range (model, &start, &end);
+
+	time_to_gdate_with_zone (&start_date, start, timezone);
+	time_to_gdate_with_zone (&end_date, end, timezone);
+
+	if (view_type == GNOME_CAL_MONTH_VIEW) {
+		EWeekView *week_view;
+		ECalendarView *calendar_view;
+		gboolean multi_week_view;
+		gboolean compress_weekend;
+
+		calendar_view = gnome_calendar_get_calendar_view (
+			calendar, GNOME_CAL_MONTH_VIEW);
+
+		week_view = E_WEEK_VIEW (calendar_view);
+		multi_week_view = e_week_view_get_multi_week_view (week_view);
+		compress_weekend = e_week_view_get_compress_weekend (week_view);
+
+		if (week_start_day == 0 && (!multi_week_view || compress_weekend))
+			g_date_add_days (&start_date, 1);
+	}
+
+	g_date_subtract_days (&end_date, 1);
+
+	e_calendar_item_get_selection (
+		calitem, &new_start_date, &new_end_date);
+
+	/* If the selection hasn't changed, just return. */
+	if (g_date_compare (&start_date, &new_start_date) == 0 &&
+		g_date_compare (&end_date, &new_end_date) == 0)
+		return;
+
+	new_days_shown =
+		g_date_get_julian (&new_end_date) -
+		g_date_get_julian (&new_start_date) + 1;
+
+	/* If a complete week is selected we show the week view.
+	 * Note that if weekends are compressed and the week start
+	 * day is set to Sunday, we don't actually show complete
+	 * weeks in the week view, so this may need tweaking. */
+	starts_on_week_start_day =
+		(g_date_get_weekday (&new_start_date) % 7 == week_start_day);
+
+	/* Update selection to be in the new time range. */
+	tt = icaltime_null_time ();
+	tt.year = g_date_get_year (&new_start_date);
+	tt.month = g_date_get_month (&new_start_date);
+	tt.day = g_date_get_day (&new_start_date);
+	new_time = icaltime_as_timet_with_zone (tt, timezone);
+
+	/* Switch views as appropriate, and change the number of
+	 * days or weeks shown. */
+	if (new_days_shown > 9) {
+		if (view_type != GNOME_CAL_LIST_VIEW) {
+			ECalendarView *calendar_view;
+
+			calendar_view = gnome_calendar_get_calendar_view (
+				calendar, GNOME_CAL_MONTH_VIEW);
+			e_week_view_set_weeks_shown (
+				E_WEEK_VIEW (calendar_view),
+				(new_days_shown + 6) / 7);
+			switch_to = GNOME_CAL_MONTH_VIEW;
+		}
+	} else if (new_days_shown == 7 && starts_on_week_start_day)
+		switch_to = GNOME_CAL_WEEK_VIEW;
+	else {
+		ECalendarView *calendar_view;
+
+		calendar_view = gnome_calendar_get_calendar_view (
+			calendar, GNOME_CAL_DAY_VIEW);
+		e_day_view_set_days_shown (
+			E_DAY_VIEW (calendar_view), new_days_shown);
+
+		if (new_days_shown != 5 || !starts_on_week_start_day)
+			switch_to = GNOME_CAL_DAY_VIEW;
+
+		else if (view_type != GNOME_CAL_WORK_WEEK_VIEW)
+			switch_to = GNOME_CAL_DAY_VIEW;
+	}
+
+	/* Make the views display things properly. */
+	gnome_calendar_update_view_times (calendar, new_time);
+	gnome_calendar_set_view (calendar, switch_to);
+	gnome_calendar_set_range_selected (calendar, TRUE);
+
+	gnome_calendar_notify_dates_shown_changed (calendar);
 }
 
 static void
@@ -137,6 +245,36 @@ cal_shell_view_selector_popup_event_cb (EShellView *shell_view,
 }
 
 static void
+cal_shell_view_selector_client_added_cb (ECalShellView *cal_shell_view,
+                                         ECal *client)
+{
+	ECalShellContent *cal_shell_content;
+	GnomeCalendar *calendar;
+	ECalModel *model;
+
+	cal_shell_content = cal_shell_view->priv->cal_shell_content;
+	calendar = e_cal_shell_content_get_calendar (cal_shell_content);
+	model = gnome_calendar_get_model (calendar);
+
+	e_cal_model_add_client (model, client);
+}
+
+static void
+cal_shell_view_selector_client_removed_cb (ECalShellView *cal_shell_view,
+                                           ECal *client)
+{
+	ECalShellContent *cal_shell_content;
+	GnomeCalendar *calendar;
+	ECalModel *model;
+
+	cal_shell_content = cal_shell_view->priv->cal_shell_content;
+	calendar = e_cal_shell_content_get_calendar (cal_shell_content);
+	model = gnome_calendar_get_model (calendar);
+
+	e_cal_model_remove_client (model, client);
+}
+
+static void
 cal_shell_view_memopad_popup_event_cb (EShellView *shell_view,
                                        GdkEventButton *event)
 {
@@ -348,6 +486,16 @@ e_cal_shell_view_private_constructed (ECalShellView *cal_shell_view)
 		cal_shell_view);
 
 	g_signal_connect_swapped (
+		cal_shell_sidebar, "client-added",
+		G_CALLBACK (cal_shell_view_selector_client_added_cb),
+		cal_shell_view);
+
+	g_signal_connect_swapped (
+		cal_shell_sidebar, "client-removed",
+		G_CALLBACK (cal_shell_view_selector_client_removed_cb),
+		cal_shell_view);
+
+	g_signal_connect_swapped (
 		memo_table, "popup-event",
 		G_CALLBACK (cal_shell_view_memopad_popup_event_cb),
 		cal_shell_view);
@@ -794,7 +942,8 @@ e_cal_shell_view_update_sidebar (ECalShellView *cal_shell_view)
 	EShellSidebar *shell_sidebar;
 	ECalShellContent *cal_shell_content;
 	GnomeCalendar *calendar;
-	GnomeCalendarViewType view;
+	GnomeCalendarViewType view_type;
+	ECalendarView *calendar_view;
 	ECalModel *model;
 	time_t start_time, end_time;
 	struct tm start_tm, end_tm;
@@ -811,11 +960,14 @@ e_cal_shell_view_update_sidebar (ECalShellView *cal_shell_view)
 	cal_shell_content = cal_shell_view->priv->cal_shell_content;
 	calendar = e_cal_shell_content_get_calendar (cal_shell_content);
 
-	gnome_calendar_get_visible_time_range (
-		calendar, &start_time, &end_time);
-	model = gnome_calendar_get_calendar_model (calendar);
+	model = gnome_calendar_get_model (calendar);
 	timezone = e_cal_model_get_timezone (model);
-	view = gnome_calendar_get_view (calendar);
+
+	view_type = gnome_calendar_get_view (calendar);
+	calendar_view = gnome_calendar_get_calendar_view (calendar, view_type);
+
+	e_calendar_view_get_visible_time_range (
+		calendar_view, &start_time, &end_time);
 
 	start_tt = icaltime_from_timet_with_zone (start_time, FALSE, timezone);
 	start_tm.tm_year = start_tt.year - 1900;
@@ -840,7 +992,7 @@ e_cal_shell_view_update_sidebar (ECalShellView *cal_shell_view)
 	end_tm.tm_wday = time_day_of_week (
 		end_tt.day, end_tt.month - 1, end_tt.year);
 
-	switch (view) {
+	switch (view_type) {
 		case GNOME_CAL_DAY_VIEW:
 		case GNOME_CAL_WORK_WEEK_VIEW:
 		case GNOME_CAL_WEEK_VIEW:
diff --git a/modules/calendar/e-cal-shell-view-private.h b/modules/calendar/e-cal-shell-view-private.h
index f982e06..6900311 100644
--- a/modules/calendar/e-cal-shell-view-private.h
+++ b/modules/calendar/e-cal-shell-view-private.h
@@ -43,6 +43,8 @@
 #include "calendar/gui/e-cal-list-view.h"
 #include "calendar/gui/e-cal-model-tasks.h"
 #include "calendar/gui/e-calendar-view.h"
+#include "calendar/gui/e-day-view.h"
+#include "calendar/gui/e-week-view.h"
 #include "calendar/gui/gnome-cal.h"
 #include "calendar/gui/goto.h"
 #include "calendar/gui/print.h"



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]