[evolution/wip/gsettings] Bug #632580 - Freezes UI on account disable
- From: Rodrigo Moya <rodrigo src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/wip/gsettings] Bug #632580 - Freezes UI on account disable
- Date: Tue, 9 Nov 2010 22:36:47 +0000 (UTC)
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]