[evolution/tabs-rewrite] Add folder pane for tabbed browser.



commit af785fb9a07125a1681ac599cf2902e8959b1de1
Author: Srinivasa Ragavan <sragavan gnome org>
Date:   Wed Jul 14 13:47:41 2010 +0530

    Add folder pane for tabbed browser.

 mail/Makefile.am                    |    4 +
 mail/e-mail-folder-pane.c           |  804 +++--------------------------------
 mail/e-mail-folder-pane.h           |   16 +-
 mail/e-mail-message-pane.c          |  782 ++--------------------------------
 mail/e-mail-message-pane.h          |   16 +-
 mail/e-mail-notebook-view.c         |  220 +++++++++-
 mail/e-mail-notebook-view.h         |   17 +
 mail/e-mail-paned-view.c            |   59 +++-
 mail/e-mail-paned-view.h            |   10 +
 mail/e-mail-reader.c                |   16 +-
 mail/e-mail-reader.h                |    2 +
 mail/e-mail-view.c                  |   63 +++-
 mail/e-mail-view.h                  |   16 +-
 modules/mail/e-mail-shell-content.c |  149 +++++++-
 14 files changed, 615 insertions(+), 1559 deletions(-)
---
diff --git a/mail/Makefile.am b/mail/Makefile.am
index 4ddb9cc..daa6eda 100644
--- a/mail/Makefile.am
+++ b/mail/Makefile.am
@@ -36,6 +36,8 @@ libevolution_mail_la_CPPFLAGS =				\
 
 mailinclude_HEADERS =					\
 	e-mail-view.h					\
+	e-mail-folder-pane.h				\
+	e-mail-message-pane.h				\
 	e-mail-paned-view.h				\
 	e-mail-notebook-view.h				\
 	e-mail-attachment-bar.h				\
@@ -96,6 +98,8 @@ mailinclude_HEADERS =					\
 
 libevolution_mail_la_SOURCES =				\
 	e-mail-view.c					\
+	e-mail-folder-pane.c				\
+	e-mail-message-pane.c				\
 	e-mail-paned-view.c				\
 	e-mail-notebook-view.c				\
 	e-mail-attachment-bar.c				\
diff --git a/mail/e-mail-folder-pane.c b/mail/e-mail-folder-pane.c
index 1b96327..be05cb3 100644
--- a/mail/e-mail-folder-pane.c
+++ b/mail/e-mail-folder-pane.c
@@ -43,366 +43,78 @@
 	((obj), E_TYPE_MAIL_FOLDER_PANE, EMailFolderPanePrivate))
 
 struct _EMailFolderPanePrivate {
-	GtkUIManager *ui_manager;
-	EFocusTracker *focus_tracker;
-	EShellBackend *shell_backend;
-	GtkActionGroup *action_group;
-	EMFormatHTMLDisplay *formatter;
-
-	GtkWidget *main_menu;
-	GtkWidget *main_toolbar;
-	GtkWidget *message_list;
-	GtkWidget *search_bar;
-	GtkWidget *statusbar;
-
-	guint show_deleted : 1;
+	int fo;
 };
 
 enum {
 	PROP_0,
-	PROP_FOCUS_TRACKER,
-	PROP_GROUP_BY_THREADS,
-	PROP_SHELL_BACKEND,
-	PROP_SHOW_DELETED,
-	PROP_UI_MANAGER
+	PROP_PREVIEW_VISIBLE,
 };
 
 static gpointer parent_class;
 
-/* This is too trivial to put in a file.
- * It gets merged with the EMailReader UI. */
-static const gchar *ui =
-"<ui>"
-"  <menubar name='main-menu'>"
-"    <menu action='file-menu'>"
-"      <placeholder name='file-actions'/>"
-"      <placeholder name='print-actions'/>"
-"      <separator/>"
-"      <menuitem action='close'/>"
-"    </menu>"
-"    <menu action='edit-menu'>"
-"      <placeholder name='selection-actions'>"
-"        <menuitem action='cut-clipboard'/>"
-"        <menuitem action='copy-clipboard'/>"
-"        <menuitem action='paste-clipboard'/>"
-"        <separator/>"
-"        <menuitem action='select-all'/>"
-"      </placeholder>"
-"    </menu>"
-"  </menubar>"
-"</ui>";
 
 static void
-action_close_cb (GtkAction *action,
-                 EMailFolderPane *browser)
-{
-	e_mail_folder_pane_close (browser);
-}
-
-static GtkActionEntry mail_folder_pane_entries[] = {
-
-	{ "close",
-	  GTK_STOCK_CLOSE,
-	  NULL,
-	  NULL,
-	  N_("Close this window"),
-	  G_CALLBACK (action_close_cb) },
-
-	{ "copy-clipboard",
-	  GTK_STOCK_COPY,
-	  NULL,
-	  NULL,
-	  N_("Copy the selection"),
-	  NULL },  /* Handled by EFocusTracker */
-
-	{ "cut-clipboard",
-	  GTK_STOCK_CUT,
-	  NULL,
-	  NULL,
-	  N_("Cut the selection"),
-	  NULL },  /* Handled by EFocusTracker */
-
-	{ "paste-clipboard",
-	  GTK_STOCK_PASTE,
-	  NULL,
-	  NULL,
-	  N_("Paste the clipboard"),
-	  NULL },  /* Handled by EFocusTracker */
-
-	{ "select-all",
-	  GTK_STOCK_SELECT_ALL,
-	  NULL,
-	  NULL,
-	  N_("Select all text"),
-	  NULL },  /* Handled by EFocusTracker */
-
-	/*** Menus ***/
-
-	{ "file-menu",
-	  NULL,
-	  N_("_File"),
-	  NULL,
-	  NULL,
-	  NULL },
-
-	{ "edit-menu",
-	  NULL,
-	  N_("_Edit"),
-	  NULL,
-	  NULL,
-	  NULL },
-
-	{ "view-menu",
-	  NULL,
-	  N_("_View"),
-	  NULL,
-	  NULL,
-	  NULL }
-};
-
-static EPopupActionEntry mail_folder_pane_popup_entries[] = {
-
-	{ "popup-copy-clipboard",
-	  NULL,
-	  "copy-clipboard" }
-};
-
-static void
-mail_folder_pane_menu_item_select_cb (EMailFolderPane *browser,
-                                  GtkWidget *widget)
-{
-	GtkAction *action;
-	GtkActivatable *activatable;
-	GtkStatusbar *statusbar;
-	const gchar *tooltip;
-	guint context_id;
-	gpointer data;
-
-	activatable = GTK_ACTIVATABLE (widget);
-	action = gtk_activatable_get_related_action (activatable);
-	tooltip = gtk_action_get_tooltip (action);
-
-	data = g_object_get_data (G_OBJECT (widget), "context-id");
-	context_id = GPOINTER_TO_UINT (data);
-
-	if (tooltip == NULL)
-		return;
-
-	statusbar = GTK_STATUSBAR (browser->priv->statusbar);
-	gtk_statusbar_push (statusbar, context_id, tooltip);
-}
-
-static void
-mail_folder_pane_menu_item_deselect_cb (EMailFolderPane *browser,
-                                    GtkWidget *menu_item)
-{
-	GtkStatusbar *statusbar;
-	guint context_id;
-	gpointer data;
-
-	data = g_object_get_data (G_OBJECT (menu_item), "context-id");
-	context_id = GPOINTER_TO_UINT (data);
-
-	statusbar = GTK_STATUSBAR (browser->priv->statusbar);
-	gtk_statusbar_pop (statusbar, context_id);
-}
-
-static void
-mail_folder_pane_connect_proxy_cb (EMailFolderPane *browser,
-                               GtkAction *action,
-                               GtkWidget *proxy)
+mail_folder_pane_dispose (GObject *object)
 {
-	GtkStatusbar *statusbar;
-	guint context_id;
-
-	if (!GTK_IS_MENU_ITEM (proxy))
-		return;
-
-	statusbar = GTK_STATUSBAR (browser->priv->statusbar);
-	context_id = gtk_statusbar_get_context_id (statusbar, G_STRFUNC);
-
-	g_object_set_data (
-		G_OBJECT (proxy), "context-id",
-		GUINT_TO_POINTER (context_id));
+	EMailFolderPanePrivate *priv;
 
-	g_signal_connect_swapped (
-		proxy, "select",
-		G_CALLBACK (mail_folder_pane_menu_item_select_cb), browser);
+	priv = E_MAIL_FOLDER_PANE_GET_PRIVATE (object);
 
-	g_signal_connect_swapped (
-		proxy, "deselect",
-		G_CALLBACK (mail_folder_pane_menu_item_deselect_cb), browser);
+	/* Chain up to parent's dispose() method. */
+	G_OBJECT_CLASS (parent_class)->dispose (object);
 }
 
 static void
-mail_folder_pane_message_selected_cb (EMailFolderPane *browser,
-                                  const gchar *uid)
+mail_folder_pane_constructed (GObject *object)
 {
-	EMFormatHTML *formatter;
-	CamelMessageInfo *info;
-	CamelFolder *folder;
-	EMailReader *reader;
-	EWebView *web_view;
-	const gchar *title;
-
-	if (uid == NULL)
-		return;
-
-	reader = E_MAIL_READER (browser);
-	folder = e_mail_reader_get_folder (reader);
-	formatter = e_mail_reader_get_formatter (reader);
-	web_view = em_format_html_get_web_view (formatter);
-
-	info = camel_folder_get_message_info (folder, uid);
-
-	if (info == NULL)
-		return;
-
-	title = camel_message_info_subject (info);
-	if (title == NULL || *title == '\0')
-		title = _("(No Subject)");
-
-	gtk_widget_grab_focus (GTK_WIDGET (web_view));
-
-	camel_folder_free_message_info (folder, info);
-}
+	/* Chain up to parent's constructed() method. */
+	if (G_OBJECT_CLASS (parent_class)->constructed)
+		G_OBJECT_CLASS (parent_class)->constructed (object);
 
-static gboolean
-close_on_idle_cb (gpointer browser)
-{
-	e_mail_folder_pane_close (browser);
-	return FALSE;
 }
 
 static void
-mail_folder_pane_message_list_built_cb (EMailFolderPane *browser,
-                                    MessageList *message_list)
+folder_pane_set_preview_visible (EMailPanedView *view,
+                                          gboolean preview_visible)
 {
-	g_return_if_fail (E_IS_MAIL_FOLDER_PANE (browser));
-	g_return_if_fail (IS_MESSAGE_LIST (message_list));
-
-	if (!message_list_count (message_list))
-		g_idle_add (close_on_idle_cb, browser);
+	return;
 }
 
 static gboolean
-mail_folder_pane_popup_event_cb (EMailFolderPane *browser,
-                             GdkEventButton *event,
-                             const gchar *uri)
+folder_pane_get_preview_visible (EMailPanedView *view)
 {
-	EMailReader *reader;
-	GtkMenu *menu;
 
-	if (uri != NULL)
-		return FALSE;
-
-	reader = E_MAIL_READER (browser);
-	menu = e_mail_reader_get_popup_menu (reader);
-
-	e_mail_reader_update_actions (reader);
-
-	if (event == NULL)
-		gtk_menu_popup (
-			menu, NULL, NULL, NULL, NULL,
-			0, gtk_get_current_event_time ());
-	else
-		gtk_menu_popup (
-			menu, NULL, NULL, NULL, NULL,
-			event->button, event->time);
-
-	return TRUE;
-}
-
-static void
-mail_folder_pane_status_message_cb (EMailFolderPane *browser,
-                                const gchar *status_message)
-{
-	GtkStatusbar *statusbar;
-	guint context_id;
-
-	statusbar = GTK_STATUSBAR (browser->priv->statusbar);
-	context_id = gtk_statusbar_get_context_id (statusbar, G_STRFUNC);
-
-	/* Always pop first.  This prevents messages from piling up. */
-	gtk_statusbar_pop (statusbar, context_id);
-
-	if (status_message != NULL && *status_message != '\0')
-		gtk_statusbar_push (statusbar, context_id, status_message);
-}
-
-static void
-mail_folder_pane_set_shell_backend (EMailFolderPane *browser,
-                                EShellBackend *shell_backend)
-{
-	g_return_if_fail (browser->priv->shell_backend == NULL);
-
-	browser->priv->shell_backend = g_object_ref (shell_backend);
+	return FALSE;
 }
 
 static void
