From 909774170062bd74c6f3554b25f0d06054fb9c8b Mon Sep 17 00:00:00 2001 From: Srinivasa Ragavan Date: Fri, 9 Jul 2010 14:41:34 +0530 Subject: Rewrite the content piece of evolution. --- modules/mail/e-mail-shell-content.c | 932 +----------------------------------- 1 file changed, 14 insertions(+), 918 deletions(-) (limited to 'modules/mail/e-mail-shell-content.c') diff --git a/modules/mail/e-mail-shell-content.c b/modules/mail/e-mail-shell-content.c index 7cfa678aff..54441b4466 100644 --- a/modules/mail/e-mail-shell-content.c +++ b/modules/mail/e-mail-shell-content.c @@ -38,6 +38,8 @@ #include "mail-ops.h" #include "message-list.h" +#include "e-mail-view.h" +#include "e-mail-paned-view.h" #include "e-mail-reader.h" #include "e-mail-reader-utils.h" #include "e-mail-shell-backend.h" @@ -47,314 +49,14 @@ (G_TYPE_INSTANCE_GET_PRIVATE \ ((obj), E_TYPE_MAIL_SHELL_CONTENT, EMailShellContentPrivate)) -#define STATE_KEY_GROUP_BY_THREADS "GroupByThreads" -#define STATE_KEY_SELECTED_MESSAGE "SelectedMessage" -#define STATE_KEY_PREVIEW_VISIBLE "PreviewVisible" - struct _EMailShellContentPrivate { - GtkWidget *paned; - GtkWidget *scrolled_window; - GtkWidget *message_list; - GtkWidget *search_bar; - - EMFormatHTMLDisplay *formatter; - GalViewInstance *view_instance; - GtkOrientation orientation; - - /* ETable scrolling hack */ - gdouble default_scrollbar_position; - - guint paned_binding_id; - - /* Signal handler IDs */ - guint message_list_built_id; - - guint preview_visible : 1; - guint show_deleted : 1; + int temp; }; -enum { - PROP_0, - PROP_GROUP_BY_THREADS, - PROP_ORIENTATION, - PROP_PREVIEW_VISIBLE, - PROP_QUOTE_FROM_SELECTION, - PROP_SHOW_DELETED -}; static gpointer parent_class; static GType mail_shell_content_type; -static void -mail_shell_content_save_boolean (EMailShellContent *mail_shell_content, - const gchar *key, - gboolean value) -{ - EShellView *shell_view; - EShellContent *shell_content; - EMailReader *reader; - GKeyFile *key_file; - const gchar *folder_uri; - gchar *group_name; - - shell_content = E_SHELL_CONTENT (mail_shell_content); - shell_view = e_shell_content_get_shell_view (shell_content); - key_file = e_shell_view_get_state_key_file (shell_view); - - reader = E_MAIL_READER (mail_shell_content); - folder_uri = e_mail_reader_get_folder_uri (reader); - - if (folder_uri == NULL) - return; - - group_name = g_strdup_printf ("Folder %s", folder_uri); - g_key_file_set_boolean (key_file, group_name, key, value); - g_free (group_name); - - e_shell_view_set_state_dirty (shell_view); -} - -static void -mail_shell_content_message_list_built_cb (EMailShellContent *mail_shell_content, - MessageList *message_list) -{ - EMailShellContentPrivate *priv = mail_shell_content->priv; - EShellView *shell_view; - EShellWindow *shell_window; - EShellContent *shell_content; - GKeyFile *key_file; - - g_signal_handler_disconnect ( - message_list, priv->message_list_built_id); - priv->message_list_built_id = 0; - - shell_content = E_SHELL_CONTENT (mail_shell_content); - shell_view = e_shell_content_get_shell_view (shell_content); - shell_window = e_shell_view_get_shell_window (shell_view); - - key_file = e_shell_view_get_state_key_file (shell_view); - - if (message_list->cursor_uid != NULL) - ; /* do nothing */ - - else if (message_list->folder_uri == NULL) - ; /* do nothing */ - - else if (e_shell_window_get_safe_mode (shell_window)) - e_shell_window_set_safe_mode (shell_window, FALSE); - - else { - const gchar *folder_uri; - const gchar *key; - gchar *group_name; - gchar *uid; - - key = STATE_KEY_SELECTED_MESSAGE; - folder_uri = message_list->folder_uri; - group_name = g_strdup_printf ("Folder %s", folder_uri); - uid = g_key_file_get_string (key_file, group_name, key, NULL); - g_free (group_name); - - /* Use selection fallbacks if UID is not found. */ - message_list_select_uid (message_list, uid, TRUE); - - g_free (uid); - } -} - -static void -mail_shell_content_display_view_cb (EMailShellContent *mail_shell_content, - GalView *gal_view) -{ - EMailReader *reader; - GtkWidget *message_list; - - reader = E_MAIL_READER (mail_shell_content); - message_list = e_mail_reader_get_message_list (reader); - - if (GAL_IS_VIEW_ETABLE (gal_view)) - gal_view_etable_attach_tree ( - GAL_VIEW_ETABLE (gal_view), - E_TREE (message_list)); -} - -static void -mail_shell_content_message_selected_cb (EMailShellContent *mail_shell_content, - const gchar *message_uid, - MessageList *message_list) -{ - EShellContent *shell_content; - EShellView *shell_view; - GKeyFile *key_file; - const gchar *folder_uri; - const gchar *key; - gchar *group_name; - - folder_uri = message_list->folder_uri; - - /* This also gets triggered when selecting a store name on - * the sidebar such as "On This Computer", in which case - * 'folder_uri' will be NULL. */ - if (folder_uri == NULL) - return; - - shell_content = E_SHELL_CONTENT (mail_shell_content); - shell_view = e_shell_content_get_shell_view (shell_content); - key_file = e_shell_view_get_state_key_file (shell_view); - - key = STATE_KEY_SELECTED_MESSAGE; - group_name = g_strdup_printf ("Folder %s", folder_uri); - - if (message_uid != NULL) - g_key_file_set_string (key_file, group_name, key, message_uid); - else - g_key_file_remove_key (key_file, group_name, key, NULL); - e_shell_view_set_state_dirty (shell_view); - - g_free (group_name); -} - -static void -mail_shell_content_restore_state_cb (EShellWindow *shell_window, - EShellView *shell_view, - EShellContent *shell_content) -{ - EMailShellContentPrivate *priv; - GConfBridge *bridge; - GObject *object; - const gchar *key; - - priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (shell_content); - - /* Bind GObject properties to GConf keys. */ - - bridge = gconf_bridge_get (); - - object = G_OBJECT (priv->paned); - key = "/apps/evolution/mail/display/hpaned_size"; - gconf_bridge_bind_property (bridge, key, object, "hposition"); - - object = G_OBJECT (priv->paned); - key = "/apps/evolution/mail/display/paned_size"; - gconf_bridge_bind_property (bridge, key, object, "vposition"); -} - -static void -mail_shell_content_notify_group_by_threads_cb (EMailReader *reader) -{ - gboolean group_by_threads; - - group_by_threads = e_mail_reader_get_group_by_threads (reader); - - mail_shell_content_save_boolean ( - E_MAIL_SHELL_CONTENT (reader), - STATE_KEY_GROUP_BY_THREADS, group_by_threads); -} - -static GtkOrientation -mail_shell_content_get_orientation (EMailShellContent *mail_shell_content) -{ - return mail_shell_content->priv->orientation; -} - -static void -mail_shell_content_set_orientation (EMailShellContent *mail_shell_content, - GtkOrientation orientation) -{ - mail_shell_content->priv->orientation = orientation; - - g_object_notify (G_OBJECT (mail_shell_content), "orientation"); - - e_mail_shell_content_update_view_instance (mail_shell_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; - - case PROP_ORIENTATION: - mail_shell_content_set_orientation ( - E_MAIL_SHELL_CONTENT (object), - g_value_get_enum (value)); - return; - - case PROP_PREVIEW_VISIBLE: - e_mail_shell_content_set_preview_visible ( - E_MAIL_SHELL_CONTENT (object), - g_value_get_boolean (value)); - return; - - case PROP_QUOTE_FROM_SELECTION: - e_mail_reader_set_quote_from_selection ( - E_MAIL_READER (object), - g_value_get_boolean (value)); - return; - - case PROP_SHOW_DELETED: - e_mail_shell_content_set_show_deleted ( - E_MAIL_SHELL_CONTENT (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_ORIENTATION: - g_value_set_enum ( - value, - mail_shell_content_get_orientation ( - E_MAIL_SHELL_CONTENT (object))); - return; - - case PROP_PREVIEW_VISIBLE: - g_value_set_boolean ( - value, - e_mail_shell_content_get_preview_visible ( - E_MAIL_SHELL_CONTENT (object))); - return; - - case PROP_QUOTE_FROM_SELECTION: - g_value_set_boolean ( - value, - e_mail_reader_get_quote_from_selection ( - E_MAIL_READER (object))); - return; - - case PROP_SHOW_DELETED: - g_value_set_boolean ( - value, - e_mail_shell_content_get_show_deleted ( - E_MAIL_SHELL_CONTENT (object))); - return; - } - - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); -} - static void mail_shell_content_dispose (GObject *object) { @@ -362,36 +64,6 @@ mail_shell_content_dispose (GObject *object) priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (object); - if (priv->paned != NULL) { - g_object_unref (priv->paned); - priv->paned = NULL; - } - - if (priv->scrolled_window != NULL) { - g_object_unref (priv->scrolled_window); - priv->scrolled_window = NULL; - } - - if (priv->message_list != NULL) { - g_object_unref (priv->message_list); - priv->message_list = NULL; - } - - if (priv->search_bar != NULL) { - g_object_unref (priv->search_bar); - priv->search_bar = NULL; - } - - if (priv->formatter != NULL) { - g_object_unref (priv->formatter); - priv->formatter = NULL; - } - - if (priv->view_instance != NULL) { - g_object_unref (priv->view_instance); - priv->view_instance = NULL; - } - /* Chain up to parent's dispose() method. */ G_OBJECT_CLASS (parent_class)->dispose (object); } @@ -404,15 +76,10 @@ mail_shell_content_constructed (GObject *object) EShellBackend *shell_backend; EShellWindow *shell_window; EShellView *shell_view; - ESearchBar *search_bar; - EMailReader *reader; - GtkWidget *message_list; GtkWidget *container; GtkWidget *widget; - EWebView *web_view; priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (object); - priv->formatter = em_format_html_display_new (); /* Chain up to parent's constructed() method. */ G_OBJECT_CLASS (parent_class)->constructed (object); @@ -422,85 +89,21 @@ mail_shell_content_constructed (GObject *object) shell_window = e_shell_view_get_shell_window (shell_view); shell_backend = e_shell_view_get_shell_backend (shell_view); - web_view = em_format_html_get_web_view ( - EM_FORMAT_HTML (priv->formatter)); - /* Build content widgets. */ container = GTK_WIDGET (object); - widget = e_paned_new (GTK_ORIENTATION_VERTICAL); + 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); - priv->paned = g_object_ref (widget); - gtk_widget_show (widget); - - e_binding_new (object, "orientation", widget, "orientation"); - - container = priv->paned; - - widget = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy ( - GTK_SCROLLED_WINDOW (widget), - GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); - gtk_scrolled_window_set_shadow_type ( - GTK_SCROLLED_WINDOW (widget), GTK_SHADOW_IN); - priv->scrolled_window = g_object_ref (widget); - gtk_paned_pack1 (GTK_PANED (container), widget, TRUE, FALSE); - gtk_widget_show (widget); - - container = widget; - - widget = message_list_new (shell_backend); - gtk_container_add (GTK_CONTAINER (container), widget); - priv->message_list = g_object_ref (widget); - gtk_widget_show (widget); - - container = priv->paned; - - gtk_widget_show (GTK_WIDGET (web_view)); - - widget = e_preview_pane_new (web_view); - gtk_paned_pack2 (GTK_PANED (container), widget, FALSE, FALSE); gtk_widget_show (widget); - e_binding_new (object, "preview-visible", widget, "visible"); - - 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); - - /* Load the view instance. */ - - e_mail_shell_content_update_view_instance ( - E_MAIL_SHELL_CONTENT (shell_content)); - - /* Message list customizations. */ - - reader = E_MAIL_READER (shell_content); - message_list = e_mail_reader_get_message_list (reader); - - g_signal_connect_swapped ( - message_list, "message-selected", - G_CALLBACK (mail_shell_content_message_selected_cb), - shell_content); - - /* Restore pane positions from the last session once - * the shell view is fully initialized and visible. */ - g_signal_connect ( - shell_window, "shell-view-created::mail", - G_CALLBACK (mail_shell_content_restore_state_cb), - shell_content); - - e_mail_reader_connect_headers (reader); } static guint32 mail_shell_content_check_state (EShellContent *shell_content) { - return e_mail_reader_check_state (E_MAIL_READER (shell_content)); + return e_mail_reader_check_state (E_MAIL_READER (E_MAIL_SHELL_CONTENT(shell_content)->view)); } static void @@ -510,196 +113,7 @@ mail_shell_content_focus_search_results (EShellContent *shell_content) priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (shell_content); - gtk_widget_grab_focus (priv->message_list); -} - -static GtkActionGroup * -mail_shell_content_get_action_group (EMailReader *reader) -{ - EShellContent *shell_content; - EShellWindow *shell_window; - EShellView *shell_view; - - shell_content = E_SHELL_CONTENT (reader); - shell_view = e_shell_content_get_shell_view (shell_content); - shell_window = e_shell_view_get_shell_window (shell_view); - - return E_SHELL_WINDOW_ACTION_GROUP_MAIL (shell_window); -} - -static EMFormatHTML * -mail_shell_content_get_formatter (EMailReader *reader) -{ - EMailShellContentPrivate *priv; - - priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (reader); - - return EM_FORMAT_HTML (priv->formatter); -} - -static gboolean -mail_shell_content_get_hide_deleted (EMailReader *reader) -{ - EMailShellContent *mail_shell_content; - - mail_shell_content = E_MAIL_SHELL_CONTENT (reader); - - return !e_mail_shell_content_get_show_deleted (mail_shell_content); -} - -static GtkWidget * -mail_shell_content_get_message_list (EMailReader *reader) -{ - EMailShellContentPrivate *priv; - - priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (reader); - - return priv->message_list; -} - -static GtkMenu * -mail_shell_content_get_popup_menu (EMailReader *reader) -{ - EShellView *shell_view; - EShellWindow *shell_window; - EShellContent *shell_content; - GtkUIManager *ui_manager; - GtkWidget *widget; - - shell_content = E_SHELL_CONTENT (reader); - shell_view = e_shell_content_get_shell_view (shell_content); - shell_window = e_shell_view_get_shell_window (shell_view); - - ui_manager = e_shell_window_get_ui_manager (shell_window); - widget = gtk_ui_manager_get_widget (ui_manager, "/mail-preview-popup"); - - return GTK_MENU (widget); -} - -static EShellBackend * -mail_shell_content_get_shell_backend (EMailReader *reader) -{ - EShellContent *shell_content; - EShellView *shell_view; - - shell_content = E_SHELL_CONTENT (reader); - shell_view = e_shell_content_get_shell_view (shell_content); - - return e_shell_view_get_shell_backend (shell_view); -} - -static GtkWindow * -mail_shell_content_get_window (EMailReader *reader) -{ - EShellContent *shell_content; - EShellWindow *shell_window; - EShellView *shell_view; - - shell_content = E_SHELL_CONTENT (reader); - shell_view = e_shell_content_get_shell_view (shell_content); - shell_window = e_shell_view_get_shell_window (shell_view); - - return GTK_WINDOW (shell_window); -} - -static void -mail_shell_content_set_folder (EMailReader *reader, - CamelFolder *folder, - const gchar *folder_uri) -{ - EShell *shell; - EShellView *shell_view; - EShellWindow *shell_window; - EShellContent *shell_content; - EShellSettings *shell_settings; - EMailShellContentPrivate *priv; - EMailReaderIface *default_iface; - GtkWidget *message_list; - GKeyFile *key_file; - gchar *group_name; - const gchar *key; - gboolean value; - GError *error = NULL; - - priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (reader); - - shell_content = E_SHELL_CONTENT (reader); - shell_view = e_shell_content_get_shell_view (shell_content); - shell_window = e_shell_view_get_shell_window (shell_view); - - shell = e_shell_window_get_shell (shell_window); - shell_settings = e_shell_get_shell_settings (shell); - - message_list = e_mail_reader_get_message_list (reader); - - message_list_freeze (MESSAGE_LIST (message_list)); - - /* Chain up to interface's default set_folder() method. */ - default_iface = g_type_default_interface_peek (E_TYPE_MAIL_READER); - default_iface->set_folder (reader, folder, folder_uri); - - if (folder == NULL) - goto exit; - - mail_refresh_folder (folder, NULL, NULL); - - /* This is a one-time-only callback. */ - if (MESSAGE_LIST (message_list)->cursor_uid == NULL && - priv->message_list_built_id == 0) - priv->message_list_built_id = g_signal_connect_swapped ( - message_list, "message-list-built", - G_CALLBACK (mail_shell_content_message_list_built_cb), - reader); - - /* Restore the folder's preview and threaded state. */ - - key_file = e_shell_view_get_state_key_file (shell_view); - group_name = g_strdup_printf ("Folder %s", folder_uri); - - key = STATE_KEY_GROUP_BY_THREADS; - value = g_key_file_get_boolean (key_file, group_name, key, &error); - if (error != NULL) { - value = TRUE; - g_clear_error (&error); - } - - e_mail_reader_set_group_by_threads (reader, value); - - key = STATE_KEY_PREVIEW_VISIBLE; - value = g_key_file_get_boolean (key_file, group_name, key, &error); - if (error != NULL) { - value = TRUE; - g_clear_error (&error); - } - - /* XXX This is a little confusing and needs rethought. The - * EShellWindow:safe-mode property blocks automatic message - * selection, but the "mail-safe-list" shell setting blocks - * both the preview pane and automatic message selection. */ - if (e_shell_settings_get_boolean (shell_settings, "mail-safe-list")) { - e_shell_settings_set_boolean ( - shell_settings, "mail-safe-list", FALSE); - e_shell_window_set_safe_mode (shell_window, TRUE); - value = FALSE; - } - - e_mail_shell_content_set_preview_visible ( - E_MAIL_SHELL_CONTENT (shell_content), value); - - g_free (group_name); - -exit: - message_list_thaw (MESSAGE_LIST (message_list)); -} - -static void -mail_shell_content_show_search_bar (EMailReader *reader) -{ - EMailShellContentPrivate *priv; - - priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (reader); - - gtk_widget_show (priv->search_bar); + gtk_widget_grab_focus (e_mail_reader_get_message_list(E_MAIL_READER (E_MAIL_SHELL_CONTENT(shell_content)->view))); } static void @@ -712,8 +126,6 @@ mail_shell_content_class_init (EMailShellContentClass *class) g_type_class_add_private (class, sizeof (EMailShellContentPrivate)); object_class = G_OBJECT_CLASS (class); - 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; @@ -721,54 +133,7 @@ mail_shell_content_class_init (EMailShellContentClass *class) shell_content_class->check_state = mail_shell_content_check_state; shell_content_class->focus_search_results = mail_shell_content_focus_search_results; - /* 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)); - - /* Inherited from EMailReader */ - g_object_class_override_property ( - object_class, - PROP_QUOTE_FROM_SELECTION, - "quote-from-selection"); - 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 -mail_shell_content_reader_init (EMailReaderIface *iface) -{ - iface->get_action_group = mail_shell_content_get_action_group; - iface->get_formatter = mail_shell_content_get_formatter; - iface->get_hide_deleted = mail_shell_content_get_hide_deleted; - iface->get_message_list = mail_shell_content_get_message_list; - iface->get_popup_menu = mail_shell_content_get_popup_menu; - iface->get_shell_backend = mail_shell_content_get_shell_backend; - 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; } static void @@ -777,13 +142,6 @@ mail_shell_content_init (EMailShellContent *mail_shell_content) mail_shell_content->priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (mail_shell_content); - mail_shell_content->priv->preview_visible = TRUE; - - g_signal_connect ( - mail_shell_content, "notify::group-by-threads", - G_CALLBACK (mail_shell_content_notify_group_by_threads_cb), - NULL); - /* Postpone widget construction until we have a shell view. */ } @@ -809,29 +167,10 @@ e_mail_shell_content_register_type (GTypeModule *type_module) NULL /* value_table */ }; - static const GInterfaceInfo orientable_info = { - (GInterfaceInitFunc) NULL, - (GInterfaceFinalizeFunc) NULL, - NULL /* interface_data */ - }; - - static const GInterfaceInfo reader_info = { - (GInterfaceInitFunc) mail_shell_content_reader_init, - (GInterfaceFinalizeFunc) NULL, - NULL /* interface_data */ - }; - mail_shell_content_type = g_type_module_register_type ( type_module, E_TYPE_SHELL_CONTENT, "EMailShellContent", &type_info, 0); - g_type_module_add_interface ( - type_module, mail_shell_content_type, - GTK_TYPE_ORIENTABLE, &orientable_info); - - g_type_module_add_interface ( - type_module, mail_shell_content_type, - E_TYPE_MAIL_READER, &reader_info); } GtkWidget * @@ -844,271 +183,28 @@ e_mail_shell_content_new (EShellView *shell_view) "shell-view", shell_view, NULL); } -gboolean -e_mail_shell_content_get_preview_visible (EMailShellContent *mail_shell_content) -{ - g_return_val_if_fail ( - E_IS_MAIL_SHELL_CONTENT (mail_shell_content), FALSE); - - return mail_shell_content->priv->preview_visible; -} - -void -e_mail_shell_content_set_preview_visible (EMailShellContent *mail_shell_content, - gboolean preview_visible) -{ - g_return_if_fail (E_IS_MAIL_SHELL_CONTENT (mail_shell_content)); - - if (preview_visible == mail_shell_content->priv->preview_visible) - return; - - /* If we're showing the preview, tell EMailReader to reload the - * selected message. This should force it to download the full - * message if necessary, so we don't get an empty preview. */ - if (preview_visible) { - EMailReader *reader; - GtkWidget *message_list; - const gchar *cursor_uid; - - reader = E_MAIL_READER (mail_shell_content); - message_list = e_mail_reader_get_message_list (reader); - cursor_uid = MESSAGE_LIST (message_list)->cursor_uid; - - if (cursor_uid != NULL) - e_mail_reader_set_message (reader, cursor_uid); - } - - mail_shell_content->priv->preview_visible = preview_visible; - - mail_shell_content_save_boolean ( - mail_shell_content, - STATE_KEY_PREVIEW_VISIBLE, preview_visible); - - g_object_notify (G_OBJECT (mail_shell_content), "preview-visible"); -} - EShellSearchbar * e_mail_shell_content_get_searchbar (EMailShellContent *mail_shell_content) { - EShellView *shell_view; - EShellContent *shell_content; - GtkWidget *widget; - - g_return_val_if_fail ( - E_IS_MAIL_SHELL_CONTENT (mail_shell_content), NULL); - - shell_content = E_SHELL_CONTENT (mail_shell_content); - shell_view = e_shell_content_get_shell_view (shell_content); - widget = e_shell_view_get_searchbar (shell_view); - - return E_SHELL_SEARCHBAR (widget); -} - -gboolean -e_mail_shell_content_get_show_deleted (EMailShellContent *mail_shell_content) -{ - g_return_val_if_fail ( - E_IS_MAIL_SHELL_CONTENT (mail_shell_content), FALSE); - - return mail_shell_content->priv->show_deleted; + return e_mail_view_get_searchbar (mail_shell_content->view); } void -e_mail_shell_content_set_show_deleted (EMailShellContent *mail_shell_content, - gboolean show_deleted) +e_mail_shell_content_set_search_strings (EMailShellContent *mail_shell_content, + GSList *search_strings) { - g_return_if_fail (E_IS_MAIL_SHELL_CONTENT (mail_shell_content)); - - mail_shell_content->priv->show_deleted = show_deleted; - - g_object_notify (G_OBJECT (mail_shell_content), "show-deleted"); + e_mail_view_set_search_strings (mail_shell_content->view, search_strings); } GalViewInstance * e_mail_shell_content_get_view_instance (EMailShellContent *mail_shell_content) { - g_return_val_if_fail ( - E_IS_MAIL_SHELL_CONTENT (mail_shell_content), NULL); - - return mail_shell_content->priv->view_instance; -} - -void -e_mail_shell_content_set_search_strings (EMailShellContent *mail_shell_content, - GSList *search_strings) -{ - ESearchBar *search_bar; - ESearchingTokenizer *tokenizer; - - g_return_if_fail (E_IS_MAIL_SHELL_CONTENT (mail_shell_content)); - - search_bar = E_SEARCH_BAR (mail_shell_content->priv->search_bar); - tokenizer = e_search_bar_get_tokenizer (search_bar); - - e_searching_tokenizer_set_secondary_case_sensitivity (tokenizer, FALSE); - e_searching_tokenizer_set_secondary_search_string (tokenizer, NULL); - - while (search_strings != NULL) { - e_searching_tokenizer_add_secondary_search_string ( - tokenizer, search_strings->data); - search_strings = g_slist_next (search_strings); - } - - e_search_bar_changed (search_bar); + return e_mail_view_get_view_instance (mail_shell_content->view); } void e_mail_shell_content_update_view_instance (EMailShellContent *mail_shell_content) { - EMailReader *reader; - EShell *shell; - EShellContent *shell_content; - EShellView *shell_view; - EShellWindow *shell_window; - EShellViewClass *shell_view_class; - EShellSettings *shell_settings; - GalViewCollection *view_collection; - GalViewInstance *view_instance; - CamelFolder *folder; - GtkOrientable *orientable; - GtkOrientation orientation; - gboolean outgoing_folder; - gboolean show_vertical_view; - const gchar *folder_uri; - gchar *view_id; - - g_return_if_fail (E_IS_MAIL_SHELL_CONTENT (mail_shell_content)); - - shell_content = E_SHELL_CONTENT (mail_shell_content); - shell_view = e_shell_content_get_shell_view (shell_content); - shell_view_class = E_SHELL_VIEW_GET_CLASS (shell_view); - view_collection = shell_view_class->view_collection; - - shell_window = e_shell_view_get_shell_window (shell_view); - shell = e_shell_window_get_shell (shell_window); - shell_settings = e_shell_get_shell_settings (shell); - - reader = E_MAIL_READER (mail_shell_content); - folder = e_mail_reader_get_folder (reader); - folder_uri = e_mail_reader_get_folder_uri (reader); - - /* If no folder is selected, return silently. */ - if (folder == NULL) - return; - - /* If we have a folder, we should also have a URI. */ - g_return_if_fail (folder_uri != NULL); - - if (mail_shell_content->priv->view_instance != NULL) { - g_object_unref (mail_shell_content->priv->view_instance); - mail_shell_content->priv->view_instance = NULL; - } - - view_id = mail_config_folder_to_safe_url (folder); - if (e_shell_settings_get_boolean (shell_settings, "mail-global-view-setting")) - view_instance = e_shell_view_new_view_instance (shell_view, "global_view_setting"); - else - view_instance = e_shell_view_new_view_instance (shell_view, view_id); - - mail_shell_content->priv->view_instance = view_instance; - - orientable = GTK_ORIENTABLE (mail_shell_content); - orientation = gtk_orientable_get_orientation (orientable); - show_vertical_view = (orientation == GTK_ORIENTATION_HORIZONTAL); - - if (show_vertical_view) { - gchar *filename; - gchar *safe_view_id; - - /* Force the view instance into vertical view. */ - - g_free (view_instance->custom_filename); - g_free (view_instance->current_view_filename); - - safe_view_id = g_strdup (view_id); - e_filename_make_safe (safe_view_id); - - filename = g_strdup_printf ( - "custom_wide_view-%s.xml", safe_view_id); - view_instance->custom_filename = g_build_filename ( - view_collection->local_dir, filename, NULL); - g_free (filename); - - filename = g_strdup_printf ( - "current_wide_view-%s.xml", safe_view_id); - view_instance->current_view_filename = g_build_filename ( - view_collection->local_dir, filename, NULL); - g_free (filename); - - g_free (safe_view_id); - } - - g_free (view_id); - - outgoing_folder = - em_utils_folder_is_drafts (folder, folder_uri) || - em_utils_folder_is_outbox (folder, folder_uri) || - em_utils_folder_is_sent (folder, folder_uri); - - if (outgoing_folder) { - if (show_vertical_view) - gal_view_instance_set_default_view ( - view_instance, "Wide_View_Sent"); - else - gal_view_instance_set_default_view ( - view_instance, "As_Sent_Folder"); - } else if (show_vertical_view) { - gal_view_instance_set_default_view ( - view_instance, "Wide_View_Normal"); - } - - gal_view_instance_load (view_instance); - - if (!gal_view_instance_exists (view_instance)) { - gchar *state_filename; - - state_filename = mail_config_folder_to_cachename ( - folder, "et-header-"); - - if (g_file_test (state_filename, G_FILE_TEST_IS_REGULAR)) { - ETableSpecification *spec; - ETableState *state; - GalView *view; - gchar *spec_filename; - - spec = e_table_specification_new (); - spec_filename = g_build_filename ( - EVOLUTION_ETSPECDIR, - "message-list.etspec", - NULL); - e_table_specification_load_from_file ( - spec, spec_filename); - g_free (spec_filename); - - state = e_table_state_new (); - view = gal_view_etable_new (spec, ""); - - e_table_state_load_from_file ( - state, state_filename); - gal_view_etable_set_state ( - GAL_VIEW_ETABLE (view), state); - gal_view_instance_set_custom_view ( - view_instance, view); - - g_object_unref (state); - g_object_unref (view); - g_object_unref (spec); - } - - g_free (state_filename); - } - - g_signal_connect_swapped ( - view_instance, "display-view", - G_CALLBACK (mail_shell_content_display_view_cb), - mail_shell_content); - - mail_shell_content_display_view_cb ( - mail_shell_content, - gal_view_instance_get_current_view (view_instance)); + e_mail_view_update_view_instance (mail_shell_content->view); } + -- cgit v1.2.3