Fix crash when adding account in express mode

The settings library started using an EMailBackend object, but since
it is abstract it can't be instantiated directly. So we use the EShell
to get the mail backend for us instead, after loading the modules.
This commit is contained in:
Gustavo Noronha Silva
2011-06-28 15:44:45 -03:00
parent 913fbc6574
commit 13bddd5581
2 changed files with 28 additions and 1 deletions

View File

@ -25,6 +25,7 @@ libevolution_mail_settings_la_CPPFLAGS = \
-DEVOLUTION_PRIVDATADIR=\""$(privdatadir)"\" \
-DEVOLUTION_ETSPECDIR=\""$(etspecdir)"\" \
-DEVOLUTION_ICONSDIR=\""$(imagesdir)"\" \
-DEVOLUTION_MODULEDIR=\""$(moduledir)"\" \
-DEVOLUTION_IMAGES=\""$(imagesdir)"\" \
-DEVOLUTION_GALVIEWSDIR=\""$(viewsdir)"\" \
-DEVOLUTION_BUTTONSDIR=\""$(buttonsdir)"\" \

View File

@ -43,6 +43,8 @@
#include <mail/mail-mt.h>
#include <mail/e-mail-store.h>
#include <shell/e-shell.h>
enum {
CTRL_W_PRESSED,
CTRL_Q_PRESSED,
@ -202,6 +204,7 @@ mail_capplet_shell_construct (MailCappletShell *shell, gint socket_id, gboolean
{
MailCappletShellPrivate *priv = shell->priv;
GtkStyle *style = gtk_widget_get_default_style ();
EShell *eshell;
EMailSession *session;
gchar *custom_dir;
@ -239,7 +242,30 @@ mail_capplet_shell_construct (MailCappletShell *shell, gint socket_id, gboolean
camel_provider_init ();
shell->priv->backend = g_object_new (E_TYPE_MAIL_BACKEND, NULL);
eshell = e_shell_get_default ();
if (eshell == NULL) {
GError *error = NULL;
eshell = g_initable_new (
E_TYPE_SHELL, NULL, &error,
"application-id", "org.gnome.Evolution",
"flags", 0,
"geometry", NULL,
"module-directory", EVOLUTION_MODULEDIR,
"meego-mode", FALSE,
"express-mode", FALSE,
"small-screen-mode", FALSE,
"online", FALSE,
NULL);
if (error != NULL)
g_error ("%s", error->message);
e_shell_load_modules (eshell);
}
shell->priv->backend = E_MAIL_BACKEND (e_shell_get_backend_by_name (eshell, "mail"));
session = e_mail_backend_get_session (shell->priv->backend);
shell->view = mail_view_new ();