[evolution/wip/gsettings] Bug #632580 - Freezes UI on account disable



commit a79fc9ee8cfee79b61e22d8267b233bc2499e3f9
Author: Milan Crha <mcrha redhat com>
Date:   Wed Nov 3 15:35:11 2010 +0100

    Bug #632580 - Freezes UI on account disable

 mail/e-mail-store.c |    3 +-
 mail/mail-ops.c     |   59 +++++++++++++++++++++++++++++++++++++++++++++++++++
 mail/mail-ops.h     |    2 +
 3 files changed, 63 insertions(+), 1 deletions(-)
---
diff --git a/mail/e-mail-store.c b/mail/e-mail-store.c
index b23e6f2..fdba2cf 100644
--- a/mail/e-mail-store.c
+++ b/mail/e-mail-store.c
@@ -32,6 +32,7 @@
 #include "mail/em-folder-tree-model.h"
 #include "mail/mail-folder-cache.h"
 #include "mail/mail-mt.h"
+#include "mail/mail-ops.h"
 
 typedef struct _StoreInfo StoreInfo;
 
@@ -367,7 +368,7 @@ e_mail_store_remove (EMailSession *session,
 	default_model = em_folder_tree_model_get_default ();
 	em_folder_tree_model_remove_store (default_model, store);
 
-	camel_service_disconnect_sync (CAMEL_SERVICE (store), TRUE, NULL);
+	mail_disconnect_store (store);
 
 	g_object_unref (store);
 }
diff --git a/mail/mail-ops.c b/mail/mail-ops.c
index af045c6..3da4f7a 100644
--- a/mail/mail-ops.c
+++ b/mail/mail-ops.c
@@ -2540,3 +2540,62 @@ mail_check_service (EMailSession *session,
 
 	return id;
 }
+
+/* ---------------------------------------------------------------------------------- */
+
+struct _disconnect_msg {
+	MailMsg base;
+
+	CamelStore *store;
+};
+
+static gchar *
+disconnect_service_desc (struct _disconnect_msg *m)
+{
+	gchar *name, *res;
+
+	name = camel_service_get_name (CAMEL_SERVICE (m->store), TRUE);
+	res = g_strdup_printf (_("Disconnecting %s"), name ? name : "");
+	g_free (name);
+
+	return res;
+}
+
+static void
+disconnect_service_exec (struct _disconnect_msg *m,
+                    GCancellable *cancellable,
+                    GError **error)
+{
+	camel_service_disconnect_sync (CAMEL_SERVICE (m->store), TRUE, error);
+}
+
+static void
+disconnect_service_free (struct _disconnect_msg *m)
+{
+	g_object_unref (m->store);
+}
+
+static MailMsgInfo disconnect_service_info = {
+	sizeof (struct _disconnect_msg),
+	(MailMsgDescFunc) disconnect_service_desc,
+	(MailMsgExecFunc) disconnect_service_exec,
+	(MailMsgDoneFunc) NULL,
+	(MailMsgFreeFunc) disconnect_service_free
+};
+
+gint
+mail_disconnect_store (CamelStore *store)
+{
+	struct _disconnect_msg *m;
+	gint id;
+
+	g_return_val_if_fail (store != NULL, -1);
+
+	m = mail_msg_new (&disconnect_service_info);
+	m->store = g_object_ref (store);
+
+	id = m->base.seq;
+	mail_msg_unordered_push (m);
+
+	return id;
+}
diff --git a/mail/mail-ops.h b/mail/mail-ops.h
index faeae35..77ce991 100644
--- a/mail/mail-ops.h
+++ b/mail/mail-ops.h
@@ -163,6 +163,8 @@ gint		mail_check_service		(EMailSession *session,
 						 void (*done)(const gchar *url, CamelProviderType type, GList *authtypes, gpointer data),
 						 gpointer data);
 
+gint mail_disconnect_store (CamelStore *store);
+
 G_END_DECLS
 
 #endif /* MAIL_OPS_H */



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