-mail_folder_pane_set_property (GObject *object,
-                           guint property_id,
-                           const GValue *value,
-                           GParamSpec *pspec)
+mail_folder_pane_get_property (GObject *object,
+                                 guint property_id,
+                                 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));
+		case PROP_PREVIEW_VISIBLE:
+			g_value_set_boolean (
+				value,
+				FALSE);
 			return;
 
-		case PROP_SHELL_BACKEND:
-			mail_folder_pane_set_shell_backend (
-				E_MAIL_FOLDER_PANE (object),
-				g_value_get_object (value));
-			return;
 
-		case PROP_SHOW_DELETED:
-			e_mail_folder_pane_set_show_deleted (
-				E_MAIL_FOLDER_PANE (object),
-				g_value_get_boolean (value));
-			return;
 	}
 
 	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
 }
 
 static void
-mail_folder_pane_get_property (GObject *object,
-                           guint property_id,
-                           GValue *value,
-                           GParamSpec *pspec)
+mail_folder_pane_set_property (GObject *object,
+                                 guint property_id,
+                                 const GValue *value,
+                                 GParamSpec *pspec)
 {
 	switch (property_id) {
-		case PROP_FOCUS_TRACKER:
-			g_value_set_object (
-				value, e_mail_folder_pane_get_focus_tracker (
-				E_MAIL_FOLDER_PANE (object)));
-			return;
-
-		case PROP_GROUP_BY_THREADS:
-			g_value_set_boolean (
-				value, e_mail_reader_get_group_by_threads (
-				E_MAIL_READER (object)));
-			return;
-
-		case PROP_SHELL_BACKEND:
-			g_value_set_object (
-				value, e_mail_reader_get_shell_backend (
-				E_MAIL_READER (object)));
-			return;
-
-		case PROP_SHOW_DELETED:
-			g_value_set_boolean (
-				value, e_mail_folder_pane_get_show_deleted (
-				E_MAIL_FOLDER_PANE (object)));
-			return;
-
-		case PROP_UI_MANAGER:
-			g_value_set_object (
-				value, e_mail_folder_pane_get_ui_manager (
-				E_MAIL_FOLDER_PANE (object)));
+		case PROP_PREVIEW_VISIBLE:
 			return;
 	}
 
@@ -410,416 +122,52 @@ mail_folder_pane_get_property (GObject *object,
 }
 
 static void
-mail_folder_pane_dispose (GObject *object)
+mfp_open_selected_mail (EMailPanedView *view)
 {
-	EMailFolderPanePrivate *priv;
-
-	priv = E_MAIL_FOLDER_PANE_GET_PRIVATE (object);
-
-	if (priv->ui_manager != NULL) {
-		g_object_unref (priv->ui_manager);
-		priv->ui_manager = NULL;
-	}
-
-	if (priv->focus_tracker != NULL) {
-		g_object_unref (priv->focus_tracker);
-		priv->focus_tracker = NULL;
-	}
-
-	if (priv->shell_backend != NULL) {
-		g_object_unref (priv->shell_backend);
-		priv->shell_backend = NULL;
-	}
-
-	if (priv->action_group != NULL) {
-		g_object_unref (priv->action_group);
-		priv->action_group = NULL;
-	}
+	GPtrArray *uids;
+	int i;
 
-	if (priv->formatter != NULL) {
-		g_object_unref (priv->formatter);
-		priv->formatter = NULL;
+	uids = e_mail_reader_get_selected_uids (E_MAIL_READER(view)); 
+	for (i=0; i<uids->len; i++) {
+		g_signal_emit_by_name (view, "open-mail", uids->pdata[i]);
 	}
-
-	if (priv->main_menu != NULL) {
-		g_object_unref (priv->main_menu);
-		priv->main_menu = NULL;
-	}
-
-	if (priv->main_toolbar != NULL) {
-		g_object_unref (priv->main_toolbar);
-		priv->main_toolbar = NULL;
-	}
-
-	if (priv->message_list != NULL) {
-		/* This will cancel a regen operation. */
-		gtk_widget_destroy (priv->message_list);
-		priv->message_list = NULL;
-	}
-
-	if (priv->search_bar != NULL) {
-		g_object_unref (priv->search_bar);
-		priv->search_bar = NULL;
-	}
-
-	if (priv->statusbar != NULL) {
-		g_object_unref (priv->statusbar);
-		priv->statusbar = NULL;
-	}
-
-	/* Chain up to parent's dispose() method. */
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	
+	printf("I WIN\n");
 }
 
 static void
-mail_folder_pane_constructed (GObject *object)
-{
-	EMailFolderPanePrivate *priv;
-	EMFormatHTML *formatter;
-	EMailReader *reader;
-	EShellBackend *shell_backend;
-	EShell *shell;
-	EFocusTracker *focus_tracker;
-	ESearchBar *search_bar;
-	GConfBridge *bridge;
-	GtkAccelGroup *accel_group;
-	GtkActionGroup *action_group;
-	GtkAction *action;
-	GtkUIManager *ui_manager;
-	GtkWidget *container;
-	GtkWidget *widget;
-	EWebView *web_view;
-	const gchar *domain;
-	const gchar *key;
-	const gchar *id;
-	guint merge_id;
-
-	/* Chain up to parent's constructed() method. */
-	if (G_OBJECT_CLASS (parent_class)->constructed)
-		G_OBJECT_CLASS (parent_class)->constructed (object);
-
-	priv = E_MAIL_FOLDER_PANE_GET_PRIVATE (object);
-
-	reader = E_MAIL_READER (object);
-
-	shell_backend = e_mail_reader_get_shell_backend (reader);
-	shell = e_shell_backend_get_shell (shell_backend);
-
-	ui_manager = e_ui_manager_new ();
-	e_shell_configure_ui_manager (shell, E_UI_MANAGER (ui_manager));
-
-	priv->ui_manager = ui_manager;
-	domain = GETTEXT_PACKAGE;
-
-	formatter = e_mail_reader_get_formatter (reader);
-
-	web_view = em_format_html_get_web_view (formatter);
-
-	/* The message list is a widget, but it is not shown in the browser.
-	 * Unfortunately, the widget is inseparable from its model, and the
-	 * model is all we need. */
-	priv->message_list = message_list_new (shell_backend);
-	g_object_ref_sink (priv->message_list);
-
-	g_signal_connect_swapped (
-		priv->message_list, "message-selected",
-		G_CALLBACK (mail_folder_pane_message_selected_cb), object);
-
-	g_signal_connect_swapped (
-		priv->message_list, "message-list-built",
-		G_CALLBACK (mail_folder_pane_message_list_built_cb), object);
-
-	g_signal_connect_swapped (
-		web_view, "popup-event",
-		G_CALLBACK (mail_folder_pane_popup_event_cb), object);
-
-	g_signal_connect_swapped (
-		web_view, "status-message",
-		G_CALLBACK (mail_folder_pane_status_message_cb), object);
-
-	e_mail_reader_init (reader);
-
-	action_group = priv->action_group;
-	gtk_action_group_set_translation_domain (action_group, domain);
-	gtk_action_group_add_actions (
-		action_group, mail_folder_pane_entries,
-		G_N_ELEMENTS (mail_folder_pane_entries), object);
-	e_action_group_add_popup_actions (
-		action_group, mail_folder_pane_popup_entries,
-		G_N_ELEMENTS (mail_folder_pane_popup_entries));
-	gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
-
-	e_ui_manager_add_ui_from_file (
-		E_UI_MANAGER (ui_manager), E_MAIL_READER_UI_DEFINITION);
-	e_ui_manager_add_ui_from_string (
-		E_UI_MANAGER (ui_manager), ui, NULL);
-
-	merge_id = gtk_ui_manager_new_merge_id (GTK_UI_MANAGER (ui_manager));
-	e_mail_reader_create_charset_menu (reader, ui_manager, merge_id);
-
-	accel_group = gtk_ui_manager_get_accel_group (ui_manager);
-	gtk_window_add_accel_group (GTK_WINDOW (object), accel_group);
-
-	g_signal_connect_swapped (
-		ui_manager, "connect-proxy",
-		G_CALLBACK (mail_folder_pane_connect_proxy_cb), object);
-
-	/* Configure an EFocusTracker to manage selection actions. */
-
-	focus_tracker = e_focus_tracker_new (GTK_WINDOW (object));
-	action = gtk_action_group_get_action (action_group, "cut-clipboard");
-	e_focus_tracker_set_cut_clipboard_action (focus_tracker, action);
-	action = gtk_action_group_get_action (action_group, "copy-clipboard");
-	e_focus_tracker_set_copy_clipboard_action (focus_tracker, action);
-	action = gtk_action_group_get_action (action_group, "paste-clipboard");
-	e_focus_tracker_set_paste_clipboard_action (focus_tracker, action);
-	action = gtk_action_group_get_action (action_group, "select-all");
-	e_focus_tracker_set_select_all_action (focus_tracker, action);
-	priv->focus_tracker = focus_tracker;
-
-	/* Construct window widgets. */
-
-	widget = (GtkWidget *)object;
-	gtk_box_set_spacing (GTK_BOX (widget), 0);
-
-	container = (GtkWidget *)object;
-
-	gtk_widget_show (GTK_WIDGET (web_view));
-
-	widget = e_preview_pane_new (web_view);
-	gtk_box_pack_start (GTK_BOX (container), widget, TRUE, TRUE, 0);
-	gtk_widget_show (widget);
-
-	search_bar = e_preview_pane_get_search_bar (E_PREVIEW_PANE (widget));
-	priv->search_bar = g_object_ref (search_bar);
-
-	g_signal_connect_swapped (
-		search_bar, "changed",
-		G_CALLBACK (em_format_redraw), priv->formatter);
-
-	/* Bind GObject properties to GConf keys. */
-
-	bridge = gconf_bridge_get ();
-
-	object = G_OBJECT (reader);
-	key = "/apps/evolution/mail/display/show_deleted";
-	gconf_bridge_bind_property (bridge, key, object, "show-deleted");
-
-	id = "org.gnome.evolution.mail.folder.pane";
-	e_plugin_ui_register_manager (ui_manager, id, object);
-	e_plugin_ui_enable_manager (ui_manager, id);
-
-	e_mail_reader_connect_headers (E_MAIL_READER (reader));
-}
-
-static gboolean
-mail_folder_pane_key_press_event (GtkWidget *widget,
-                              GdkEventKey *event)
-{
-	if (event->keyval == GDK_Escape) {
-		e_mail_folder_pane_close (E_MAIL_FOLDER_PANE (widget));
-		return TRUE;
-	}
-
-	/* Chain up to parent's key_press_event() method. */
-	return GTK_WIDGET_CLASS (parent_class)->
-		key_press_event (widget, event);
-}
-
-static GtkActionGroup *
-mail_folder_pane_get_action_group (EMailReader *reader)
-{
-	EMailFolderPanePrivate *priv;
-
-	priv = E_MAIL_FOLDER_PANE_GET_PRIVATE (reader);
-
-	return priv->action_group;
-}
-
-static gboolean
-mail_folder_pane_get_hide_deleted (EMailReader *reader)
-{
-	EMailFolderPane *browser;
-
-	browser = E_MAIL_FOLDER_PANE (reader);
-
-	return !e_mail_folder_pane_get_show_deleted (browser);
-}
-
-static EMFormatHTML *
-mail_folder_pane_get_formatter (EMailReader *reader)
-{
-	EMailFolderPanePrivate *priv;
-
-	priv = E_MAIL_FOLDER_PANE_GET_PRIVATE (reader);
-
-	return EM_FORMAT_HTML (priv->formatter);
-}
-
-static GtkWidget *
-mail_folder_pane_get_message_list (EMailReader *reader)
-{
-	EMailFolderPanePrivate *priv;
-
-	priv = E_MAIL_FOLDER_PANE_GET_PRIVATE (reader);
-
-	return priv->message_list;
-}
-
-static GtkMenu *
-mail_folder_pane_get_popup_menu (EMailReader *reader)
-{
-	EMailFolderPane *browser;
-	GtkUIManager *ui_manager;
-	GtkWidget *widget;
-
-	browser = E_MAIL_FOLDER_PANE (reader);
-	ui_manager = e_mail_folder_pane_get_ui_manager (browser);
-	widget = gtk_ui_manager_get_widget (ui_manager, "/mail-preview-popup");
-
-	return GTK_MENU (widget);
-}
-
-static EShellBackend *
-mail_folder_pane_get_shell_backend (EMailReader *reader)
-{
-	EMailFolderPanePrivate *priv;
-
-	priv = E_MAIL_FOLDER_PANE_GET_PRIVATE (reader);
-
-	return priv->shell_backend;
-}
-
-static GtkWindow *
-mail_folder_pane_get_window (EMailReader *reader)
-{
-	return NULL;
-}
-
-static void
-mail_folder_pane_set_message (EMailReader *reader,
-                          const gchar *uid)
-{
-	EMailReaderIface *iface;
-	CamelMessageInfo *info;
-	CamelFolder *folder;
-
-	/* Chain up to parent's set_message() method. */
-	iface = g_type_default_interface_peek (E_TYPE_MAIL_READER);
-	iface->set_message (reader, uid);
-
-	if (uid == NULL) {
-		e_mail_folder_pane_close (E_MAIL_FOLDER_PANE (reader));
-		return;
-	}
-
-	folder = e_mail_reader_get_folder (reader);
-	info = camel_folder_get_message_info (folder, uid);
-
-	if (info != NULL) {
-		gtk_window_set_title (
-			GTK_WINDOW (reader),
-			camel_message_info_subject (info));
-		camel_folder_free_message_info (folder, info);
-	}
-}
-
-static void
-mail_folder_pane_show_search_bar (EMailReader *reader)
-{
-	EMailFolderPanePrivate *priv;
-
-	priv = E_MAIL_FOLDER_PANE_GET_PRIVATE (reader);
-
-	gtk_widget_show (priv->search_bar);
-}
-
-static void
-mail_folder_pane_class_init (EMailFolderPaneClass *class)
+mail_folder_pane_class_init (EMailPanedViewClass *class)
 {
 	GObjectClass *object_class;
-	GtkWidgetClass *widget_class;
 
 	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (EMailFolderPanePrivate));
 
 	object_class = G_OBJECT_CLASS (class);
-	object_class->set_property = mail_folder_pane_set_property;
-	object_class->get_property = mail_folder_pane_get_property;
 	object_class->dispose = mail_folder_pane_dispose;
 	object_class->constructed = mail_folder_pane_constructed;
+	object_class->set_property = mail_folder_pane_set_property;
+	object_class->get_property = mail_folder_pane_get_property;
 
-	widget_class = GTK_WIDGET_CLASS (class);
-	widget_class->key_press_event = mail_folder_pane_key_press_event;
+	class->open_selected_mail = mfp_open_selected_mail;
+
+	E_MAIL_VIEW_CLASS(g_type_class_peek_parent(class))->set_preview_visible = folder_pane_set_preview_visible;
+	E_MAIL_VIEW_CLASS(g_type_class_peek_parent(class))->get_preview_visible = folder_pane_get_preview_visible;
 
-	g_object_class_install_property (
-		object_class,
-		PROP_FOCUS_TRACKER,
-		g_param_spec_object (
-			"focus-tracker",
-			"Focus Tracker",
-			NULL,
-			E_TYPE_FOCUS_TRACKER,
-			G_PARAM_READABLE));
-
-	/* Inherited from EMailReader */
 	g_object_class_override_property (
 		object_class,
-		PROP_GROUP_BY_THREADS,
-		"group-by-threads");
+		PROP_PREVIEW_VISIBLE,
+		"preview-visible");
 
-	g_object_class_install_property (
-		object_class,
-		PROP_SHELL_BACKEND,
-		g_param_spec_object (
-			"shell-backend",
-			"Shell Module",
-			"The mail shell backend",
-			E_TYPE_SHELL_BACKEND,
-			G_PARAM_READWRITE |
-			G_PARAM_CONSTRUCT_ONLY));
-
-	g_object_class_install_property (
-		object_class,
-		PROP_SHOW_DELETED,
-		g_param_spec_boolean (
-			"show-deleted",
-			"Show Deleted",
-			"Show deleted messages",
-			FALSE,
-			G_PARAM_READWRITE));
 }
 
