From 87a3fac95cfdcb3dde4e0b75718239de20d8812f Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 26 Aug 2010 10:20:12 -0400 Subject: 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 a10c37031c..41cab950bc 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 909f38b33d..62e0b0c733 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); } @@ -269,6 +288,16 @@ e_mail_view_class_init (EMailViewClass *class) FALSE, G_PARAM_READWRITE)); + 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, @@ -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 da4e5e2688..6c697bda44 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 8dc2619bfa..6ba52737ba 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,31 +50,18 @@ ((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) { @@ -94,12 +80,65 @@ 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) { @@ -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 b0a89361cb..6e2c721d59 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 009b0c1bcd..da8b0d729c 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 b1fcc726f8..a794329501 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 12e0c0b0f1..18db5e2373 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); -- cgit v1.2.3