[evolution] Mail module + EMailView cleanups.



commit 87a3fac95cfdcb3dde4e0b75718239de20d8812f
Author: Matthew Barnes <mbarnes redhat com>
Date:   Thu Aug 26 10:20:12 2010 -0400

    Mail module + EMailView cleanups.

 mail/e-mail-notebook-view.c              |   10 +-
 mail/e-mail-view.c                       |   70 ++++++-
 mail/e-mail-view.h                       |    4 +-
 modules/mail/e-mail-shell-content.c      |  329 +++++++++++++++--------------
 modules/mail/e-mail-shell-content.h      |   19 +--
 modules/mail/e-mail-shell-view-actions.c |  127 +++++++++---
 modules/mail/e-mail-shell-view-private.c |  100 +++++++--
 modules/mail/e-mail-shell-view.c         |   25 ++-
 8 files changed, 435 insertions(+), 249 deletions(-)
---
diff --git a/mail/e-mail-notebook-view.c b/mail/e-mail-notebook-view.c
index a10c370..41cab95 100644
--- a/mail/e-mail-notebook-view.c
+++ b/mail/e-mail-notebook-view.c
@@ -140,7 +140,7 @@ mnv_page_changed (GtkNotebook *book,
 		em_folder_tree_set_selected (folder_tree, uri, FALSE);
 
 	if (mview != priv->current_view) {
-		mview->prev = priv->current_view;
+		e_mail_view_set_previous_view (mview, priv->current_view);
 		priv->current_view = mview;
 	}
 
@@ -268,7 +268,7 @@ mnv_tab_closed_cb (ClutterTimeline *timeline,
 
 	if (E_IS_MAIL_FOLDER_PANE (page))
 		g_hash_table_remove (data->view->priv->views, folder_uri);
-	prev = page->prev;
+	prev = e_mail_view_get_previous_view (page);
 	if (prev) {
 		num = emnv_get_page_num (data->view, (GtkWidget *)prev);
 		mnv_set_current_tab (data->view, num);
@@ -343,7 +343,7 @@ tab_remove_gtk_cb (GtkWidget *button,
 	if (E_IS_MAIL_FOLDER_PANE (page))
 		g_hash_table_remove (view->priv->views, folder_uri);
 
-	prev = page->prev;
+	prev = e_mail_view_get_previous_view (page);
 	if (prev) {
 		num = emnv_get_page_num (view, (GtkWidget *)prev);
 		gtk_notebook_set_current_page (view->priv->book, num);
@@ -865,7 +865,7 @@ mail_netbook_view_open_mail (EMailView *view,
 	shell_view = e_mail_view_get_shell_view (E_MAIL_VIEW (nview));
 	pos = emnv_get_page_num (nview, GTK_WIDGET (priv->current_view));
 	pane = e_mail_message_pane_new (shell_view);
-	pane->prev = priv->current_view;
+	e_mail_view_set_previous_view (pane, priv->current_view);
 	E_MAIL_MESSAGE_PANE(pane)->parent_folder_view = priv->current_view;
 	priv->current_view = pane;
 
@@ -1086,7 +1086,7 @@ mail_notebook_view_set_folder (EMailReader *reader,
 			shell_view = e_mail_view_get_shell_view (E_MAIL_VIEW (reader));
 			priv->current_view = e_mail_folder_pane_new (shell_view);
 			gtk_widget_show ((GtkWidget *)priv->current_view);
-			priv->current_view->prev = old_view;
+			e_mail_view_set_previous_view (priv->current_view, old_view);
 			page = gtk_notebook_append_page (
 				priv->book, (GtkWidget *)priv->current_view,
 				create_tab_label (
diff --git a/mail/e-mail-view.c b/mail/e-mail-view.c
index 909f38b..62e0b0c 100644
--- a/mail/e-mail-view.c
+++ b/mail/e-mail-view.c
@@ -35,26 +35,28 @@
 struct _EMailViewPrivate {
 	EShellView *shell_view;
 	GtkOrientation orientation;
+	EMailView *previous_view;
 
 	guint preview_visible : 1;
 	guint show_deleted    : 1;
 };
 
 enum {
-	PANE_CLOSE,
-	VIEW_CHANGED,
-	OPEN_MAIL,
-	LAST_SIGNAL
-};
-
-enum {
 	PROP_0,
 	PROP_ORIENTATION,
 	PROP_PREVIEW_VISIBLE,
+	PROP_PREVIOUS_VIEW,
 	PROP_SHELL_VIEW,
 	PROP_SHOW_DELETED
 };
 
+enum {
+	PANE_CLOSE,
+	VIEW_CHANGED,
+	OPEN_MAIL,
+	LAST_SIGNAL
+};
+
 static guint signals[LAST_SIGNAL];
 
 G_DEFINE_TYPE (EMailView, e_mail_view, GTK_TYPE_VBOX)
@@ -88,6 +90,12 @@ mail_view_set_property (GObject *object,
 				g_value_get_boolean (value));
 			return;
 
+		case PROP_PREVIOUS_VIEW:
+			e_mail_view_set_previous_view (
+				E_MAIL_VIEW (object),
+				g_value_get_object (value));
+			return;
+
 		case PROP_SHELL_VIEW:
 			mail_view_set_shell_view (
 				E_MAIL_VIEW (object),
@@ -123,6 +131,12 @@ mail_view_get_property (GObject *object,
 				E_MAIL_VIEW (object)));
 			return;
 
+		case PROP_PREVIOUS_VIEW:
+			g_value_set_object (
+				value, e_mail_view_get_previous_view (
+				E_MAIL_VIEW (object)));
+			return;
+
 		case PROP_SHELL_VIEW:
 			g_value_set_object (
 				value, e_mail_view_get_shell_view (
@@ -151,6 +165,11 @@ mail_view_dispose (GObject *object)
 		priv->shell_view = NULL;
 	}
 
+	if (priv->previous_view != NULL) {
+		g_object_unref (priv->previous_view);
+		priv->previous_view = NULL;
+	}
+
 	/* Chain up to parent's dispose() method. */
 	G_OBJECT_CLASS (e_mail_view_parent_class)->dispose (object);
 }
@@ -271,6 +290,16 @@ e_mail_view_class_init (EMailViewClass *class)
 
 	g_object_class_install_property (
 		object_class,
+		PROP_PREVIOUS_VIEW,
+		g_param_spec_object (
+			"previous-view",
+			"Previous View",
+			NULL,
+			E_TYPE_MAIL_VIEW,
+			G_PARAM_READWRITE));
+
+	g_object_class_install_property (
+		object_class,
 		PROP_SHELL_VIEW,
 		g_param_spec_object (
 			"shell-view",
@@ -399,6 +428,33 @@ e_mail_view_set_preview_visible (EMailView *view,
 	class->set_preview_visible (view, visible);
 }
 
+EMailView *
+e_mail_view_get_previous_view (EMailView *view)
+{
+	g_return_val_if_fail (E_IS_MAIL_VIEW (view), NULL);
+
+	return view->priv->previous_view;
+}
+
+void
+e_mail_view_set_previous_view (EMailView *view,
+                               EMailView *previous_view)
+{
+	g_return_if_fail (E_IS_MAIL_VIEW (view));
+
+	if (previous_view != NULL) {
+		g_return_if_fail (E_IS_MAIL_VIEW (previous_view));
+		g_object_ref (previous_view);
+	}
+
+	if (view->priv->previous_view != NULL)
+		g_object_unref (view->priv->previous_view);
+
+	view->priv->previous_view = previous_view;
+
+	g_object_notify (G_OBJECT (view), "previous-view");
+}
+
 gboolean
 e_mail_view_get_show_deleted (EMailView *view)
 {
diff --git a/mail/e-mail-view.h b/mail/e-mail-view.h
index da4e5e2..6c697bd 100644
--- a/mail/e-mail-view.h
+++ b/mail/e-mail-view.h
@@ -55,7 +55,6 @@ typedef struct _EMailViewPrivate EMailViewPrivate;
 struct _EMailView {
 	GtkVBox parent;
 	EMailViewPrivate *priv;
-	EMailView *prev;
 };
 
 struct _EMailViewClass {
@@ -97,6 +96,9 @@ GtkOrientation	e_mail_view_get_orientation	(EMailView *);
 void		e_mail_view_set_preview_visible	(EMailView *view,
 						 gboolean visible);
 gboolean	e_mail_view_get_preview_visible	(EMailView *view);
+EMailView *	e_mail_view_get_previous_view	(EMailView *view);
+void		e_mail_view_set_previous_view	(EMailView *view,
+						 EMailView *previous_view);
 gboolean	e_mail_view_get_show_deleted	(EMailView *view);
 void		e_mail_view_set_show_deleted	(EMailView *view,
 						 gboolean show_deleted);
diff --git a/modules/mail/e-mail-shell-content.c b/modules/mail/e-mail-shell-content.c
index 8dc2619..6ba5273 100644
--- a/modules/mail/e-mail-shell-content.c
+++ b/modules/mail/e-mail-shell-content.c
@@ -38,7 +38,6 @@
 #include "mail-ops.h"
 #include "message-list.h"
 
-#include "e-mail-view.h"
 #include "e-mail-paned-view.h"
 #include "e-mail-notebook-view.h"
 #include "e-mail-reader.h"
@@ -51,32 +50,19 @@
 	((obj), E_TYPE_MAIL_SHELL_CONTENT, EMailShellContentPrivate))
 
 struct _EMailShellContentPrivate {
-	gint temp;
+	EMailView *mail_view;
 };
 
 enum {
 	PROP_0,
 	PROP_GROUP_BY_THREADS,
-	PROP_ORIENTATION,
-	PROP_PREVIEW_VISIBLE,
-	PROP_SHOW_DELETED
+	PROP_MAIL_VIEW
 };
 
 static gpointer parent_class;
 static GType mail_shell_content_type;
 
 static void
-mail_shell_content_dispose (GObject *object)
-{
-	EMailShellContentPrivate *priv;
-
-	priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (object);
-
-	/* Chain up to parent's dispose() method. */
-	G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
 reconnect_changed_event (EMailReader *child, EMailReader *parent)
 {
 	g_signal_emit_by_name (parent, "changed");
@@ -94,13 +80,66 @@ mail_shell_content_view_changed_cb (EMailView *view,
 {
 	g_object_freeze_notify (G_OBJECT (content));
 	g_object_notify (G_OBJECT (content), "group-by-threads");
-	g_object_notify (G_OBJECT (content), "show-deleted");
-	g_object_notify (G_OBJECT (content), "preview-visible");
-	g_object_notify (G_OBJECT (content), "orientation");
 	g_object_thaw_notify (G_OBJECT (content));
 }
 
 static void
+mail_shell_content_set_property (GObject *object,
+                                 guint property_id,
+                                 const GValue *value,
+                                 GParamSpec *pspec)
+{
+	switch (property_id) {
+		case PROP_GROUP_BY_THREADS:
+			e_mail_reader_set_group_by_threads (
+				E_MAIL_READER (object),
+				g_value_get_boolean (value));
+			return;
+	}
+
+	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+mail_shell_content_get_property (GObject *object,
+                                 guint property_id,
+                                 GValue *value,
+                                 GParamSpec *pspec)
+{
+	switch (property_id) {
+		case PROP_GROUP_BY_THREADS:
+			g_value_set_boolean (
+				value, e_mail_reader_get_group_by_threads (
+				E_MAIL_READER (object)));
+			return;
+
+		case PROP_MAIL_VIEW:
+			g_value_set_object (
+				value, e_mail_shell_content_get_mail_view (
+				E_MAIL_SHELL_CONTENT (object)));
+			return;
+	}
+
+	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+mail_shell_content_dispose (GObject *object)
+{
+	EMailShellContentPrivate *priv;
+
+	priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (object);
+
+	if (priv->mail_view != NULL) {
+		g_object_unref (priv->mail_view);
+		priv->mail_view = NULL;
+	}
+
+	/* Chain up to parent's dispose() method. */
+	G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
 mail_shell_content_constructed (GObject *object)
 {
 	EMailShellContentPrivate *priv;
@@ -113,7 +152,7 @@ mail_shell_content_constructed (GObject *object)
 
 	priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (object);
 
-	/* Chain up to parent's constructed() method. */
+	/* Chain up to parent's constructed () method. */
 	G_OBJECT_CLASS (parent_class)->constructed (object);
 
 	shell_content = E_SHELL_CONTENT (object);
@@ -125,7 +164,7 @@ mail_shell_content_constructed (GObject *object)
 
 	container = GTK_WIDGET (object);
 
-	if (e_shell_get_express_mode(e_shell_get_default ())) {
+	if (e_shell_get_express_mode (e_shell_get_default ())) {
 		widget = e_mail_notebook_view_new (shell_view);
 		g_signal_connect (
 			widget, "view-changed",
@@ -134,8 +173,8 @@ mail_shell_content_constructed (GObject *object)
 	} else
 		widget = e_mail_paned_view_new (shell_view);
 
-	E_MAIL_SHELL_CONTENT(object)->view = (EMailView *)widget;
 	gtk_container_add (GTK_CONTAINER (container), widget);
+	priv->mail_view = g_object_ref (widget);
 	gtk_widget_show (widget);
 
 	g_signal_connect (
@@ -150,23 +189,45 @@ mail_shell_content_constructed (GObject *object)
 static guint32
 mail_shell_content_check_state (EShellContent *shell_content)
 {
-	return e_mail_reader_check_state (E_MAIL_READER (E_MAIL_SHELL_CONTENT(shell_content)->view));
+	EMailShellContentPrivate *priv;
+	EMailReader *reader;
+
+	priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (shell_content);
+
+	/* Forward this to our internal EMailView, which
+	 * also implements the EMailReader interface. */
+	reader = E_MAIL_READER (priv->mail_view);
+
+	return e_mail_reader_check_state (reader);
 }
 
 static void
 mail_shell_content_focus_search_results (EShellContent *shell_content)
 {
 	EMailShellContentPrivate *priv;
+	GtkWidget *message_list;
+	EMailReader *reader;
 
 	priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (shell_content);
 
-	gtk_widget_grab_focus (e_mail_reader_get_message_list(E_MAIL_READER (E_MAIL_SHELL_CONTENT(shell_content)->view)));
+	reader = E_MAIL_READER (priv->mail_view);
+	message_list = e_mail_reader_get_message_list (reader);
+
+	gtk_widget_grab_focus (message_list);
 }
 
 static guint
 mail_shell_content_open_selected_mail (EMailReader *reader)
 {
-	return e_mail_reader_open_selected_mail (E_MAIL_READER(E_MAIL_SHELL_CONTENT(reader)->view));
+	EMailShellContentPrivate *priv;
+
+	priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (reader);
+
+	/* Forward this to our internal EMailView, which
+	 * also implements the EMailReader interface. */
+	reader = E_MAIL_READER (priv->mail_view);
+
+	return e_mail_reader_open_selected_mail (reader);
 }
 
 static GtkActionGroup *
@@ -186,37 +247,85 @@ mail_shell_content_get_action_group (EMailReader *reader)
 static EMFormatHTML *
 mail_shell_content_get_formatter (EMailReader *reader)
 {
-	return e_mail_reader_get_formatter (E_MAIL_READER(E_MAIL_SHELL_CONTENT(reader)->view));
+	EMailShellContentPrivate *priv;
+
+	priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (reader);
+
+	/* Forward this to our internal EMailView, which
+	 * also implements the EMailReader interface. */
+	reader = E_MAIL_READER (priv->mail_view);
+
+	return e_mail_reader_get_formatter (reader);
 }
 
 static gboolean
 mail_shell_content_get_hide_deleted (EMailReader *reader)
 {
-	return e_mail_reader_get_hide_deleted (E_MAIL_READER(E_MAIL_SHELL_CONTENT(reader)->view));
+	EMailShellContentPrivate *priv;
+
+	priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (reader);
+
+	/* Forward this to our internal EMailView, which
+	 * also implements the EMailReader interface. */
+	reader = E_MAIL_READER (priv->mail_view);
+
+	return e_mail_reader_get_hide_deleted (reader);
 }
 
 static GtkWidget *
 mail_shell_content_get_message_list (EMailReader *reader)
 {
-	return e_mail_reader_get_message_list (E_MAIL_READER(E_MAIL_SHELL_CONTENT(reader)->view));
+	EMailShellContentPrivate *priv;
+
+	priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (reader);
+
+	/* Forward this to our internal EMailView, which
+	 * also implements the EMailReader interface. */
+	reader = E_MAIL_READER (priv->mail_view);
+
+	return e_mail_reader_get_message_list (reader);
 }
 
 static GtkMenu *
 mail_shell_content_get_popup_menu (EMailReader *reader)
 {
-	return e_mail_reader_get_popup_menu (E_MAIL_READER(E_MAIL_SHELL_CONTENT(reader)->view));
+	EMailShellContentPrivate *priv;
+
+	priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (reader);
+
+	/* Forward this to our internal EMailView, which
+	 * also implements the EMailReader interface. */
+	reader = E_MAIL_READER (priv->mail_view);
+
+	return e_mail_reader_get_popup_menu (reader);
 }
 
 static EShellBackend *
 mail_shell_content_get_shell_backend (EMailReader *reader)
 {
-	return e_mail_reader_get_shell_backend (E_MAIL_READER(E_MAIL_SHELL_CONTENT(reader)->view));
+	EMailShellContentPrivate *priv;
+
+	priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (reader);
+
+	/* Forward this to our internal EMailView, which
+	 * also implements the EMailReader interface. */
+	reader = E_MAIL_READER (priv->mail_view);
+
+	return e_mail_reader_get_shell_backend (reader);
 }
 
 static GtkWindow *
 mail_shell_content_get_window (EMailReader *reader)
 {
-	return e_mail_reader_get_window (E_MAIL_READER(E_MAIL_SHELL_CONTENT(reader)->view));
+	EMailShellContentPrivate *priv;
+
+	priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (reader);
+
+	/* Forward this to our internal EMailView, which
+	 * also implements the EMailReader interface. */
+	reader = E_MAIL_READER (priv->mail_view);
+
+	return e_mail_reader_get_window (reader);
 }
 
 static void
@@ -224,93 +333,29 @@ mail_shell_content_set_folder (EMailReader *reader,
                                CamelFolder *folder,
                                const gchar *folder_uri)
 {
-	return e_mail_reader_set_folder (E_MAIL_READER(E_MAIL_SHELL_CONTENT(reader)->view),
-					 folder,
-					 folder_uri);
-}
-
-static void
-mail_shell_content_show_search_bar (EMailReader *reader)
-{
-	e_mail_reader_show_search_bar (E_MAIL_READER(E_MAIL_SHELL_CONTENT(reader)->view));
-}
-
-static void
-mail_shell_content_set_property (GObject *object,
-                                 guint property_id,
-                                 const GValue *value,
-                                 GParamSpec *pspec)
-{
-	switch (property_id) {
-		case PROP_GROUP_BY_THREADS:
-			g_object_set (
-				E_MAIL_READER (E_MAIL_SHELL_CONTENT(object)->view),
-				"group-by-threads",
-				g_value_get_boolean (value),
-				NULL);
-			return;
+	EMailShellContentPrivate *priv;
 
-		case PROP_ORIENTATION:
-			e_mail_view_set_orientation (
-				E_MAIL_SHELL_CONTENT(object)->view,
-				g_value_get_enum (value));
-			return;
+	priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (reader);
 
-		case PROP_PREVIEW_VISIBLE:
-			e_mail_view_set_preview_visible (
-				E_MAIL_SHELL_CONTENT(object)->view,
-				g_value_get_boolean (value));
-			return;
+	/* Forward this to our internal EMailView, which
+	 * also implements the EMailReader interface. */
+	reader = E_MAIL_READER (priv->mail_view);
 
-		case PROP_SHOW_DELETED:
-			e_mail_view_set_show_deleted (
-				E_MAIL_SHELL_CONTENT(object)->view,
-				g_value_get_boolean (value));
-			return;
-	}
-
-	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+	return e_mail_reader_set_folder (reader, folder, folder_uri);
 }
 
 static void
-mail_shell_content_get_property (GObject *object,
-                                 guint property_id,
-                                 GValue *value,
-                                 GParamSpec *pspec)
+mail_shell_content_show_search_bar (EMailReader *reader)
 {
-	switch (property_id) {
-		case PROP_GROUP_BY_THREADS: {
-			gboolean thr;
-
-			g_object_get ((GObject *)E_MAIL_SHELL_CONTENT(object)->view, "group-by-threads", &thr, NULL);
-			g_value_set_boolean (
-				value,
-				thr);
-			return;
-		}
-		case PROP_ORIENTATION:
-			g_value_set_enum (
-				value,
-				e_mail_view_get_orientation (
-				E_MAIL_SHELL_CONTENT(object)->view));
-			return;
+	EMailShellContentPrivate *priv;
 
-		case PROP_PREVIEW_VISIBLE:
-			g_value_set_boolean (
-				value,
-				e_mail_view_get_preview_visible (
-				E_MAIL_SHELL_CONTENT(object)->view));
-			return;
+	priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (reader);
 
-		case PROP_SHOW_DELETED:
-			g_value_set_boolean (
-				value,
-				e_mail_view_get_show_deleted (
-				E_MAIL_SHELL_CONTENT(object)->view));
-			return;
-	}
+	/* Forward this to our internal EMailView, which
+	 * also implements the EMailReader interface. */
+	reader = E_MAIL_READER (priv->mail_view);
 
-	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+	e_mail_reader_show_search_bar (reader);
 }
 
 static void
@@ -323,10 +368,10 @@ mail_shell_content_class_init (EMailShellContentClass *class)
 	g_type_class_add_private (class, sizeof (EMailShellContentPrivate));
 
 	object_class = G_OBJECT_CLASS (class);
-	object_class->dispose = mail_shell_content_dispose;
-	object_class->constructed = mail_shell_content_constructed;
 	object_class->set_property = mail_shell_content_set_property;
 	object_class->get_property = mail_shell_content_get_property;
+	object_class->dispose = mail_shell_content_dispose;
+	object_class->constructed = mail_shell_content_constructed;
 
 	shell_content_class = E_SHELL_CONTENT_CLASS (class);
 	shell_content_class->check_state = mail_shell_content_check_state;
@@ -339,26 +384,13 @@ mail_shell_content_class_init (EMailShellContentClass *class)
 
 	g_object_class_install_property (
 		object_class,
-		PROP_PREVIEW_VISIBLE,
-		g_param_spec_boolean (
-			"preview-visible",
-			"Preview is Visible",
-			"Whether the preview pane is visible",
-			TRUE,
-			G_PARAM_READWRITE));
-
-	g_object_class_install_property (
-		object_class,
-		PROP_SHOW_DELETED,
-		g_param_spec_boolean (
-			"show-deleted",
-			"Show Deleted",
+		PROP_MAIL_VIEW,
+		g_param_spec_object (
+			"mail-view",
+			"Mail View",
 			NULL,
-			FALSE,
-			G_PARAM_READWRITE));
-
-	g_object_class_override_property (
-		object_class, PROP_ORIENTATION, "orientation");
+			E_TYPE_MAIL_VIEW,
+			G_PARAM_READABLE));
 }
 
 static void
@@ -413,12 +445,6 @@ e_mail_shell_content_register_type (GTypeModule *type_module)
 		NULL  /* interface_data */
 	};
 
-	static const GInterfaceInfo orientable_info = {
-		(GInterfaceInitFunc) NULL,
-		(GInterfaceFinalizeFunc) NULL,
-		NULL  /* interface_data */
-	};
-
 	mail_shell_content_type = g_type_module_register_type (
 		type_module, E_TYPE_SHELL_CONTENT,
 		"EMailShellContent", &type_info, 0);
@@ -426,10 +452,6 @@ e_mail_shell_content_register_type (GTypeModule *type_module)
 	g_type_module_add_interface (
 		type_module, mail_shell_content_type,
 		E_TYPE_MAIL_READER, &reader_info);
-
-	g_type_module_add_interface (
-		type_module, mail_shell_content_type,
-		GTK_TYPE_ORIENTABLE, &orientable_info);
 }
 
 GtkWidget *
@@ -442,6 +464,15 @@ e_mail_shell_content_new (EShellView *shell_view)
 		"shell-view", shell_view, NULL);
 }
 
+EMailView *
+e_mail_shell_content_get_mail_view (EMailShellContent *mail_shell_content)
+{
+	g_return_val_if_fail (
+		E_IS_MAIL_SHELL_CONTENT (mail_shell_content), NULL);
+
+	return mail_shell_content->priv->mail_view;
+}
+
 EShellSearchbar *
 e_mail_shell_content_get_searchbar (EMailShellContent *mail_shell_content)
 {
@@ -458,23 +489,3 @@ e_mail_shell_content_get_searchbar (EMailShellContent *mail_shell_content)
 
 	return E_SHELL_SEARCHBAR (searchbar);
 }
-
-void
-e_mail_shell_content_set_search_strings (EMailShellContent *mail_shell_content,
-					 GSList *search_strings)
-{
-	e_mail_view_set_search_strings (mail_shell_content->view, search_strings);
-}
-
-GalViewInstance *
-e_mail_shell_content_get_view_instance (EMailShellContent *mail_shell_content)
-{
-	return e_mail_view_get_view_instance (mail_shell_content->view);
-}
-
-void
-e_mail_shell_content_update_view_instance (EMailShellContent *mail_shell_content)
-{
-	e_mail_view_update_view_instance (mail_shell_content->view);
-}
-
diff --git a/modules/mail/e-mail-shell-content.h b/modules/mail/e-mail-shell-content.h
index b0a8936..6e2c721 100644
--- a/modules/mail/e-mail-shell-content.h
+++ b/modules/mail/e-mail-shell-content.h
@@ -55,7 +55,6 @@ typedef struct _EMailShellContentPrivate EMailShellContentPrivate;
 
 struct _EMailShellContent {
 	EShellContent parent;
-	EMailView *view;
 	EMailShellContentPrivate *priv;
 };
 
@@ -67,27 +66,11 @@ GType		e_mail_shell_content_get_type	(void);
 void		e_mail_shell_content_register_type
 					(GTypeModule *type_module);
 GtkWidget *	e_mail_shell_content_new(EShellView *shell_view);
-gboolean	e_mail_shell_content_get_preview_visible
+EMailView *	e_mail_shell_content_get_mail_view
 					(EMailShellContent *mail_shell_content);
-void		e_mail_shell_content_set_preview_visible
-					(EMailShellContent *mail_shell_content,
-						 gboolean preview_visible);
 EShellSearchbar *
 		e_mail_shell_content_get_searchbar
 					(EMailShellContent *mail_shell_content);
-gboolean	e_mail_shell_content_get_show_deleted
-					(EMailShellContent *mail_shell_content);
-void		e_mail_shell_content_set_show_deleted
-					(EMailShellContent *mail_shell_content,
-					 gboolean show_deleted);
-GalViewInstance *
-		e_mail_shell_content_get_view_instance
-					(EMailShellContent *mail_shell_content);
-void		e_mail_shell_content_set_search_strings
-					(EMailShellContent *mail_shell_content,
-					 GSList *search_strings);
-void		e_mail_shell_content_update_view_instance
-					(EMailShellContent *mail_shell_content);
 
 G_END_DECLS
 
diff --git a/modules/mail/e-mail-shell-view-actions.c b/modules/mail/e-mail-shell-view-actions.c
index 009b0c1..da8b0d7 100644
--- a/modules/mail/e-mail-shell-view-actions.c
+++ b/modules/mail/e-mail-shell-view-actions.c
@@ -28,6 +28,7 @@ action_gal_save_custom_view_cb (GtkAction *action,
 {
 	EMailShellContent *mail_shell_content;
 	EShellView *shell_view;
+	EMailView *mail_view;
 	GalViewInstance *view_instance;
 
 	/* All shell views repond to the activation of this action,
@@ -38,7 +39,9 @@ action_gal_save_custom_view_cb (GtkAction *action,
 		return;
 
 	mail_shell_content = mail_shell_view->priv->mail_shell_content;
-	view_instance = e_mail_shell_content_get_view_instance (mail_shell_content);
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+	view_instance = e_mail_view_get_view_instance (mail_view);
+
 	gal_view_instance_save_as (view_instance);
 }
 
@@ -87,6 +90,7 @@ action_mail_create_search_folder_cb (GtkAction *action,
 	EShellSearchbar *searchbar;
 	EFilterRule *search_rule;
 	EMVFolderRule *vfolder_rule;
+	EMailView *mail_view;
 	const gchar *folder_uri;
 	const gchar *search_text;
 	gchar *rule_name;
@@ -98,13 +102,14 @@ action_mail_create_search_folder_cb (GtkAction *action,
 	g_return_if_fail (search_rule != NULL);
 
 	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
 	searchbar = e_mail_shell_content_get_searchbar (mail_shell_content);
-	search_text = e_shell_searchbar_get_search_text (searchbar);
 
+	search_text = e_shell_searchbar_get_search_text (searchbar);
 	if (search_text == NULL || *search_text == '\0')
 		search_text = "''";
 
-	reader = E_MAIL_READER (mail_shell_content->view);
+	reader = E_MAIL_READER (mail_view);
 	folder_uri = e_mail_reader_get_folder_uri (reader);
 
 	search_rule = vfolder_clone_rule (search_rule);
@@ -212,13 +217,15 @@ static void
 action_mail_folder_mark_all_as_read_cb (GtkAction *action,
                                         EMailShellView *mail_shell_view)
 {
-	EMailReader *reader;
-	EShellWindow *shell_window;
 	EShellView *shell_view;
+	EShellWindow *shell_window;
+	EMailShellContent *mail_shell_content;
+	EMailReader *reader;
+	EMailView *mail_view;
 	CamelFolder *folder;
 	GtkWindow *parent;
 	MailFolderCache *cache;
-	MessageList *message_list;
+	GtkWidget *message_list;
 	GPtrArray *uids;
 	const gchar *key;
 	const gchar *prompt;
@@ -228,7 +235,10 @@ action_mail_folder_mark_all_as_read_cb (GtkAction *action,
 	shell_window = e_shell_view_get_shell_window (shell_view);
 	parent = GTK_WINDOW (shell_window);
 
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+
+	reader = E_MAIL_READER (mail_view);
 
 	folder = e_mail_reader_get_folder (reader);
 	g_return_if_fail (folder != NULL);
@@ -243,10 +253,10 @@ action_mail_folder_mark_all_as_read_cb (GtkAction *action,
 	if (!em_utils_prompt_user (parent, key, prompt, NULL))
 		return;
 
-	message_list = MESSAGE_LIST (e_mail_reader_get_message_list (reader));
+	message_list = e_mail_reader_get_message_list (reader);
 	g_return_if_fail (message_list != NULL);
 
-	uids = message_list_get_uids (message_list);
+	uids = message_list_get_uids (MESSAGE_LIST (message_list));
 
 	camel_folder_freeze (folder);
 	for (ii = 0; ii < uids->len; ii++)
@@ -364,10 +374,15 @@ static void
 action_mail_folder_select_thread_cb (GtkAction *action,
                                      EMailShellView *mail_shell_view)
 {
+	EMailShellContent *mail_shell_content;
 	GtkWidget *message_list;
 	EMailReader *reader;
+	EMailView *mail_view;
+
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
 
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
+	reader = E_MAIL_READER (mail_view);
 	message_list = e_mail_reader_get_message_list (reader);
 
 	message_list_select_thread (MESSAGE_LIST (message_list));
@@ -377,10 +392,15 @@ static void
 action_mail_folder_select_subthread_cb (GtkAction *action,
                                         EMailShellView *mail_shell_view)
 {
+	EMailShellContent *mail_shell_content;
 	GtkWidget *message_list;
 	EMailReader *reader;
+	EMailView *mail_view;
+
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
 
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
+	reader = E_MAIL_READER (mail_view);
 	message_list = e_mail_reader_get_message_list (reader);
 
 	message_list_select_subthread (MESSAGE_LIST (message_list));
@@ -419,7 +439,9 @@ static void
 action_mail_label_cb (GtkToggleAction *action,
                       EMailShellView *mail_shell_view)
 {
+	EMailShellContent *mail_shell_content;
 	EMailReader *reader;
+	EMailView *mail_view;
 	CamelFolder *folder;
 	GPtrArray *uids;
 	const gchar *tag;
@@ -428,7 +450,10 @@ action_mail_label_cb (GtkToggleAction *action,
 	tag = g_object_get_data (G_OBJECT (action), "tag");
 	g_return_if_fail (tag != NULL);
 
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+
+	reader = E_MAIL_READER (mail_view);
 	folder = e_mail_reader_get_folder (reader);
 	uids = e_mail_reader_get_selected_uids (reader);
 
@@ -452,12 +477,14 @@ action_mail_label_new_cb (GtkAction *action,
                           EMailShellView *mail_shell_view)
 {
 	EShell *shell;
-	EShellSettings *shell_settings;
-	EShellWindow *shell_window;
 	EShellView *shell_view;
+	EShellWindow *shell_window;
+	EShellSettings *shell_settings;
+	EMailShellContent *mail_shell_content;
 	EMailLabelDialog *label_dialog;
 	EMailLabelListStore *store;
 	EMailReader *reader;
+	EMailView *mail_view;
 	CamelFolder *folder;
 	GtkTreeModel *model;
 	GtkTreeIter iter;
@@ -502,7 +529,10 @@ action_mail_label_new_cb (GtkAction *action,
 	gtk_tree_model_iter_nth_child (model, &iter, NULL, n_children - 1);
 	label_tag = e_mail_label_list_store_get_tag (store, &iter);
 
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+
+	reader = E_MAIL_READER (mail_view);
 	folder = e_mail_reader_get_folder (reader);
 	uids = e_mail_reader_get_selected_uids (reader);
 
@@ -524,9 +554,11 @@ action_mail_label_none_cb (GtkAction *action,
 {
 	EShell *shell;
 	EShellView *shell_view;
-	EShellSettings *shell_settings;
 	EShellWindow *shell_window;
+	EShellSettings *shell_settings;
+	EMailShellContent *mail_shell_content;
 	EMailReader *reader;
+	EMailView *mail_view;
 	GtkTreeModel *tree_model;
 	CamelFolder *folder;
 	GtkTreeIter iter;
@@ -542,7 +574,10 @@ action_mail_label_none_cb (GtkAction *action,
 	tree_model = e_shell_settings_get_object (
 		shell_settings, "mail-label-list-store");
 
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+
+	reader = E_MAIL_READER (mail_view);
 	folder = e_mail_reader_get_folder (reader);
 	uids = e_mail_reader_get_selected_uids (reader);
 
@@ -573,11 +608,16 @@ static void
 action_mail_show_deleted_cb (GtkToggleAction *action,
                              EMailShellView *mail_shell_view)
 {
+	EMailShellContent *mail_shell_content;
 	GtkWidget *message_list;
 	EMailReader *reader;
+	EMailView *mail_view;
 	gboolean active;
 
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+
+	reader = E_MAIL_READER (mail_view);
 	message_list = e_mail_reader_get_message_list (reader);
 
 	active = gtk_toggle_action_get_active (action);
@@ -592,10 +632,12 @@ action_mail_smart_backward_cb (GtkAction *action,
 	EShellView *shell_view;
 	EShellWindow *shell_window;
 	EShellSettings *shell_settings;
+	EMailShellContent *mail_shell_content;
 	EMailShellSidebar *mail_shell_sidebar;
 	EMFolderTree *folder_tree;
 	EMFormatHTML *formatter;
 	EMailReader *reader;
+	EMailView *mail_view;
 	GtkWidget *message_list;
 	GtkToggleAction *toggle_action;
 	EWebView *web_view;
@@ -609,10 +651,13 @@ action_mail_smart_backward_cb (GtkAction *action,
 	shell = e_shell_window_get_shell (shell_window);
 	shell_settings = e_shell_get_shell_settings (shell);
 
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+
 	mail_shell_sidebar = mail_shell_view->priv->mail_shell_sidebar;
 	folder_tree = e_mail_shell_sidebar_get_folder_tree (mail_shell_sidebar);
 
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
+	reader = E_MAIL_READER (mail_view);
 	formatter = e_mail_reader_get_formatter (reader);
 	message_list = e_mail_reader_get_message_list (reader);
 
@@ -658,10 +703,12 @@ action_mail_smart_forward_cb (GtkAction *action,
 	EShellView *shell_view;
 	EShellWindow *shell_window;
 	EShellSettings *shell_settings;
+	EMailShellContent *mail_shell_content;
 	EMailShellSidebar *mail_shell_sidebar;
 	EMFolderTree *folder_tree;
 	EMFormatHTML *formatter;
 	EMailReader *reader;
+	EMailView *mail_view;
 	GtkWidget *message_list;
 	GtkToggleAction *toggle_action;
 	EWebView *web_view;
@@ -675,10 +722,13 @@ action_mail_smart_forward_cb (GtkAction *action,
 	shell = e_shell_window_get_shell (shell_window);
 	shell_settings = e_shell_get_shell_settings (shell);
 
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+
 	mail_shell_sidebar = mail_shell_view->priv->mail_shell_sidebar;
 	folder_tree = e_mail_shell_sidebar_get_folder_tree (mail_shell_sidebar);
 
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
+	reader = E_MAIL_READER (mail_view);
 	formatter = e_mail_reader_get_formatter (reader);
 	message_list = e_mail_reader_get_message_list (reader);
 
@@ -727,10 +777,15 @@ static void
 action_mail_threads_collapse_all_cb (GtkAction *action,
                                      EMailShellView *mail_shell_view)
 {
+	EMailShellContent *mail_shell_content;
 	GtkWidget *message_list;
 	EMailReader *reader;
+	EMailView *mail_view;
+
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
 
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
+	reader = E_MAIL_READER (mail_view);
 	message_list = e_mail_reader_get_message_list (reader);
 
 	message_list_set_threaded_collapse_all (MESSAGE_LIST (message_list));
@@ -740,10 +795,15 @@ static void
 action_mail_threads_expand_all_cb (GtkAction *action,
                                    EMailShellView *mail_shell_view)
 {
+	EMailShellContent *mail_shell_content;
 	GtkWidget *message_list;
 	EMailReader *reader;
+	EMailView *mail_view;
 
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+
+	reader = E_MAIL_READER (mail_view);
 	message_list = e_mail_reader_get_message_list (reader);
 
 	message_list_set_threaded_expand_all (MESSAGE_LIST (message_list));
@@ -793,11 +853,11 @@ action_mail_view_cb (GtkRadioAction *action,
                      EMailShellView *mail_shell_view)
 {
 	EMailShellContent *mail_shell_content;
-	GtkOrientable *orientable;
 	GtkOrientation orientation;
+	EMailView *mail_view;
 
 	mail_shell_content = mail_shell_view->priv->mail_shell_content;
-	orientable = GTK_ORIENTABLE (mail_shell_content);
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
 
 	switch (gtk_radio_action_get_current_value (action)) {
 		case 0:
@@ -810,7 +870,7 @@ action_mail_view_cb (GtkRadioAction *action,
 			g_return_if_reached ();
 	}
 
-	gtk_orientable_set_orientation (orientable, orientation);
+	e_mail_view_set_orientation (mail_view, orientation);
 }
 
 static GtkActionEntry mail_entries[] = {
@@ -1289,6 +1349,7 @@ e_mail_shell_view_actions_init (EMailShellView *mail_shell_view)
 	EShell *shell;
 	EShellSearchbar *searchbar;
 	EActionComboBox *combo_box;
+	EMailView *mail_view;
 	GtkActionGroup *action_group;
 	GtkAction *action;
 	GConfBridge *bridge;
@@ -1302,6 +1363,7 @@ e_mail_shell_view_actions_init (EMailShellView *mail_shell_view)
 	shell = e_shell_window_get_shell (shell_window);
 
 	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
 	searchbar = e_mail_shell_content_get_searchbar (mail_shell_content);
 
 	/* Mail Actions */
@@ -1371,7 +1433,7 @@ e_mail_shell_view_actions_init (EMailShellView *mail_shell_view)
 
 	e_mutual_binding_new (
 		ACTION (MAIL_PREVIEW), "active",
-		mail_shell_content, "preview-visible");
+		mail_view, "preview-visible");
 
 	e_mutual_binding_new (
 		ACTION (MAIL_THREADS_GROUP_BY), "active",
@@ -1387,7 +1449,7 @@ e_mail_shell_view_actions_init (EMailShellView *mail_shell_view)
 
 	e_mutual_binding_new (
 		ACTION (MAIL_SHOW_DELETED), "active",
-		mail_shell_content, "show-deleted");
+		mail_view, "show-deleted");
 
 	/* Keep the sensitivity of "Create Search Folder from Search"
 	 * in sync with "Save Search" so that its only selectable when
@@ -1464,10 +1526,12 @@ void
 e_mail_shell_view_update_popup_labels (EMailShellView *mail_shell_view)
 {
 	EShell *shell;
-	EShellSettings *shell_settings;
-	EShellWindow *shell_window;
 	EShellView *shell_view;
+	EShellWindow *shell_window;
+	EShellSettings *shell_settings;
+	EMailShellContent *mail_shell_content;
 	EMailReader *reader;
+	EMailView *mail_view;
 	GtkUIManager *ui_manager;
 	GtkActionGroup *action_group;
 	GtkTreeModel *tree_model;
@@ -1498,7 +1562,10 @@ e_mail_shell_view_update_popup_labels (EMailShellView *mail_shell_view)
 	gtk_ui_manager_remove_ui (ui_manager, merge_id);
 	e_action_group_remove_all_actions (action_group);
 
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+
+	reader = E_MAIL_READER (mail_view);
 	uids = e_mail_reader_get_selected_uids (reader);
 
 	valid = gtk_tree_model_get_iter_first (tree_model, &iter);
diff --git a/modules/mail/e-mail-shell-view-private.c b/modules/mail/e-mail-shell-view-private.c
index b1fcc72..a794329 100644
--- a/modules/mail/e-mail-shell-view-private.c
+++ b/modules/mail/e-mail-shell-view-private.c
@@ -32,12 +32,18 @@ mail_shell_view_folder_tree_selected_cb (EMailShellView *mail_shell_view,
                                          guint32 flags,
                                          EMFolderTree *folder_tree)
 {
+	EMailShellContent *mail_shell_content;
 	EShellView *shell_view;
 	EMailReader *reader;
+	EMailView *mail_view;
 	gboolean folder_selected;
 
 	shell_view = E_SHELL_VIEW (mail_shell_view);
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
+
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+
+	reader = E_MAIL_READER (mail_view);
 
 	folder_selected =
 		!(flags & CAMEL_FOLDER_NOSELECT) &&
@@ -55,9 +61,13 @@ static gboolean
 mail_shell_view_folder_tree_key_press_event_cb (EMailShellView *mail_shell_view,
                                                 GdkEventKey *event)
 {
-	EMailReader *reader;
+	EMailShellContent *mail_shell_content;
+	EMailView *mail_view;
 	gboolean handled = FALSE;
 
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+
 	if ((event->state & GDK_CONTROL_MASK) != 0)
 		goto ctrl;
 
@@ -89,8 +99,7 @@ ctrl:
 
 emit:
 	/* Forward the key press to the EMailReader interface. */
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
-	g_signal_emit_by_name (reader, "key-press-event", event, &handled);
+	g_signal_emit_by_name (mail_view, "key-press-event", event, &handled);
 
 exit:
 	return handled;
@@ -100,19 +109,24 @@ static void
 mail_shell_view_folder_tree_selection_done_cb (EMailShellView *mail_shell_view,
                                                GtkWidget *menu)
 {
+	EMailShellContent *mail_shell_content;
 	EMailShellSidebar *mail_shell_sidebar;
 	EMFolderTree *folder_tree;
 	GtkWidget *message_list;
 	EMailReader *reader;
+	EMailView *mail_view;
 	const gchar *list_uri;
 	gchar *tree_uri;
 
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
-	message_list = e_mail_reader_get_message_list (reader);
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
 
 	mail_shell_sidebar = mail_shell_view->priv->mail_shell_sidebar;
 	folder_tree = e_mail_shell_sidebar_get_folder_tree (mail_shell_sidebar);
 
+	reader = E_MAIL_READER (mail_view);
+	message_list = e_mail_reader_get_message_list (reader);
+
 	/* Don't use e_mail_reader_get_folder_uri() here.  The fact that
 	 * the method gets the folder URI from the message list is supposed
 	 * to be a hidden implementation detail, and we want to explicitly
@@ -223,17 +237,22 @@ mail_shell_view_popup_event_cb (EMailShellView *mail_shell_view,
                                 GdkEventButton *event,
                                 const gchar *uri)
 {
+	EMailShellContent *mail_shell_content;
 	EShellView *shell_view;
 	EMailReader *reader;
+	EMailView *mail_view;
 	GtkMenu *menu;
 
 	if (uri != NULL)
 		return FALSE;
 
-	shell_view = E_SHELL_VIEW (mail_shell_view);
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+
+	reader = E_MAIL_READER (mail_view);
 	menu = e_mail_reader_get_popup_menu (reader);
 
+	shell_view = E_SHELL_VIEW (mail_shell_view);
 	e_shell_view_update_actions (shell_view);
 
 	if (event == NULL)
@@ -259,7 +278,9 @@ mail_shell_view_scroll_cb (EMailShellView *mail_shell_view,
 	EShellView *shell_view;
 	EShellWindow *shell_window;
 	EShellSettings *shell_settings;
+	EMailShellContent *mail_shell_content;
 	EMailReader *reader;
+	EMailView *mail_view;
 	EWebView *web_view;
 	GtkWidget *message_list;
 	gboolean magic_spacebar;
@@ -283,7 +304,10 @@ mail_shell_view_scroll_cb (EMailShellView *mail_shell_view,
 	if (!magic_spacebar)
 		return;
 
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+
+	reader = E_MAIL_READER (mail_view);
 	message_list = e_mail_reader_get_message_list (reader);
 
 	if (scroll_type == GTK_SCROLL_PAGE_FORWARD)
@@ -372,17 +396,22 @@ static void
 mail_shell_view_prepare_for_quit_cb (EMailShellView *mail_shell_view,
                                      EActivity *activity)
 {
+	EMailShellContent *mail_shell_content;
 	CamelFolder *folder;
 	EMailReader *reader;
+	EMailView *mail_view;
 	GtkWidget *message_list;
 
 	/* If we got here, it means the application is shutting down
 	 * and this is the last EMailShellView instance.  Synchronize
 	 * the currently selected folder before we terminate. */
 
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
-	message_list = e_mail_reader_get_message_list (reader);
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+
+	reader = E_MAIL_READER (mail_view);
 	folder = e_mail_reader_get_folder (reader);
+	message_list = e_mail_reader_get_message_list (reader);
 
 	message_list_save_state (MESSAGE_LIST (message_list));
 
@@ -427,10 +456,13 @@ mail_shell_view_notify_view_id_cb (EMailShellView *mail_shell_view)
 {
 	EMailShellContent *mail_shell_content;
 	GalViewInstance *view_instance;
+	EMailView *mail_view;
 	const gchar *view_id;
 
 	mail_shell_content = mail_shell_view->priv->mail_shell_content;
-	view_instance = e_mail_shell_content_get_view_instance (mail_shell_content);
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+
+	view_instance = e_mail_view_get_view_instance (mail_view);
 	view_id = e_shell_view_get_view_id (E_SHELL_VIEW (mail_shell_view));
 
 	/* A NULL view ID implies we're in a custom view.  But you can
@@ -481,6 +513,7 @@ e_mail_shell_view_private_constructed (EMailShellView *mail_shell_view)
 	GtkUIManager *ui_manager;
 	GtkWidget *message_list;
 	EMailReader *reader;
+	EMailView *mail_view;
 	EWebView *web_view;
 	const gchar *source;
 	guint merge_id;
@@ -513,19 +546,21 @@ e_mail_shell_view_private_constructed (EMailShellView *mail_shell_view)
 	priv->mail_shell_content = g_object_ref (shell_content);
 	priv->mail_shell_sidebar = g_object_ref (shell_sidebar);
 
-	reader = E_MAIL_READER (E_MAIL_SHELL_CONTENT(shell_content)->view);
-	formatter = e_mail_reader_get_formatter (reader);
-	message_list = e_mail_reader_get_message_list (reader);
-
 	mail_shell_sidebar = E_MAIL_SHELL_SIDEBAR (shell_sidebar);
 	folder_tree = e_mail_shell_sidebar_get_folder_tree (mail_shell_sidebar);
-	em_folder_tree_set_selectable_widget (folder_tree, message_list);
 	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_tree));
 
 	mail_shell_content = E_MAIL_SHELL_CONTENT (shell_content);
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
 	searchbar = e_mail_shell_content_get_searchbar (mail_shell_content);
 	combo_box = e_shell_searchbar_get_scope_combo_box (searchbar);
 
+	reader = E_MAIL_READER (shell_content);
+	formatter = e_mail_reader_get_formatter (reader);
+	message_list = e_mail_reader_get_message_list (reader);
+
+	em_folder_tree_set_selectable_widget (folder_tree, message_list);
+
 	/* The folder tree and scope combo box are both insensitive
 	 * when searching beyond the currently selected folder. */
 	e_mutual_binding_new (
@@ -571,8 +606,8 @@ e_mail_shell_view_private_constructed (EMailShellView *mail_shell_view)
 
 	g_signal_connect_object (
 		reader, "folder-loaded",
-		G_CALLBACK (e_mail_shell_content_update_view_instance),
-		shell_content, G_CONNECT_SWAPPED);
+		G_CALLBACK (e_mail_view_update_view_instance),
+		mail_view, G_CONNECT_SWAPPED);
 
 	/* Use the same callback as "changed". */
 	g_signal_connect_object (
@@ -634,6 +669,11 @@ e_mail_shell_view_private_constructed (EMailShellView *mail_shell_view)
 	e_mail_shell_view_actions_init (mail_shell_view);
 	e_mail_shell_view_update_search_filter (mail_shell_view);
 
+	/* This binding must come after e_mail_reader_init(). */
+	e_mutual_binding_new (
+		shell_content, "group-by-threads",
+		mail_view, "group-by-threads");
+
 	/* Populate built-in rules for search entry popup menu.
 	 * Keep the assertions, please.  If the conditions aren't
 	 * met we're going to crash anyway, just more mysteriously. */
@@ -707,6 +747,7 @@ e_mail_shell_view_restore_state (EMailShellView *mail_shell_view)
 	EMailShellContent *mail_shell_content;
 	EShellSearchbar *searchbar;
 	EMailReader *reader;
+	EMailView *mail_view;
 	CamelFolder *folder;
 	CamelVeeFolder *vee_folder;
 	const gchar *old_state_group;
@@ -718,9 +759,10 @@ e_mail_shell_view_restore_state (EMailShellView *mail_shell_view)
 	g_return_if_fail (E_IS_MAIL_SHELL_VIEW (mail_shell_view));
 
 	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
 	searchbar = e_mail_shell_content_get_searchbar (mail_shell_content);
 
-	reader = E_MAIL_READER (mail_shell_content->view);
+	reader = E_MAIL_READER (mail_view);
 	folder = e_mail_reader_get_folder (reader);
 	folder_uri = e_mail_reader_get_folder_uri (reader);
 
@@ -774,7 +816,9 @@ void
 e_mail_shell_view_create_filter_from_selected (EMailShellView *mail_shell_view,
                                                gint filter_type)
 {
+	EMailShellContent *mail_shell_content;
 	EMailReader *reader;
+	EMailView *mail_view;
 	CamelFolder *folder;
 	const gchar *filter_source;
 	const gchar *folder_uri;
@@ -787,7 +831,10 @@ e_mail_shell_view_create_filter_from_selected (EMailShellView *mail_shell_view,
 
 	g_return_if_fail (E_IS_MAIL_SHELL_VIEW (mail_shell_view));
 
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+
+	reader = E_MAIL_READER (mail_view);
 	folder = e_mail_reader_get_folder (reader);
 	folder_uri = e_mail_reader_get_folder_uri (reader);
 	uids = e_mail_reader_get_selected_uids (reader);
@@ -837,7 +884,9 @@ void
 e_mail_shell_view_create_vfolder_from_selected (EMailShellView *mail_shell_view,
                                                 gint vfolder_type)
 {
+	EMailShellContent *mail_shell_content;
 	EMailReader *reader;
+	EMailView *mail_view;
 	CamelFolder *folder;
 	const gchar *folder_uri;
 	GPtrArray *uids;
@@ -849,7 +898,10 @@ e_mail_shell_view_create_vfolder_from_selected (EMailShellView *mail_shell_view,
 
 	g_return_if_fail (E_IS_MAIL_SHELL_VIEW (mail_shell_view));
 
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+
+	reader = E_MAIL_READER (mail_view);
 	folder = e_mail_reader_get_folder (reader);
 	folder_uri = e_mail_reader_get_folder_uri (reader);
 	uids = e_mail_reader_get_selected_uids (reader);
@@ -875,6 +927,7 @@ e_mail_shell_view_update_sidebar (EMailShellView *mail_shell_view)
 	EShellSidebar *shell_sidebar;
 	EShellView *shell_view;
 	EMailReader *reader;
+	EMailView *mail_view;
 	CamelStore *local_store;
 	CamelStore *parent_store;
 	CamelFolder *folder;
@@ -893,11 +946,12 @@ e_mail_shell_view_update_sidebar (EMailShellView *mail_shell_view)
 	g_return_if_fail (E_IS_MAIL_SHELL_VIEW (mail_shell_view));
 
 	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
 
 	shell_view = E_SHELL_VIEW (mail_shell_view);
 	shell_sidebar = e_shell_view_get_shell_sidebar (shell_view);
 
-	reader = E_MAIL_READER (mail_shell_content->view);
+	reader = E_MAIL_READER (mail_view);
 	folder = e_mail_reader_get_folder (reader);
 	folder_uri = e_mail_reader_get_folder_uri (reader);
 
diff --git a/modules/mail/e-mail-shell-view.c b/modules/mail/e-mail-shell-view.c
index 12e0c0b..18db5e2 100644
--- a/modules/mail/e-mail-shell-view.c
+++ b/modules/mail/e-mail-shell-view.c
@@ -119,10 +119,15 @@ mail_shell_view_show_search_results_folder (EMailShellView *mail_shell_view,
                                             CamelFolder *folder,
                                             const gchar *folder_uri)
 {
+	EMailShellContent *mail_shell_content;
 	GtkWidget *message_list;
+	EMailView *mail_view;
 	EMailReader *reader;
 
-	reader = E_MAIL_READER (mail_shell_view->priv->mail_shell_content->view);
+	mail_shell_content = mail_shell_view->priv->mail_shell_content;
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+	reader = E_MAIL_READER (mail_view);
+
 	message_list = e_mail_reader_get_message_list (reader);
 
 	message_list_freeze (MESSAGE_LIST (message_list));
@@ -177,10 +182,14 @@ mail_shell_view_toggled (EShellView *shell_view)
 	basename = E_MAIL_READER_UI_DEFINITION;
 
 	if (view_is_active && priv->merge_id == 0) {
+		EMailView *mail_view;
+
 		priv->merge_id = e_ui_manager_add_ui_from_file (
 			E_UI_MANAGER (ui_manager), basename);
+		mail_view = e_mail_shell_content_get_mail_view (
+			priv->mail_shell_content);
 		e_mail_reader_create_charset_menu (
-			E_MAIL_READER (priv->mail_shell_content->view),
+			E_MAIL_READER (mail_view),
 			ui_manager, priv->merge_id);
 	} else if (!view_is_active && priv->merge_id != 0) {
 		gtk_ui_manager_remove_ui (ui_manager, priv->merge_id);
@@ -210,6 +219,7 @@ mail_shell_view_execute_search (EShellView *shell_view)
 	GtkWidget *message_list;
 	EFilterRule *rule;
 	EMailReader *reader;
+	EMailView *mail_view;
 	CamelVeeFolder *search_folder;
 	CamelFolder *folder;
 	CamelStore *store;
@@ -242,13 +252,14 @@ mail_shell_view_execute_search (EShellView *shell_view)
 	shell_settings = e_shell_get_shell_settings (shell);
 
 	mail_shell_content = E_MAIL_SHELL_CONTENT (shell_content);
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
 	searchbar = e_mail_shell_content_get_searchbar (mail_shell_content);
 
 	mail_shell_sidebar = E_MAIL_SHELL_SIDEBAR (shell_sidebar);
 	folder_tree = e_mail_shell_sidebar_get_folder_tree (mail_shell_sidebar);
 	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_tree));
 
-	reader = E_MAIL_READER (E_MAIL_SHELL_CONTENT (shell_content)->view);
+	reader = E_MAIL_READER (mail_view);
 	folder = e_mail_reader_get_folder (reader);
 	folder_uri = e_mail_reader_get_folder_uri (reader);
 	message_list = e_mail_reader_get_message_list (reader);
@@ -698,8 +709,7 @@ execute:
 
 	message_list_set_search (MESSAGE_LIST (message_list), query);
 
-	e_mail_shell_content_set_search_strings (
-		mail_shell_content, search_strings);
+	e_mail_view_set_search_strings (mail_view, search_strings);
 
 	g_slist_foreach (search_strings, (GFunc) g_free, NULL);
 	g_slist_free (search_strings);
@@ -769,6 +779,7 @@ mail_shell_view_update_actions (EShellView *shell_view)
 	EShellWindow *shell_window;
 	EMFolderTree *folder_tree;
 	EMailReader *reader;
+	EMailView *mail_view;
 	EAccount *account = NULL;
 	GtkAction *action;
 	const gchar *label;
@@ -795,7 +806,9 @@ mail_shell_view_update_actions (EShellView *shell_view)
 	shell_window = e_shell_view_get_shell_window (shell_view);
 
 	mail_shell_content = mail_shell_view->priv->mail_shell_content;
-	reader = E_MAIL_READER (mail_shell_content->view);
+	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
+
+	reader = E_MAIL_READER (mail_view);
 	state = e_mail_reader_check_state (reader);
 	e_mail_reader_update_actions (reader, state);
 



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