-static void
-mail_folder_pane_iface_init (EMailReaderIface *iface)
-{
-	iface->get_action_group = mail_folder_pane_get_action_group;
-	iface->get_formatter = mail_folder_pane_get_formatter;
-	iface->get_hide_deleted = mail_folder_pane_get_hide_deleted;
-	iface->get_message_list = mail_folder_pane_get_message_list;
-	iface->get_popup_menu = mail_folder_pane_get_popup_menu;
-	iface->get_shell_backend = mail_folder_pane_get_shell_backend;
-	iface->get_window = mail_folder_pane_get_window;
-	iface->set_message = mail_folder_pane_set_message;
-	iface->show_search_bar = mail_folder_pane_show_search_bar;
-}
 
 static void
 mail_folder_pane_init (EMailFolderPane *browser)
 {
-	GConfBridge *bridge;
-	const gchar *prefix;
 
 	browser->priv = E_MAIL_FOLDER_PANE_GET_PRIVATE (browser);
 
-	browser->priv->action_group = gtk_action_group_new ("mail-browser");
-	browser->priv->formatter = em_format_html_display_new ();
-
-	bridge = gconf_bridge_get ();
-	prefix = "/apps/evolution/mail/mail_browser";
-	gconf_bridge_bind_window_size (bridge, prefix, GTK_WINDOW (browser));
-
-	gtk_window_set_title (GTK_WINDOW (browser), _("Evolution"));
 }
 
 GType
@@ -841,71 +189,23 @@ e_mail_folder_pane_get_type (void)
 			NULL   /* value_table */
 		};
 
-		static const GInterfaceInfo iface_info = {
-			(GInterfaceInitFunc) mail_folder_pane_iface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL   /* interface_data */
-		};
-
 		type = g_type_register_static (
-			GTK_TYPE_WINDOW, "EMailFolderPane", &type_info, 0);
+			E_MAIL_PANED_VIEW_TYPE, "EMailFolderPane", &type_info, 0);
 
-		g_type_add_interface_static (
-			type, E_TYPE_MAIL_READER, &iface_info);
 	}
 
 	return type;
 }
 
 GtkWidget *
-e_mail_folder_pane_new (EShellBackend *shell_backend)
+e_mail_folder_pane_new (EShellContent *content)
 {
-	g_return_val_if_fail (E_IS_SHELL_BACKEND (shell_backend), NULL);
+	g_return_val_if_fail (E_IS_SHELL_CONTENT (content), NULL);
 
 	return g_object_new (
 		E_TYPE_MAIL_FOLDER_PANE,
-		"shell-backend", shell_backend, NULL);
-}
-
-void
-e_mail_folder_pane_close (EMailFolderPane *browser)
-{
-	g_return_if_fail (E_IS_MAIL_FOLDER_PANE (browser));
-
-	gtk_widget_destroy (GTK_WIDGET (browser));
-}
-
-gboolean
-e_mail_folder_pane_get_show_deleted (EMailFolderPane *browser)
-{
-	g_return_val_if_fail (E_IS_MAIL_FOLDER_PANE (browser), FALSE);
-
-	return browser->priv->show_deleted;
-}
-
-void
-e_mail_folder_pane_set_show_deleted (EMailFolderPane *browser,
-                                 gboolean show_deleted)
-{
-	g_return_if_fail (E_IS_MAIL_FOLDER_PANE (browser));
-
-	browser->priv->show_deleted = show_deleted;
-
-	g_object_notify (G_OBJECT (browser), "show-deleted");
+		"shell-content", content, 
+		"preview-visible", FALSE,
+		NULL);
 }
 
-EFocusTracker *
-e_mail_folder_pane_get_focus_tracker (EMailFolderPane *browser)
-{
-	g_return_val_if_fail (E_IS_MAIL_FOLDER_PANE (browser), NULL);
-
-	return browser->priv->focus_tracker;
-}
-
-GtkUIManager *
-e_mail_folder_pane_get_ui_manager (EMailFolderPane *browser)
-{
-	g_return_val_if_fail (E_IS_MAIL_FOLDER_PANE (browser), NULL);
-
-	return browser->priv->ui_manager;
-}
diff --git a/mail/e-mail-folder-pane.h b/mail/e-mail-folder-pane.h
index db5951b..6071ce6 100644
--- a/mail/e-mail-folder-pane.h
+++ b/mail/e-mail-folder-pane.h
@@ -23,8 +23,8 @@
 #define E_MAIL_FOLDER_PANE_H
 
 #include <gtk/gtk.h>
-#include <misc/e-focus-tracker.h>
-#include <shell/e-shell-backend.h>
+#include <shell/e-shell-content.h>
+#include "mail/e-mail-paned-view.h"
 
 /* Standard GObject macros */
 #define E_TYPE_MAIL_FOLDER_PANE \
@@ -52,22 +52,16 @@ typedef struct _EMailFolderPaneClass EMailFolderPaneClass;
 typedef struct _EMailFolderPanePrivate EMailFolderPanePrivate;
 
 struct _EMailFolderPane {
-	GtkVBox parent;
+	EMailPanedView parent;
 	EMailFolderPanePrivate *priv;
 };
 
 struct _EMailFolderPaneClass {
-	GtkVBoxClass parent_class;
+	EMailPanedViewClass parent_class;
 };
 
 GType		e_mail_folder_pane_get_type		(void);
-GtkWidget *	e_mail_folder_pane_new		(EShellBackend *shell_backend);
-void		e_mail_folder_pane_close		(EMailFolderPane *browser);
-gboolean	e_mail_folder_pane_get_show_deleted	(EMailFolderPane *browser);
-void		e_mail_folder_pane_set_show_deleted (EMailFolderPane *browser,
-						 gboolean show_deleted);
-EFocusTracker *	e_mail_folder_pane_get_focus_tracker(EMailFolderPane *browser);
-GtkUIManager *	e_mail_folder_pane_get_ui_manager	(EMailFolderPane *browser);
+GtkWidget *	e_mail_folder_pane_new		(EShellContent *content);
 
 G_END_DECLS
 
diff --git a/mail/e-mail-message-pane.c b/mail/e-mail-message-pane.c
index 85a3e9e..0f3488d 100644
--- a/mail/e-mail-message-pane.c
+++ b/mail/e-mail-message-pane.c
@@ -24,323 +24,28 @@
 #include <string.h>
 #include <glib/gi18n.h>
 
-#include "e-util/e-util.h"
-#include "e-util/e-plugin-ui.h"
 #include "e-util/gconf-bridge.h"
-#include "shell/e-shell.h"
-#include "shell/e-shell-utils.h"
-#include "widgets/misc/e-popup-action.h"
-#include "widgets/misc/e-preview-pane.h"
 
 #include "mail/e-mail-reader.h"
-#include "mail/e-mail-reader-utils.h"
-#include "mail/em-folder-tree-model.h"
-#include "mail/em-format-html-display.h"
-#include "mail/message-list.h"
 
 #define e_mail_message_pane_GET_PRIVATE(obj) \
 	(G_TYPE_INSTANCE_GET_PRIVATE \
-	((obj), E_TYPe_mail_message_pane, EMailMessagePanePrivate))
+	((obj), E_TYPE_MAIL_MESSAGE_PANE, EMailMessagePanePrivate))
 
 
 struct _EMailMessagePanePrivate {
-	GtkUIManager *ui_manager;
-	EFocusTracker *focus_tracker;
-	EShellBackend *shell_backend;
-	GtkActionGroup *action_group;
-	EMFormatHTMLDisplay *formatter;
-
-	GtkWidget *main_menu;
-	GtkWidget *main_toolbar;
-	GtkWidget *message_list;
-	GtkWidget *search_bar;
-	GtkWidget *statusbar;
-
-	guint show_deleted : 1;
+	int fo;
 };
 
 enum {
 	PROP_0,
-	PROP_FOCUS_TRACKER,
-	PROP_GROUP_BY_THREADS,
-	PROP_SHELL_BACKEND,
-	PROP_SHOW_DELETED,
-	PROP_UI_MANAGER
+	PROP_PREVIEW_VISIBLE
 };
 
 static gpointer parent_class;
 
 /* This is too trivial to put in a file.
  * It gets merged with the EMailReader UI. */
