From a06e4484b8df804124b5bcf88d94dec5acfba270 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 6 Oct 2010 23:38:52 -0400 Subject: Give MailSession a permanent home. Global variables in shared libraries are a bad idea. EMailBackend now owns the MailSession instance, which is actually now EMailSession. Move the blocking utility functions in mail-tools.c to e-mail-session.c and add asynchronous variants. Same approach as Camel. Replace EMailReader.get_shell_backend() with EMailReader.get_backend(), which returns an EMailBackend. Easier access to the EMailSession. --- mail/e-mail-browser.c | 103 ++++++++++++++++++++++++++------------------------ 1 file changed, 53 insertions(+), 50 deletions(-) (limited to 'mail/e-mail-browser.c') diff --git a/mail/e-mail-browser.c b/mail/e-mail-browser.c index 3ffc290ba4..d1fe7ca90c 100644 --- a/mail/e-mail-browser.c +++ b/mail/e-mail-browser.c @@ -48,9 +48,9 @@ #define MAIL_BROWSER_GCONF_PREFIX "/apps/evolution/mail/mail_browser" struct _EMailBrowserPrivate { + EMailBackend *backend; GtkUIManager *ui_manager; EFocusTracker *focus_tracker; - EShellBackend *shell_backend; GtkActionGroup *action_group; EMFormatHTMLDisplay *formatter; @@ -65,9 +65,9 @@ struct _EMailBrowserPrivate { enum { PROP_0, + PROP_BACKEND, PROP_FOCUS_TRACKER, PROP_GROUP_BY_THREADS, - PROP_SHELL_BACKEND, PROP_SHOW_DELETED, PROP_UI_MANAGER }; @@ -339,12 +339,13 @@ mail_browser_status_message_cb (EMailBrowser *browser, } static void -mail_browser_set_shell_backend (EMailBrowser *browser, - EShellBackend *shell_backend) +mail_browser_set_backend (EMailBrowser *browser, + EMailBackend *backend) { - g_return_if_fail (browser->priv->shell_backend == NULL); + g_return_if_fail (E_IS_MAIL_BACKEND (backend)); + g_return_if_fail (browser->priv->backend == NULL); - browser->priv->shell_backend = g_object_ref (shell_backend); + browser->priv->backend = g_object_ref (backend); } static void @@ -354,18 +355,18 @@ mail_browser_set_property (GObject *object, GParamSpec *pspec) { switch (property_id) { + case PROP_BACKEND: + mail_browser_set_backend ( + E_MAIL_BROWSER (object), + g_value_get_object (value)); + return; + 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_browser_set_shell_backend ( - E_MAIL_BROWSER (object), - g_value_get_object (value)); - return; - case PROP_SHOW_DELETED: e_mail_browser_set_show_deleted ( E_MAIL_BROWSER (object), @@ -383,6 +384,12 @@ mail_browser_get_property (GObject *object, GParamSpec *pspec) { switch (property_id) { + case PROP_BACKEND: + g_value_set_object ( + value, e_mail_reader_get_backend ( + E_MAIL_READER (object))); + return; + case PROP_FOCUS_TRACKER: g_value_set_object ( value, e_mail_browser_get_focus_tracker ( @@ -395,12 +402,6 @@ mail_browser_get_property (GObject *object, 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_browser_get_show_deleted ( @@ -424,6 +425,11 @@ mail_browser_dispose (GObject *object) priv = E_MAIL_BROWSER_GET_PRIVATE (object); + if (priv->backend != NULL) { + g_object_unref (priv->backend); + priv->backend = NULL; + } + if (priv->ui_manager != NULL) { g_object_unref (priv->ui_manager); priv->ui_manager = NULL; @@ -434,11 +440,6 @@ mail_browser_dispose (GObject *object) 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; @@ -485,6 +486,7 @@ mail_browser_constructed (GObject *object) EMailBrowserPrivate *priv; EMFormatHTML *formatter; EMailReader *reader; + EMailBackend *backend; EShellBackend *shell_backend; EShell *shell; EFocusTracker *focus_tracker; @@ -509,8 +511,9 @@ mail_browser_constructed (GObject *object) priv = E_MAIL_BROWSER_GET_PRIVATE (object); reader = E_MAIL_READER (object); + backend = e_mail_reader_get_backend (reader); - shell_backend = e_mail_reader_get_shell_backend (reader); + shell_backend = E_SHELL_BACKEND (backend); shell = e_shell_backend_get_shell (shell_backend); ui_manager = e_ui_manager_new (); @@ -527,7 +530,7 @@ mail_browser_constructed (GObject *object) /* 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); + priv->message_list = message_list_new (backend); g_object_ref_sink (priv->message_list); g_signal_connect_swapped ( @@ -662,6 +665,16 @@ mail_browser_get_action_group (EMailReader *reader) return priv->action_group; } +static EMailBackend * +mail_browser_get_backend (EMailReader *reader) +{ + EMailBrowserPrivate *priv; + + priv = E_MAIL_BROWSER_GET_PRIVATE (reader); + + return priv->backend; +} + static gboolean mail_browser_get_hide_deleted (EMailReader *reader) { @@ -706,16 +719,6 @@ mail_browser_get_popup_menu (EMailReader *reader) return GTK_MENU (widget); } -static EShellBackend * -mail_browser_get_shell_backend (EMailReader *reader) -{ - EMailBrowserPrivate *priv; - - priv = E_MAIL_BROWSER_GET_PRIVATE (reader); - - return priv->shell_backend; -} - static GtkWindow * mail_browser_get_window (EMailReader *reader) { @@ -778,6 +781,17 @@ mail_browser_class_init (EMailBrowserClass *class) widget_class = GTK_WIDGET_CLASS (class); widget_class->key_press_event = mail_browser_key_press_event; + g_object_class_install_property ( + object_class, + PROP_BACKEND, + g_param_spec_object ( + "backend", + "Mail Backend", + "The mail backend", + E_TYPE_MAIL_BACKEND, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property ( object_class, PROP_FOCUS_TRACKER, @@ -794,17 +808,6 @@ mail_browser_class_init (EMailBrowserClass *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, @@ -820,11 +823,11 @@ static void mail_browser_interface_init (EMailReaderInterface *interface) { interface->get_action_group = mail_browser_get_action_group; + interface->get_backend = mail_browser_get_backend; interface->get_formatter = mail_browser_get_formatter; interface->get_hide_deleted = mail_browser_get_hide_deleted; interface->get_message_list = mail_browser_get_message_list; interface->get_popup_menu = mail_browser_get_popup_menu; - interface->get_shell_backend = mail_browser_get_shell_backend; interface->get_window = mail_browser_get_window; interface->set_message = mail_browser_set_message; interface->show_search_bar = mail_browser_show_search_bar; @@ -884,13 +887,13 @@ e_mail_browser_get_type (void) } GtkWidget * -e_mail_browser_new (EShellBackend *shell_backend) +e_mail_browser_new (EMailBackend *backend) { - g_return_val_if_fail (E_IS_SHELL_BACKEND (shell_backend), NULL); + g_return_val_if_fail (E_IS_MAIL_BACKEND (backend), NULL); return g_object_new ( E_TYPE_MAIL_BROWSER, - "shell-backend", shell_backend, NULL); + "backend", backend, NULL); } void -- cgit v1.2.3