-static const gchar *ui =
-"<ui>"
-"  <menubar name='main-menu'>"
-"    <menu action='file-menu'>"
-"      <placeholder name='file-actions'/>"
-"      <placeholder name='print-actions'/>"
-"      <separator/>"
-"      <menuitem action='close'/>"
-"    </menu>"
-"    <menu action='edit-menu'>"
-"      <placeholder name='selection-actions'>"
-"        <menuitem action='cut-clipboard'/>"
-"        <menuitem action='copy-clipboard'/>"
-"        <menuitem action='paste-clipboard'/>"
-"        <separator/>"
-"        <menuitem action='select-all'/>"
-"      </placeholder>"
-"    </menu>"
-"  </menubar>"
-"</ui>";
-
-static void
-action_close_cb (GtkAction *action,
-                 EMailMessagePane *browser)
-{
-	e_mail_message_pane_close (browser);
-}
-
-static GtkActionEntry mail_message_pane_entries[] = {
-
-	{ "close",
-	  GTK_STOCK_CLOSE,
-	  NULL,
-	  NULL,
-	  N_("Close this window"),
-	  G_CALLBACK (action_close_cb) },
-
-	{ "copy-clipboard",
-	  GTK_STOCK_COPY,
-	  NULL,
-	  NULL,
-	  N_("Copy the selection"),
-	  NULL },  /* Handled by EFocusTracker */
-
-	{ "cut-clipboard",
-	  GTK_STOCK_CUT,
-	  NULL,
-	  NULL,
-	  N_("Cut the selection"),
-	  NULL },  /* Handled by EFocusTracker */
-
-	{ "paste-clipboard",
-	  GTK_STOCK_PASTE,
-	  NULL,
-	  NULL,
-	  N_("Paste the clipboard"),
-	  NULL },  /* Handled by EFocusTracker */
-
-	{ "select-all",
-	  GTK_STOCK_SELECT_ALL,
-	  NULL,
-	  NULL,
-	  N_("Select all text"),
-	  NULL },  /* Handled by EFocusTracker */
-
-	/*** Menus ***/
-
-	{ "file-menu",
-	  NULL,
-	  N_("_File"),
-	  NULL,
-	  NULL,
-	  NULL },
-
-	{ "edit-menu",
-	  NULL,
-	  N_("_Edit"),
-	  NULL,
-	  NULL,
-	  NULL },
-
-	{ "view-menu",
-	  NULL,
-	  N_("_View"),
-	  NULL,
-	  NULL,
-	  NULL }
-};
-
-static EPopupActionEntry mail_message_pane_popup_entries[] = {
-
-	{ "popup-copy-clipboard",
-	  NULL,
-	  "copy-clipboard" }
-};
-
-static void
-mail_message_pane_menu_item_select_cb (EMailMessagePane *browser,
-                                  GtkWidget *widget)
-{
-	GtkAction *action;
-	GtkActivatable *activatable;
-	GtkStatusbar *statusbar;
-	const gchar *tooltip;
-	guint context_id;
-	gpointer data;
-
-	activatable = GTK_ACTIVATABLE (widget);
-	action = gtk_activatable_get_related_action (activatable);
-	tooltip = gtk_action_get_tooltip (action);
-
-	data = g_object_get_data (G_OBJECT (widget), "context-id");
-	context_id = GPOINTER_TO_UINT (data);
-
-	if (tooltip == NULL)
-		return;
-
-	statusbar = GTK_STATUSBAR (browser->priv->statusbar);
-	gtk_statusbar_push (statusbar, context_id, tooltip);
-}
-
-static void
-mail_message_pane_menu_item_deselect_cb (EMailMessagePane *browser,
-                                    GtkWidget *menu_item)
-{
-	GtkStatusbar *statusbar;
-	guint context_id;
-	gpointer data;
-
-	data = g_object_get_data (G_OBJECT (menu_item), "context-id");
-	context_id = GPOINTER_TO_UINT (data);
-
-	statusbar = GTK_STATUSBAR (browser->priv->statusbar);
-	gtk_statusbar_pop (statusbar, context_id);
-}
-
-static void
-mail_message_pane_connect_proxy_cb (EMailMessagePane *browser,
-                               GtkAction *action,
-                               GtkWidget *proxy)
-{
-	GtkStatusbar *statusbar;
-	guint context_id;
-
-	if (!GTK_IS_MENU_ITEM (proxy))
-		return;
-
-	statusbar = GTK_STATUSBAR (browser->priv->statusbar);
-	context_id = gtk_statusbar_get_context_id (statusbar, G_STRFUNC);
-
-	g_object_set_data (
-		G_OBJECT (proxy), "context-id",
-		GUINT_TO_POINTER (context_id));
-
-	g_signal_connect_swapped (
-		proxy, "select",
-		G_CALLBACK (mail_message_pane_menu_item_select_cb), browser);
-
-	g_signal_connect_swapped (
-		proxy, "deselect",
-		G_CALLBACK (mail_message_pane_menu_item_deselect_cb), browser);
-}
-
-static void
-mail_message_pane_message_selected_cb (EMailMessagePane *browser,
-                                  const gchar *uid)
-{
-	EMFormatHTML *formatter;
-	CamelMessageInfo *info;
-	CamelFolder *folder;
-	EMailReader *reader;
-	EWebView *web_view;
-	const gchar *title;
-
-	if (uid == NULL)
-		return;
-
-	reader = E_MAIL_READER (browser);
-	folder = e_mail_reader_get_folder (reader);
-	formatter = e_mail_reader_get_formatter (reader);
-	web_view = em_format_html_get_web_view (formatter);
-
-	info = camel_folder_get_message_info (folder, uid);
-
-	if (info == NULL)
-		return;
-
-	title = camel_message_info_subject (info);
-	if (title == NULL || *title == '\0')
-		title = _("(No Subject)");
-
-	gtk_window_set_title (GTK_WINDOW (browser), title);
-	gtk_widget_grab_focus (GTK_WIDGET (web_view));
-
-	camel_folder_free_message_info (folder, info);
-}
-
-static gboolean
-close_on_idle_cb (gpointer browser)
-{
-	e_mail_message_pane_close (browser);
-	return FALSE;
-}
-
-static void
-mail_message_pane_message_list_built_cb (EMailMessagePane *browser,
-                                    MessageList *message_list)
-{
-	g_return_if_fail (E_IS_MAIL_MESSAGE_PANE (browser));
-	g_return_if_fail (IS_MESSAGE_LIST (message_list));
-
-	if (!message_list_count (message_list))
-		g_idle_add (close_on_idle_cb, browser);
-}
-
-static gboolean
-mail_message_pane_popup_event_cb (EMailMessagePane *browser,
-                             GdkEventButton *event,
-                             const gchar *uri)
-{
-	EMailReader *reader;
-	GtkMenu *menu;
-
-	if (uri != NULL)
-		return FALSE;
-
-	reader = E_MAIL_READER (browser);
-	menu = e_mail_reader_get_popup_menu (reader);
-
-	e_mail_reader_update_actions (reader);
-
-	if (event == NULL)
-		gtk_menu_popup (
-			menu, NULL, NULL, NULL, NULL,
-			0, gtk_get_current_event_time ());
-	else
-		gtk_menu_popup (
-			menu, NULL, NULL, NULL, NULL,
-			event->button, event->time);
-
-	return TRUE;
-}
-
-static void
-mail_message_pane_status_message_cb (EMailMessagePane *browser,
-                                const gchar *status_message)
-{
-	GtkStatusbar *statusbar;
-	guint context_id;
-
-	statusbar = GTK_STATUSBAR (browser->priv->statusbar);
-	context_id = gtk_statusbar_get_context_id (statusbar, G_STRFUNC);
-
-	/* Always pop first.  This prevents messages from piling up. */
-	gtk_statusbar_pop (statusbar, context_id);
-
-	if (status_message != NULL && *status_message != '\0')
-		gtk_statusbar_push (statusbar, context_id, status_message);
-}
-
-static void
-mail_message_pane_set_shell_backend (EMailMessagePane *browser,
-                                EShellBackend *shell_backend)
-{
-	g_return_if_fail (browser->priv->shell_backend == NULL);
-
-	browser->priv->shell_backend = g_object_ref (shell_backend);
-}
-
 static void
 mail_message_pane_set_property (GObject *object,
                            guint property_id,
@@ -348,23 +53,9 @@ mail_message_pane_set_property (GObject *object,
                            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;
-
-		case PROP_SHELL_BACKEND:
-			mail_message_pane_set_shell_backend (
-				e_mail_message_pane (object),
-				g_value_get_object (value));
-			return;
-
-		case PROP_SHOW_DELETED:
-			e_mail_message_pane_set_show_deleted (
-				e_mail_message_pane (object),
-				g_value_get_boolean (value));
+		case PROP_PREVIEW_VISIBLE:
 			return;
+		
 	}
 
 	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -377,35 +68,11 @@ mail_message_pane_get_property (GObject *object,
                            GParamSpec *pspec)
 {
 	switch (property_id) {
-		case PROP_FOCUS_TRACKER:
-			g_value_set_object (
-				value, e_mail_message_pane_get_focus_tracker (
-				e_mail_message_pane (object)));
-			return;
-
-		case PROP_GROUP_BY_THREADS:
-			g_value_set_boolean (
-				value, e_mail_reader_get_group_by_threads (
-				E_MAIL_READER (object)));
-			return;
-
-		case PROP_SHELL_BACKEND:
-			g_value_set_object (
-				value, e_mail_reader_get_shell_backend (
-				E_MAIL_READER (object)));
-			return;
-
-		case PROP_SHOW_DELETED:
+		case PROP_PREVIEW_VISIBLE:
 			g_value_set_boolean (
-				value, e_mail_message_pane_get_show_deleted (
-				e_mail_message_pane (object)));
-			return;
-
-		case PROP_UI_MANAGER:
-			g_value_set_object (
-				value, e_mail_message_pane_get_ui_manager (
-				e_mail_message_pane (object)));
-			return;
+				value,
+				TRUE);
+		return;			
 	}
 
 	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -418,56 +85,6 @@ mail_message_pane_dispose (GObject *object)
 
 	priv = e_mail_message_pane_GET_PRIVATE (object);
 
-	if (priv->ui_manager != NULL) {
-		g_object_unref (priv->ui_manager);
-		priv->ui_manager = NULL;
-	}
-
-	if (priv->focus_tracker != NULL) {
-		g_object_unref (priv->focus_tracker);
-		priv->focus_tracker = NULL;
-	}
-
-	if (priv->shell_backend != NULL) {
-		g_object_unref (priv->shell_backend);
-		priv->shell_backend = NULL;
-	}
-
-	if (priv->action_group != NULL) {
-		g_object_unref (priv->action_group);
-		priv->action_group = NULL;
-	}
-
-	if (priv->formatter != NULL) {
-		g_object_unref (priv->formatter);
-		priv->formatter = NULL;
-	}
-
-	if (priv->main_menu != NULL) {
-		g_object_unref (priv->main_menu);
-		priv->main_menu = NULL;
-	}
-
-	if (priv->main_toolbar != NULL) {
-		g_object_unref (priv->main_toolbar);
-		priv->main_toolbar = NULL;
-	}
-
-	if (priv->message_list != NULL) {
-		/* This will cancel a regen operation. */
-		gtk_widget_destroy (priv->message_list);
-		priv->message_list = NULL;
-	}
-
-	if (priv->search_bar != NULL) {
-		g_object_unref (priv->search_bar);
-		priv->search_bar = NULL;
-	}
-
-	if (priv->statusbar != NULL) {
-		g_object_unref (priv->statusbar);
-		priv->statusbar = NULL;
-	}
 
 	/* Chain up to parent's dispose() method. */
 	G_OBJECT_CLASS (parent_class)->dispose (object);
@@ -477,275 +94,37 @@ static void
 mail_message_pane_constructed (GObject *object)
 {
 	EMailMessagePanePrivate *priv;
-	EMFormatHTML *formatter;
-	EMailReader *reader;
-	EShellBackend *shell_backend;
-	EShell *shell;
-	EFocusTracker *focus_tracker;
-	ESearchBar *search_bar;
-	GConfBridge *bridge;
-	GtkAccelGroup *accel_group;
-	GtkActionGroup *action_group;
-	GtkAction *action;
-	GtkUIManager *ui_manager;
-	GtkWidget *container;
-	GtkWidget *widget;
-	EWebView *web_view;
-	const gchar *domain;
-	const gchar *key;
-	const gchar *id;
-	guint merge_id;
-
+		
 	/* Chain up to parent's constructed() method. */
 	if (G_OBJECT_CLASS (parent_class)->constructed)
 		G_OBJECT_CLASS (parent_class)->constructed (object);
 
 	priv = e_mail_message_pane_GET_PRIVATE (object);
 
-	reader = E_MAIL_READER (object);
-
-	shell_backend = e_mail_reader_get_shell_backend (reader);
-	shell = e_shell_backend_get_shell (shell_backend);
-
-	ui_manager = e_ui_manager_new ();
-	e_shell_configure_ui_manager (shell, E_UI_MANAGER (ui_manager));
-
-	priv->ui_manager = ui_manager;
-	domain = GETTEXT_PACKAGE;
-
-	formatter = e_mail_reader_get_formatter (reader);
-
-	web_view = em_format_html_get_web_view (formatter);
-
-	/* The message list is a widget, but it is not shown in the browser.
-	 * Unfortunately, the widget is inseparable from its model, and the
-	 * model is all we need. */
-	priv->message_list = message_list_new (shell_backend);
-	g_object_ref_sink (priv->message_list);
-
-	g_signal_connect_swapped (
-		priv->message_list, "message-selected",
-		G_CALLBACK (mail_message_pane_message_selected_cb), object);
-
-	g_signal_connect_swapped (
-		priv->message_list, "message-list-built",
-		G_CALLBACK (mail_message_pane_message_list_built_cb), object);
-
-	g_signal_connect_swapped (
-		web_view, "popup-event",
-		G_CALLBACK (mail_message_pane_popup_event_cb), object);
-
-	g_signal_connect_swapped (
-		web_view, "status-message",
-		G_CALLBACK (mail_message_pane_status_message_cb), object);
-
-	e_mail_reader_init (reader);
-
-	action_group = priv->action_group;
-	gtk_action_group_set_translation_domain (action_group, domain);
-	gtk_action_group_add_actions (
-		action_group, mail_message_pane_entries,
-		G_N_ELEMENTS (mail_message_pane_entries), object);
-	e_action_group_add_popup_actions (
-		action_group, mail_message_pane_popup_entries,
-		G_N_ELEMENTS (mail_message_pane_popup_entries));
-	gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
-
-	e_ui_manager_add_ui_from_file (
-		E_UI_MANAGER (ui_manager), E_MAIL_READER_UI_DEFINITION);
-	e_ui_manager_add_ui_from_string (
-		E_UI_MANAGER (ui_manager), ui, NULL);
-
-	merge_id = gtk_ui_manager_new_merge_id (GTK_UI_MANAGER (ui_manager));
-	e_mail_reader_create_charset_menu (reader, ui_manager, merge_id);
-
-	accel_group = gtk_ui_manager_get_accel_group (ui_manager);
-	gtk_window_add_accel_group (GTK_WINDOW (object), accel_group);
-
-	g_signal_connect_swapped (
-		ui_manager, "connect-proxy",
-		G_CALLBACK (mail_message_pane_connect_proxy_cb), object);
-
-	/* Configure an EFocusTracker to manage selection actions. */
-
-	focus_tracker = e_focus_tracker_new (GTK_WINDOW (object));
-	action = gtk_action_group_get_action (action_group, "cut-clipboard");
-	e_focus_tracker_set_cut_clipboard_action (focus_tracker, action);
-	action = gtk_action_group_get_action (action_group, "copy-clipboard");
-	e_focus_tracker_set_copy_clipboard_action (focus_tracker, action);
-	action = gtk_action_group_get_action (action_group, "paste-clipboard");
-	e_focus_tracker_set_paste_clipboard_action (focus_tracker, action);
-	action = gtk_action_group_get_action (action_group, "select-all");
-	e_focus_tracker_set_select_all_action (focus_tracker, action);
-	priv->focus_tracker = focus_tracker;
-
-	/* Construct base widgets widgets. */
-	widget = (GtkWidget *)object;
-	gtk_box_set_spacing (GTK_BOX (widget), 0);
-
-	container = (GtkWidget *)object;
-
-	/* Create the status bar before connecting proxy widgets. */
-	widget = gtk_statusbar_new ();
-	gtk_box_pack_end (GTK_BOX (container), widget, FALSE, FALSE, 0);
-	priv->statusbar = g_object_ref (widget);
-	gtk_widget_show (widget);
-
-	gtk_widget_show (GTK_WIDGET (web_view));
-
-	widget = e_preview_pane_new (web_view);
-	gtk_box_pack_start (GTK_BOX (container), widget, TRUE, TRUE, 0);
-	gtk_widget_show (widget);
-
-	search_bar = e_preview_pane_get_search_bar (E_PREVIEW_PANE (widget));
-	priv->search_bar = g_object_ref (search_bar);
-
-	g_signal_connect_swapped (
-		search_bar, "changed",
-		G_CALLBACK (em_format_redraw), priv->formatter);
-
-	/* Bind GObject properties to GConf keys. */
-
-	bridge = gconf_bridge_get ();
-
-	object = G_OBJECT (reader);
-	key = "/apps/evolution/mail/display/show_deleted";
-	gconf_bridge_bind_property (bridge, key, object, "show-deleted");
-
-	id = "org.gnome.evolution.mail.message.pane";
-	e_plugin_ui_register_manager (ui_manager, id, object);
-	e_plugin_ui_enable_manager (ui_manager, id);
-
-	e_mail_reader_connect_headers (E_MAIL_READER (reader));
-}
-
-static gboolean
-mail_message_pane_key_press_event (GtkWidget *widget,
-                              GdkEventKey *event)
-{
-	if (event->keyval == GDK_Escape) {
-		e_mail_message_pane_close (e_mail_message_pane (widget));
-		return TRUE;
-	}
-
-	/* Chain up to parent's key_press_event() method. */
-	return GTK_WIDGET_CLASS (parent_class)->
-		key_press_event (widget, event);
-}
-
-static GtkActionGroup *
-mail_message_pane_get_action_group (EMailReader *reader)
-{
-	EMailMessagePanePrivate *priv;
-
-	priv = e_mail_message_pane_GET_PRIVATE (reader);
-
-	return priv->action_group;
-}
-
-static gboolean
-mail_message_pane_get_hide_deleted (EMailReader *reader)
-{
-	EMailMessagePane *browser;
-
-	browser = e_mail_message_pane (reader);
-
-	return !e_mail_message_pane_get_show_deleted (browser);
-}
-
-static EMFormatHTML *
-mail_message_pane_get_formatter (EMailReader *reader)
-{
-	EMailMessagePanePrivate *priv;
-
-	priv = e_mail_message_pane_GET_PRIVATE (reader);
-
-	return EM_FORMAT_HTML (priv->formatter);
-}
-
-static GtkWidget *
-mail_message_pane_get_message_list (EMailReader *reader)
-{
-	EMailMessagePanePrivate *priv;
-
-	priv = e_mail_message_pane_GET_PRIVATE (reader);
-
-	return priv->message_list;
-}
-
-static GtkMenu *
-mail_message_pane_get_popup_menu (EMailReader *reader)
-{
-	EMailMessagePane *browser;
-	GtkUIManager *ui_manager;
-	GtkWidget *widget;
-
-	browser = e_mail_message_pane (reader);
-	ui_manager = e_mail_message_pane_get_ui_manager (browser);
-	widget = gtk_ui_manager_get_widget (ui_manager, "/mail-preview-popup");
-
-	return GTK_MENU (widget);
-}
-
-static EShellBackend *
-mail_message_pane_get_shell_backend (EMailReader *reader)
-{
-	EMailMessagePanePrivate *priv;
-
-	priv = e_mail_message_pane_GET_PRIVATE (reader);
-
-	return priv->shell_backend;
-}
-
-static GtkWindow *
-mail_message_pane_get_window (EMailReader *reader)
-{
-	return NULL;
+	gtk_widget_hide (e_mail_reader_get_message_list (E_MAIL_READER(object)));
+	e_mail_paned_view_hide_message_list_pane (E_MAIL_PANED_VIEW(object), FALSE);
 }
 
 static void
-mail_message_pane_set_message (EMailReader *reader,
-                          const gchar *uid)
+message_pane_set_preview_visible (EMailMessagePane *view,
+                                          gboolean preview_visible)
 {
-	EMailReaderIface *iface;
-	CamelMessageInfo *info;
-	CamelFolder *folder;
-
-	/* Chain up to parent's set_message() method. */
-	iface = g_type_default_interface_peek (E_TYPE_MAIL_READER);
-	iface->set_message (reader, uid);
+	e_mail_paned_view_set_preview_visible (E_MAIL_PANED_VIEW(view), TRUE);
 
-	if (uid == NULL) {
-		e_mail_message_pane_close (e_mail_message_pane (reader));
-		return;
-	}
-
-	folder = e_mail_reader_get_folder (reader);
-	info = camel_folder_get_message_info (folder, uid);
-
-	if (info != NULL) {
-		gtk_window_set_title (
-			GTK_WINDOW (reader),
-			camel_message_info_subject (info));
-		camel_folder_free_message_info (folder, info);
-	}
+	return;
 }
 
-static void
-mail_message_pane_show_search_bar (EMailReader *reader)
+static gboolean
+message_pane_get_preview_visible (EMailMessagePane *view)
 {
-	EMailMessagePanePrivate *priv;
 
-	priv = e_mail_message_pane_GET_PRIVATE (reader);
-
-	gtk_widget_show (priv->search_bar);
+	return TRUE;
 }
 
 static void
 mail_message_pane_class_init (EMailMessagePaneClass *class)
 {
 	GObjectClass *object_class;
-	GtkWidgetClass *widget_class;
 
 	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (EMailMessagePanePrivate));
@@ -756,72 +135,20 @@ mail_message_pane_class_init (EMailMessagePaneClass *class)
 	object_class->dispose = mail_message_pane_dispose;
 	object_class->constructed = mail_message_pane_constructed;
 
-	widget_class = GTK_WIDGET_CLASS (class);
-	widget_class->key_press_event = mail_message_pane_key_press_event;
+	E_MAIL_VIEW_CLASS(g_type_class_peek_parent(class))->set_preview_visible = message_pane_set_preview_visible;
+	E_MAIL_VIEW_CLASS(g_type_class_peek_parent(class))->get_preview_visible = message_pane_get_preview_visible;
 
-	g_object_class_install_property (
-		object_class,
-		PROP_FOCUS_TRACKER,
-		g_param_spec_object (
-			"focus-tracker",
-			"Focus Tracker",
-			NULL,
-			E_TYPE_FOCUS_TRACKER,
-			G_PARAM_READABLE));
-
-	/* Inherited from EMailReader */
 	g_object_class_override_property (
 		object_class,
-		PROP_GROUP_BY_THREADS,
-		"group-by-threads");
-
-	g_object_class_install_property (
-		object_class,
-		PROP_SHELL_BACKEND,
-		g_param_spec_object (
-			"shell-backend",
-			"Shell Module",
-			"The mail shell backend",
-			E_TYPE_SHELL_BACKEND,
-			G_PARAM_READWRITE |
-			G_PARAM_CONSTRUCT_ONLY));
-
-	g_object_class_install_property (
-		object_class,
-		PROP_SHOW_DELETED,
-		g_param_spec_boolean (
-			"show-deleted",
-			"Show Deleted",
-			"Show deleted messages",
-			FALSE,
-			G_PARAM_READWRITE));
-}
-
-static void
-mail_message_pane_iface_init (EMailReaderIface *iface)
-{
-	iface->get_action_group = mail_message_pane_get_action_group;
-	iface->get_formatter = mail_message_pane_get_formatter;
-	iface->get_hide_deleted = mail_message_pane_get_hide_deleted;
-	iface->get_message_list = mail_message_pane_get_message_list;
-	iface->get_popup_menu = mail_message_pane_get_popup_menu;
-	iface->get_shell_backend = mail_message_pane_get_shell_backend;
-	iface->get_window = mail_message_pane_get_window;
-	iface->set_message = mail_message_pane_set_message;
-	iface->show_search_bar = mail_message_pane_show_search_bar;
+		PROP_PREVIEW_VISIBLE,
+		"preview-visible");
 }
 
 static void
 mail_message_pane_init (EMailMessagePane *browser)
 {
-	GConfBridge *bridge;
-	const gchar *prefix;
 
 	browser->priv = e_mail_message_pane_GET_PRIVATE (browser);
-
-	browser->priv->action_group = gtk_action_group_new ("mail-browser");
-	browser->priv->formatter = em_format_html_display_new ();
-
 }
 
 GType
@@ -843,71 +170,22 @@ e_mail_message_pane_get_type (void)
 			NULL   /* value_table */
 		};
 
-		static const GInterfaceInfo iface_info = {
-			(GInterfaceInitFunc) mail_message_pane_iface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL   /* interface_data */
-		};
-
 		type = g_type_register_static (
-			GTK_TYPE_WINDOW, "EMailMessagePane", &type_info, 0);
+			E_MAIL_PANED_VIEW_TYPE , "EMailMessagePane", &type_info, 0);
 
-		g_type_add_interface_static (
-			type, E_TYPE_MAIL_READER, &iface_info);
 	}
 
 	return type;
 }
 
 GtkWidget *
-e_mail_message_pane_new (EShellBackend *shell_backend)
+e_mail_message_pane_new (EShellContent *content)
 {
-	g_return_val_if_fail (E_IS_SHELL_BACKEND (shell_backend), NULL);
+	g_return_val_if_fail (E_IS_SHELL_CONTENT (content), NULL);
 
 	return g_object_new (
-		E_TYPe_mail_message_pane,
-		"shell-backend", shell_backend, NULL);
-}
-
-void
-e_mail_message_pane_close (EMailMessagePane *browser)
-{
-	g_return_if_fail (E_IS_MAIL_MESSAGE_PANE (browser));
-
-	gtk_widget_destroy (GTK_WIDGET (browser));
-}
-
-gboolean
-e_mail_message_pane_get_show_deleted (EMailMessagePane *browser)
-{
-	g_return_val_if_fail (E_IS_MAIL_MESSAGE_PANE (browser), FALSE);
-
-	return browser->priv->show_deleted;
-}
-
-void
-e_mail_message_pane_set_show_deleted (EMailMessagePane *browser,
-                                 gboolean show_deleted)
-{
-	g_return_if_fail (E_IS_MAIL_MESSAGE_PANE (browser));
-
-	browser->priv->show_deleted = show_deleted;
-
-	g_object_notify (G_OBJECT (browser), "show-deleted");
-}
-
-EFocusTracker *
-e_mail_message_pane_get_focus_tracker (EMailMessagePane *browser)
-{
-	g_return_val_if_fail (E_IS_MAIL_MESSAGE_PANE (browser), NULL);
-
-	return browser->priv->focus_tracker;
-}
-
-GtkUIManager *
-e_mail_message_pane_get_ui_manager (EMailMessagePane *browser)
-{
-	g_return_val_if_fail (E_IS_MAIL_MESSAGE_PANE (browser), NULL);
-
-	return browser->priv->ui_manager;
+		E_TYPE_MAIL_MESSAGE_PANE,
+		"shell-content", content, 
+		"preview-visible", TRUE,
+		NULL);
 }
diff --git a/mail/e-mail-message-pane.h b/mail/e-mail-message-pane.h
index b6f49df..ce5ea85 100644
--- a/mail/e-mail-message-pane.h
+++ b/mail/e-mail-message-pane.h
@@ -23,9 +23,7 @@
 #define E_MAIL_MESSAGE_PANE_H
 
 #include <gtk/gtk.h>
-#include "e-mail-pane.h"
-#include <misc/e-focus-tracker.h>
-#include <shell/e-shell-backend.h>
+#include "e-mail-paned-view.h"
 
 /* Standard GObject macros */
 #define E_TYPE_MAIL_MESSAGE_PANE \
@@ -53,22 +51,16 @@ typedef struct _EMailMessagePaneClass EMailMessagePaneClass;
 typedef struct _EMailMessagePanePrivate EMailMessagePanePrivate;
 
 struct _EMailMessagePane {
-	EMailPane parent;
+	EMailPanedView parent;
 	EMailMessagePanePrivate *priv;
 };
 
 struct _EMailMessagePaneClass {
-	EMailPaneClass parent_class;
+	EMailPanedViewClass parent_class;
 };
 
 GType		e_mail_message_pane_get_type		(void);
-GtkWidget *	e_mail_message_pane_new		(EShellBackend *shell_backend);
-void		e_mail_message_pane_close		(EMailMessagePane *browser);
-gboolean	e_mail_message_pane_get_show_deleted	(EMailMessagePane *browser);
-void		e_mail_message_pane_set_show_deleted (EMailMessagePane *browser,
-						 gboolean show_deleted);
-EFocusTracker *	e_mail_message_pane_get_focus_tracker(EMailMessagePane *browser);
-GtkUIManager *	e_mail_message_pane_get_ui_manager	(EMailMessagePane *browser);
+GtkWidget *	e_mail_message_pane_new		(EShellContent *content);
 
 G_END_DECLS
 
diff --git a/mail/e-mail-notebook-view.c b/mail/e-mail-notebook-view.c
index 5fa6c68..cdf21bc 100644
--- a/mail/e-mail-notebook-view.c
+++ b/mail/e-mail-notebook-view.c
@@ -29,8 +29,10 @@
 #include <glib/gi18n.h>
 
 #include "mail/e-mail-reader.h"
+#include "mail/message-list.h"
 #include "e-mail-notebook-view.h"
-#include "e-mail-paned-view.h"
+#include "e-mail-folder-pane.h"
+#include "e-mail-message-pane.h"
 
 #include <shell/e-shell-window-actions.h>
 
@@ -40,6 +42,11 @@ struct _EMailNotebookViewPrivate {
 	GHashTable *views;
 };
 
+enum {
+	PROP_0,
+	PROP_GROUP_BY_THREADS,
+};
+
 #define E_SHELL_WINDOW_ACTION_GROUP_MAIL(window) \
 	E_SHELL_WINDOW_ACTION_GROUP ((window), "mail")
 
@@ -66,10 +73,14 @@ static void
 mnv_page_changed (GtkNotebook *book, GtkNotebookPage *page,
 		  guint page_num, EMailNotebookView *view)
 {
-	EMailView *mview = gtk_notebook_get_nth_page (book, page_num);
+	EMailView *mview = (EMailView *)gtk_notebook_get_nth_page (book, page_num);
 
 	view->priv->current_view = mview;
+	/* For EMailReader related changes to EShellView*/
 	g_signal_emit_by_name (view, "changed");
+	/* For EMailShellContent related changes */
+	g_signal_emit_by_name (view, "view-changed");
+
 }
 
 static void
@@ -89,19 +100,58 @@ mail_notebook_view_constructed (GObject *object)
 
 	g_signal_connect (widget, "switch-page", G_CALLBACK(mnv_page_changed), object);
 
-	priv->current_view = e_mail_paned_view_new (E_MAIL_VIEW(object)->content);
-	gtk_widget_show (priv->current_view);
-	gtk_notebook_append_page (priv->book, priv->current_view, gtk_label_new ("Please select a folder"));
+	priv->current_view = (EMailView *)e_mail_folder_pane_new (E_MAIL_VIEW(object)->content);
+	e_mail_paned_view_set_preview_visible ((EMailPanedView *)priv->current_view, FALSE);
+	gtk_widget_show ((GtkWidget *)priv->current_view);
+	gtk_notebook_append_page (priv->book, (GtkWidget *)priv->current_view, gtk_label_new ("Please select a folder"));
 	
 }
 
 static void
+mail_notebook_view_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(E_MAIL_NOTEBOOK_VIEW(object)->priv->current_view),
+				g_value_get_boolean (value));
+			return;
+	}
+
+	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+mail_notebook_view_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(E_MAIL_NOTEBOOK_VIEW(object)->priv->current_view)));
+			return;
+
+	}
+
+	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
 mail_notebook_view_class_init (EMailViewClass *klass)
 {
 	GObjectClass * object_class = G_OBJECT_CLASS (klass);
 
 	parent_class = g_type_class_peek_parent (klass);
 	object_class->constructed = mail_notebook_view_constructed;
+	object_class->set_property = mail_notebook_view_set_property;
+	object_class->get_property = mail_notebook_view_get_property;
 	
 	object_class->finalize = e_mail_notebook_view_finalize;
 
@@ -109,8 +159,41 @@ mail_notebook_view_class_init (EMailViewClass *klass)
 	klass->set_search_strings = e_mail_notebook_view_set_search_strings;
 	klass->get_view_instance = e_mail_notebook_view_get_view_instance;
 	klass->update_view_instance = e_mail_notebook_view_update_view_instance;
-
-
+	klass->set_orientation = e_mail_notebook_view_set_orientation;
+	klass->get_orientation = e_mail_notebook_view_get_orientation;
+	klass->set_show_deleted = e_mail_notebook_view_set_show_deleted;
+	klass->get_show_deleted = e_mail_notebook_view_get_show_deleted;
+	klass->set_preview_visible = e_mail_notebook_view_set_preview_visible;
+	klass->get_preview_visible = e_mail_notebook_view_get_preview_visible;
+
+	/* Inherited from EMailReader */
+	g_object_class_override_property (
+		object_class,
+		PROP_GROUP_BY_THREADS,
+		"group-by-threads");
+/*
+	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",
+			NULL,
+			FALSE,
+			G_PARAM_READWRITE));
+
+	g_object_class_override_property (
+		object_class, PROP_ORIENTATION, "orientation"); */	
 }
 
 
@@ -231,6 +314,8 @@ emnv_get_page_num (EMailNotebookView *view,
 	}
 
 	g_warn_if_reached ();
+
+	return;
 }
 
 static void
@@ -246,6 +331,38 @@ reconnect_folder_loaded_event (EMailReader *child, EMailReader *parent)
 }
 
 static void
+mail_netbook_view_open_mail (EMailView *view, const char *uid, EMailNotebookView *nview)
+{
+	const gchar *folder_uri;
+	CamelFolder *folder;	
+	EMailMessagePane *pane = e_mail_message_pane_new (E_MAIL_VIEW(nview)->content);
+	int page;
+	EMailNotebookViewPrivate *priv = E_MAIL_NOTEBOOK_VIEW (nview)->priv;
+	
+
+	gtk_widget_show (pane);
+	folder = e_mail_reader_get_folder (E_MAIL_READER(view));
+	folder_uri = e_mail_reader_get_folder_uri (E_MAIL_READER(view));
+
+	page = gtk_notebook_append_page (priv->book, pane, gtk_label_new (_("Mail")));
+	gtk_notebook_set_current_page (priv->book, page);
+
+	g_signal_connect ( E_MAIL_READER(pane), "changed",
+			   G_CALLBACK (reconnect_changed_event),
+			   nview);
+	g_signal_connect ( E_MAIL_READER (pane), "folder-loaded",
+			   G_CALLBACK (reconnect_folder_loaded_event),
+			   nview);
+	e_mail_reader_set_folder (
+		E_MAIL_READER (pane), folder, folder_uri);
+	e_mail_reader_set_group_by_threads (
+		E_MAIL_READER (pane),
+		e_mail_reader_get_group_by_threads (E_MAIL_READER(view))); 
+
+	e_mail_reader_set_message (E_MAIL_READER (pane), uid);
+}
+
+static void
 mail_notebook_view_set_folder (EMailReader *reader,
                                CamelFolder *folder,
                                const gchar *folder_uri)
@@ -266,20 +383,25 @@ mail_notebook_view_set_folder (EMailReader *reader,
 
 	if (folder || folder_uri) {
 		int page;
-
-		new_view = e_mail_paned_view_new (E_MAIL_VIEW(reader)->content);
-		priv->current_view = (EMailView *)new_view;
-		gtk_widget_show (new_view);
-		page = gtk_notebook_append_page (priv->book, new_view, gtk_label_new (camel_folder_get_full_name(folder)));
-		e_mail_reader_set_folder (E_MAIL_READER(new_view), folder, folder_uri);
-		gtk_notebook_set_current_page (priv->book, page);
-		g_hash_table_insert (priv->views, g_strdup(folder_uri), new_view);
-		g_signal_connect ( E_MAIL_READER(new_view), "changed",
+		
+		if (g_hash_table_size (priv->views) != 0) {
+			priv->current_view = e_mail_folder_pane_new (E_MAIL_VIEW(reader)->content);
+			gtk_widget_show (priv->current_view);
+			page = gtk_notebook_append_page (priv->book, priv->current_view, gtk_label_new (camel_folder_get_full_name(folder)));
+			gtk_notebook_set_current_page (priv->book, page);
+		} else
+			gtk_notebook_set_tab_label (priv->book, priv->current_view, gtk_label_new (camel_folder_get_full_name(folder)));
+
+		e_mail_reader_set_folder (E_MAIL_READER(priv->current_view), folder, folder_uri);
+		g_hash_table_insert (priv->views, g_strdup(folder_uri), priv->current_view);
+		g_signal_connect ( E_MAIL_READER(priv->current_view), "changed",
 				   G_CALLBACK (reconnect_changed_event),
 				   reader);
-		g_signal_connect ( E_MAIL_READER (new_view), "folder-loaded",
+		g_signal_connect ( E_MAIL_READER (priv->current_view), "folder-loaded",
 				   G_CALLBACK (reconnect_folder_loaded_event),
 				   reader);
+		g_signal_connect ( priv->current_view, "open-mail",
+				   G_CALLBACK (mail_netbook_view_open_mail), reader);
 	}
 }
 
@@ -312,6 +434,17 @@ e_mail_notebook_view_get_searchbar (EMailView *view)
 	return e_mail_view_get_searchbar (E_MAIL_NOTEBOOK_VIEW(view)->priv->current_view); */
 }
 
+static void
+mail_notebook_view_open_selected_mail (EMailReader *reader)
+{
+	EMailNotebookViewPrivate *priv = E_MAIL_NOTEBOOK_VIEW (reader)->priv;
+	
+	if (!priv->current_view)
+		return ;
+
+	return e_mail_reader_open_selected_mail (E_MAIL_READER(priv->current_view));	
+}
+
 void
 e_mail_notebook_view_set_search_strings (EMailView *view,
 					 GSList *search_strings)
@@ -346,6 +479,7 @@ mail_notebook_view_reader_init (EMailReaderIface *iface)
 	iface->get_window = mail_notebook_view_get_window;
 	iface->set_folder = mail_notebook_view_set_folder;
 	iface->show_search_bar = mail_notebook_view_show_search_bar;
+	iface->open_selected_mail = mail_notebook_view_open_selected_mail;
 }
 
 GType
@@ -384,3 +518,55 @@ e_mail_notebook_view_register_type (GTypeModule *type_module)
 		type_module, mail_notebook_view_type,
 		E_TYPE_MAIL_READER, &reader_info);
 }
+
+void
+e_mail_notebook_view_set_show_deleted (EMailNotebookView *view,
+                                       gboolean show_deleted)
+{
+	if (!view->priv->current_view)
+		return;
+	
+	e_mail_view_set_show_deleted (view->priv->current_view, show_deleted);
+}
+gboolean
+e_mail_notebook_view_get_show_deleted (EMailNotebookView *view)
+{
+	if (!view->priv->current_view)
+		return FALSE;
+	
+	return e_mail_view_get_show_deleted (view->priv->current_view);
+}
+void
+e_mail_notebook_view_set_preview_visible (EMailNotebookView *view,
+                                          gboolean preview_visible)
+{
+	if (!view->priv->current_view)
+		return ;
+
+	e_mail_view_set_preview_visible (view->priv->current_view, preview_visible);
+}
+gboolean
+e_mail_notebook_view_get_preview_visible (EMailNotebookView *view)
+{
+	if (!view->priv->current_view)
+		return FALSE;
+	
+	return e_mail_view_get_preview_visible (view->priv->current_view);
+}
+void
+e_mail_notebook_view_set_orientation (EMailNotebookView *view,
+				   GtkOrientation orientation)
+{
+	if (!view->priv->current_view)
+		return;
+	
+	e_mail_view_set_orientation (view->priv->current_view, orientation);
+}
+GtkOrientation 
+e_mail_notebook_view_get_orientation (EMailNotebookView *view)
+{
+	if (!view->priv->current_view)
+		return GTK_ORIENTATION_VERTICAL;
+	
+	return e_mail_view_get_orientation (view->priv->current_view);
+}
diff --git a/mail/e-mail-notebook-view.h b/mail/e-mail-notebook-view.h
index a335e15..9577376 100644
--- a/mail/e-mail-notebook-view.h
+++ b/mail/e-mail-notebook-view.h
@@ -58,4 +58,21 @@ void e_mail_notebook_view_set_search_strings (EMailView *view, GSList *search_st
 GalViewInstance * e_mail_notebook_view_get_view_instance (EMailView *view);
 void e_mail_notebook_view_update_view_instance (EMailView *view);
 
+void
+e_mail_notebook_view_set_show_deleted (EMailNotebookView *view,
+                                       gboolean show_deleted);
+gboolean
+e_mail_notebook_view_get_show_deleted (EMailNotebookView *view);
+
+void
+e_mail_notebook_view_set_preview_visible (EMailNotebookView *view,
+                                          gboolean preview_visible);
+gboolean
+e_mail_notebook_view_get_preview_visible (EMailNotebookView *view);
+void
+e_mail_notebook_view_set_orientation (EMailNotebookView *view,
+				   GtkOrientation orientation);
+GtkOrientation 
+e_mail_notebook_view_get_orientation (EMailNotebookView *view);
+
 #endif
diff --git a/mail/e-mail-paned-view.c b/mail/e-mail-paned-view.c
index f2314e1..67268df 100644
--- a/mail/e-mail-paned-view.c
+++ b/mail/e-mail-paned-view.c
@@ -240,14 +240,14 @@ mail_paned_view_notify_group_by_threads_cb (EMailReader *reader)
 		STATE_KEY_GROUP_BY_THREADS, group_by_threads);
 }
 
-static GtkOrientation
-mail_paned_view_get_orientation (EMailPanedView *view)
+GtkOrientation
+e_mail_paned_view_get_orientation (EMailPanedView *view)
 {
 	return view->priv->orientation;
 }
 
-static void
-mail_paned_view_set_orientation (EMailPanedView *view,
+void
+e_mail_paned_view_set_orientation (EMailPanedView *view,
                                     GtkOrientation orientation)
 {
 	view->priv->orientation = orientation;
@@ -271,7 +271,7 @@ mail_paned_view_set_property (GObject *object,
 			return;
 
 		case PROP_ORIENTATION:
-			mail_paned_view_set_orientation (
+			e_mail_paned_view_set_orientation (
 				E_MAIL_PANED_VIEW (object),
 				g_value_get_enum (value));
 			return;
@@ -309,7 +309,7 @@ mail_paned_view_get_property (GObject *object,
 		case PROP_ORIENTATION:
 			g_value_set_enum (
 				value,
-				mail_paned_view_get_orientation (
+				e_mail_paned_view_get_orientation (
 				E_MAIL_PANED_VIEW (object)));
 			return;
 
@@ -558,6 +558,16 @@ mail_paned_view_show_search_bar (EMailReader *reader)
 }
 
 static void
+mail_paned_view_open_selected_mail (EMailReader *reader)
+{
+	EMailPanedViewPrivate *priv;
+
+	priv = E_MAIL_PANED_VIEW (reader)->priv;
+
+	E_MAIL_PANED_VIEW_CLASS(G_OBJECT_GET_CLASS (reader))->open_selected_mail (E_MAIL_PANED_VIEW(reader));
+}
+
+static void
 mail_paned_view_constructed (GObject *object)
 {
 	EMailPanedViewPrivate *priv;
@@ -662,6 +672,12 @@ mail_paned_view_constructed (GObject *object)
 }
 
 static void
+mpv_open_selected_mail (EMailPanedView *view)
+{
+	e_mail_reader_open_selected (E_MAIL_READER(view));
+}
+
+static void
 mail_paned_view_init (EMailPanedView  *shell)
 {
 	shell->priv = g_new0(EMailPanedViewPrivate, 1);
@@ -691,6 +707,15 @@ mail_paned_view_class_init (EMailViewClass *klass)
 	klass->get_view_instance = e_mail_paned_view_get_view_instance;
 	klass->update_view_instance = e_mail_paned_view_update_view_instance;
 
+	klass->set_orientation = e_mail_paned_view_set_orientation;
+	klass->get_orientation = e_mail_paned_view_get_orientation;
+	klass->set_show_deleted = e_mail_paned_view_set_show_deleted;
+	klass->get_show_deleted = e_mail_paned_view_get_show_deleted;
+	klass->set_preview_visible = e_mail_paned_view_set_preview_visible;
+	klass->get_preview_visible = e_mail_paned_view_get_preview_visible;
+
+	E_MAIL_PANED_VIEW_CLASS(klass)->open_selected_mail = mpv_open_selected_mail;
+
 	/* Inherited from EMailReader */
 	g_object_class_override_property (
 		object_class,
@@ -733,6 +758,7 @@ mail_paned_view_reader_init (EMailReaderIface *iface)
 	iface->get_window = mail_paned_view_get_window;
 	iface->set_folder = mail_paned_view_set_folder;
 	iface->show_search_bar = mail_paned_view_show_search_bar;
+	iface->open_selected_mail = mail_paned_view_open_selected_mail;
 }
 
 GType
@@ -756,13 +782,13 @@ e_mail_paned_view_register_type (GTypeModule *type_module)
 		(GInstanceInitFunc) mail_paned_view_init,
 		NULL   /* value_table */
 	};
-
+#if 0
 	static const GInterfaceInfo orientable_info = {
 		(GInterfaceInitFunc) NULL,
 		(GInterfaceFinalizeFunc) NULL,
 		NULL  /* interface_data */
 	};
-
+#endif
 	static const GInterfaceInfo reader_info = {
 		(GInterfaceInitFunc) mail_paned_view_reader_init,
 		(GInterfaceFinalizeFunc) NULL,
@@ -772,11 +798,11 @@ e_mail_paned_view_register_type (GTypeModule *type_module)
 	mail_paned_view_type = g_type_module_register_type (
 		type_module, E_MAIL_VIEW_TYPE,
 		"EMailPanedView", &type_info, 0);
-
+#if 0
 	g_type_module_add_interface (
 		type_module, mail_paned_view_type,
 		GTK_TYPE_ORIENTABLE, &orientable_info);
-
+#endif
 	g_type_module_add_interface (
 		type_module, mail_paned_view_type,
 		E_TYPE_MAIL_READER, &reader_info);
@@ -1075,3 +1101,16 @@ e_mail_paned_view_update_view_instance (EMailPanedView *view)
 		view,
 		gal_view_instance_get_current_view (view_instance));
 }
+
+void
+e_mail_paned_view_hide_message_list_pane (EMailPanedView *view,
+					  gboolean visible)
+{
+	EMailPanedViewPrivate *priv = view->priv;
+
+	if (visible)
+		gtk_widget_show (priv->scrolled_window);
+	else
+		gtk_widget_hide (priv->scrolled_window);
+
+}
diff --git a/mail/e-mail-paned-view.h b/mail/e-mail-paned-view.h
index 3a7da31..4b3f3a1 100644
--- a/mail/e-mail-paned-view.h
+++ b/mail/e-mail-paned-view.h
@@ -51,6 +51,8 @@ typedef struct _EMailPanedView {
 typedef struct _EMailPanedViewClass {
 	EMailViewClass parent_class;
 
+	void (*open_selected_mail) (EMailPanedView *view);
+
 } EMailPanedViewClass;
 
 GType e_mail_paned_view_get_type (void);
@@ -78,5 +80,13 @@ e_mail_paned_view_set_preview_visible (EMailPanedView *view,
                                           gboolean preview_visible);
 gboolean
 e_mail_paned_view_get_preview_visible (EMailPanedView *view);
+void
+e_mail_paned_view_set_orientation (EMailPanedView *view,
+				   GtkOrientation orientation);
+GtkOrientation 
+e_mail_paned_view_get_orientation (EMailPanedView *view);
+void
+e_mail_paned_view_hide_message_list_pane (EMailPanedView *view,
+					  gboolean visible);
 
 #endif
diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c
index 296c572..1a3cc6d 100644
--- a/mail/e-mail-reader.c
+++ b/mail/e-mail-reader.c
@@ -604,7 +604,7 @@ static void
 action_mail_message_open_cb (GtkAction *action,
                              EMailReader *reader)
 {
-	e_mail_reader_open_selected (reader);
+	e_mail_reader_open_selected_mail (reader);
 }
 
 static void
@@ -2487,6 +2487,7 @@ mail_reader_class_init (EMailReaderIface *iface)
 	iface->get_folder_uri = mail_reader_get_folder_uri;
 	iface->set_folder = mail_reader_set_folder;
 	iface->set_message = mail_reader_set_message;
+	iface->open_selected_mail = e_mail_reader_open_selected;
 	iface->update_actions = mail_reader_update_actions;
 
 	g_object_interface_install_property (
@@ -3162,6 +3163,19 @@ e_mail_reader_set_message (EMailReader *reader,
 	iface->set_message (reader, uid);
 }
 
+void
+e_mail_reader_open_selected_mail (EMailReader *reader)
+{
+	EMailReaderIface *iface;
+
+	g_return_if_fail (E_IS_MAIL_READER (reader));
+
+	iface = E_MAIL_READER_GET_IFACE (reader);
+	g_return_if_fail (iface->open_selected_mail != NULL);
+
+	iface->open_selected_mail (reader);
+}
+
 gboolean
 e_mail_reader_get_group_by_threads (EMailReader *reader)
 {
diff --git a/mail/e-mail-reader.h b/mail/e-mail-reader.h
index bf44c72..35fc51c 100644
--- a/mail/e-mail-reader.h
+++ b/mail/e-mail-reader.h
@@ -99,6 +99,7 @@ struct _EMailReaderIface {
 						 const gchar *folder_uri);
 	void		(*set_message)		(EMailReader *reader,
 						 const gchar *uid);
+	void 		(*open_selected_mail)	(EMailReader *reader);
 
 	/* Signals */
 	void		(*show_search_bar)	(EMailReader *reader);
@@ -118,6 +119,7 @@ GtkActionGroup *
 EMFormatHTML *	e_mail_reader_get_formatter	(EMailReader *reader);
 gboolean	e_mail_reader_get_hide_deleted	(EMailReader *reader);
 GtkWidget *	e_mail_reader_get_message_list	(EMailReader *reader);
+void		e_mail_reader_open_selected_mail(EMailReader *reader);
 GtkMenu *	e_mail_reader_get_popup_menu	(EMailReader *reader);
 GPtrArray *	e_mail_reader_get_selected_uids	(EMailReader *reader);
 EShellBackend *	e_mail_reader_get_shell_backend	(EMailReader *reader);
diff --git a/mail/e-mail-view.c b/mail/e-mail-view.c
index 976d223..98f741d 100644
--- a/mail/e-mail-view.c
+++ b/mail/e-mail-view.c
@@ -34,6 +34,8 @@ G_DEFINE_TYPE (EMailView, e_mail_view, GTK_TYPE_VBOX)
 
 enum {
 	PANE_CLOSE,
+	VIEW_CHANGED,
+	OPEN_MAIL,
 	LAST_SIGNAL
 };
 
@@ -108,7 +110,13 @@ e_mail_view_class_init (EMailViewClass *klass)
 	klass->set_search_strings = NULL;
 	klass->get_view_instance = NULL;
 	klass->update_view_instance = NULL;
-
+	klass->set_orientation = NULL;
+	klass->get_orientation = NULL;
+	klass->set_show_deleted = NULL;
+	klass->get_show_deleted = NULL;
+	klass->set_preview_visible = NULL;
+	klass->get_preview_visible = NULL;
+	
 	signals[PANE_CLOSE] =
 		g_signal_new ("pane-close",
 			      G_OBJECT_CLASS_TYPE (object_class),
@@ -117,6 +125,24 @@ e_mail_view_class_init (EMailViewClass *klass)
 			      NULL, NULL,
 			      g_cclosure_marshal_VOID__VOID,
 			      G_TYPE_NONE, 0);
+	
+	signals[VIEW_CHANGED] =
+		g_signal_new ("view-changed",
+			      G_OBJECT_CLASS_TYPE (object_class),
+			      G_SIGNAL_RUN_FIRST,
+			      G_STRUCT_OFFSET (EMailViewClass , view_changed),
+			      NULL, NULL,
+			      g_cclosure_marshal_VOID__VOID,
+			      G_TYPE_NONE, 0);	
+
+	signals[OPEN_MAIL] =	
+		g_signal_new ("open-mail",
+			      G_OBJECT_CLASS_TYPE (object_class),
+			      G_SIGNAL_RUN_FIRST,
+			      G_STRUCT_OFFSET (EMailViewClass , open_mail),
+			      NULL, NULL,
+			      g_cclosure_marshal_VOID__STRING,
+			      G_TYPE_NONE, 1, G_TYPE_STRING);
 	/**
 	 * EMailView:shell-content
 	 *
@@ -160,3 +186,38 @@ e_mail_view_get_searchbar (EMailView *view)
 	return E_MAIL_VIEW_GET_CLASS (view)->get_searchbar (view);
 }
 
+void 
+e_mail_view_set_orientation (EMailView *view, GtkOrientation orientation)
+{
+	E_MAIL_VIEW_GET_CLASS (view)->set_orientation (view, orientation);
+}
+
+GtkOrientation 
+e_mail_view_get_orientation (EMailView *view)
+{
+	return E_MAIL_VIEW_GET_CLASS (view)->get_orientation (view);
+}
+
+void 
+e_mail_view_set_preview_visible (EMailView *view, gboolean visible)
+{
+	E_MAIL_VIEW_GET_CLASS (view)->set_preview_visible (view, visible);
+}
+
+gboolean 
+e_mail_view_get_preview_visible (EMailView *view)
+{
+	return E_MAIL_VIEW_GET_CLASS (view)->get_preview_visible (view);
+}
+
+void 
+e_mail_view_set_show_deleted (EMailView *view, gboolean show_deleted)
+{
+	E_MAIL_VIEW_GET_CLASS (view)->set_show_deleted (view, show_deleted);
+}
+
+gboolean 
+e_mail_view_get_show_deleted (EMailView *view)
+{
+	return E_MAIL_VIEW_GET_CLASS (view)->get_show_deleted (view);
+}
diff --git a/mail/e-mail-view.h b/mail/e-mail-view.h
index 430535b..b680b39 100644
--- a/mail/e-mail-view.h
+++ b/mail/e-mail-view.h
@@ -49,12 +49,19 @@ typedef struct _EMailViewClass {
 	GtkVBoxClass parent_class;
 
 	void (*pane_close) (EMailView *);
+	void (*view_changed) (EMailView *);
+	void (*open_mail) (EMailView *, const char *);
 
 	EShellSearchbar * (*get_searchbar) (EMailView *view);
 	void (*set_search_strings) (EMailView *view, GSList *search_strings);
 	GalViewInstance * (*get_view_instance) (EMailView *view);
 	void (*update_view_instance) (EMailView *view);
-	
+	void (*set_orientation) (EMailView *view, GtkOrientation orientation);
+	GtkOrientation (*get_orientation) (EMailView *);
+	void (*set_preview_visible) (EMailView *view, gboolean visible);
+	gboolean (*get_preview_visible) (EMailView *view);
+	void (*set_show_deleted) (EMailView *view, gboolean show_deleted);
+	gboolean (*get_show_deleted) (EMailView *view);
 
 } EMailViewClass;
 
@@ -65,6 +72,13 @@ GalViewInstance * e_mail_view_get_view_instance (EMailView *view);
 
 void e_mail_view_set_search_strings (EMailView *view, GSList *search_strings);
 
+void e_mail_view_set_orientation (EMailView *view, GtkOrientation orientation);
+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);
+void e_mail_view_set_show_deleted (EMailView *view, gboolean show_deleted);
+gboolean e_mail_view_get_show_deleted (EMailView *view);
+
 EShellSearchbar * e_mail_view_get_searchbar (EMailView *view);
 
 #endif
diff --git a/modules/mail/e-mail-shell-content.c b/modules/mail/e-mail-shell-content.c
index ec25944..aae8b4d 100644
--- a/modules/mail/e-mail-shell-content.c
+++ b/modules/mail/e-mail-shell-content.c
@@ -54,6 +54,13 @@ struct _EMailShellContentPrivate {
 	int temp;
 };
 
+enum {
+	PROP_0,
+	PROP_GROUP_BY_THREADS,
+	PROP_ORIENTATION,
+	PROP_PREVIEW_VISIBLE,
+	PROP_SHOW_DELETED
+};
 
 static gpointer parent_class;
 static GType mail_shell_content_type;
@@ -82,6 +89,15 @@ reconnect_folder_loaded_event (EMailReader *child, EMailReader *parent)
 }
 
 static void
+msc_view_changed (EMailView *view, EMailShellContent *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");
+}
+
+static void
 mail_shell_content_constructed (GObject *object)
 {
 	EMailShellContentPrivate *priv;
@@ -105,8 +121,12 @@ mail_shell_content_constructed (GObject *object)
 	/* Build content widgets. */
 
 	container = GTK_WIDGET (object);
-
-	widget = e_mail_notebook_view_new (E_SHELL_CONTENT(object));
+	
+	if (1 || e_shell_get_express_mode(e_shell_get_default ())) {
+		widget = e_mail_notebook_view_new (E_SHELL_CONTENT(object));
+		g_signal_connect (widget, "view-changed", G_CALLBACK(msc_view_changed), object);
+	} else
+		widget = e_mail_paned_view_new (E_SHELL_CONTENT(object));
 	E_MAIL_SHELL_CONTENT(object)->view = (EMailView *)widget;
 	gtk_container_add (GTK_CONTAINER (container), widget);
 	gtk_widget_show (widget);
@@ -135,6 +155,12 @@ mail_shell_content_focus_search_results (EShellContent *shell_content)
 	gtk_widget_grab_focus (e_mail_reader_get_message_list(E_MAIL_READER (E_MAIL_SHELL_CONTENT(shell_content)->view)));
 }
 
+static void
+mail_shell_content_open_selected_mail (EMailReader *reader)
+{
+	e_mail_reader_open_selected_mail (E_MAIL_READER(E_MAIL_SHELL_CONTENT(reader)->view));	
+}
+
 static GtkActionGroup *
 mail_shell_content_get_action_group (EMailReader *reader)
 {
@@ -202,6 +228,84 @@ mail_shell_content_show_search_bar (EMailReader *reader)
 }
 
 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;
+
+		case PROP_ORIENTATION:
+			e_mail_view_set_orientation (
+				E_MAIL_SHELL_CONTENT(object)->view,
+				g_value_get_enum (value));
+			return;
+
+		case PROP_PREVIEW_VISIBLE:
+			e_mail_view_set_preview_visible (
+				E_MAIL_SHELL_CONTENT(object)->view,
+				g_value_get_boolean (value));
+			return;
+
+		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);
+}
+
+static void
+mail_shell_content_get_property (GObject *object,
+                                 guint property_id,
+                                 GValue *value,
+                                 GParamSpec *pspec)
+{
+	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;
+
+		case PROP_PREVIEW_VISIBLE:
+			g_value_set_boolean (
+				value,
+				e_mail_view_get_preview_visible (
+				E_MAIL_SHELL_CONTENT(object)->view));
+			return;
+
+		case PROP_SHOW_DELETED:
+			g_value_set_boolean (
+				value,
+				e_mail_view_get_show_deleted (
+				E_MAIL_SHELL_CONTENT(object)->view));
+			return;
+	}
+
+	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
 mail_shell_content_class_init (EMailShellContentClass *class)
 {
 	GObjectClass *object_class;
@@ -213,11 +317,41 @@ mail_shell_content_class_init (EMailShellContentClass *class)
 	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;
+
 
 	shell_content_class = E_SHELL_CONTENT_CLASS (class);
 	shell_content_class->check_state = mail_shell_content_check_state;
 	shell_content_class->focus_search_results = mail_shell_content_focus_search_results;
 
+	g_object_class_override_property (
+		object_class,
+		PROP_GROUP_BY_THREADS,
+		"group-by-threads");
+
+	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",
+			NULL,
+			FALSE,
+			G_PARAM_READWRITE));
+
+	g_object_class_override_property (
+		object_class, PROP_ORIENTATION, "orientation");	
 }
 
 static void
@@ -247,6 +381,7 @@ mail_shell_content_reader_init (EMailReaderIface *iface)
 	iface->get_window = mail_shell_content_get_window;
 	iface->set_folder = mail_shell_content_set_folder;
 	iface->show_search_bar = mail_shell_content_show_search_bar;
+	iface->open_selected_mail = mail_shell_content_open_selected_mail;
 }
 
 void
@@ -271,6 +406,12 @@ 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);
@@ -279,6 +420,10 @@ e_mail_shell_content_register_type (GTypeModule *type_module)
 		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 *



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