aboutsummaryrefslogtreecommitdiffstats
path: root/mail/e-mail-ui-session.c
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2012-04-20 21:08:17 +0800
committerMilan Crha <mcrha@redhat.com>2012-04-20 21:08:17 +0800
commit61a15e4d9dd303c23b6e44af9d084e3f3c609192 (patch)
tree37795acabe923f9ec5da461736ba7725e72b3806 /mail/e-mail-ui-session.c
parent88005e204cac7cf6cdc2203d1e1e238708b07b83 (diff)
downloadgsoc2013-evolution-61a15e4d9dd303c23b6e44af9d084e3f3c609192.tar
gsoc2013-evolution-61a15e4d9dd303c23b6e44af9d084e3f3c609192.tar.gz
gsoc2013-evolution-61a15e4d9dd303c23b6e44af9d084e3f3c609192.tar.bz2
gsoc2013-evolution-61a15e4d9dd303c23b6e44af9d084e3f3c609192.tar.lz
gsoc2013-evolution-61a15e4d9dd303c23b6e44af9d084e3f3c609192.tar.xz
gsoc2013-evolution-61a15e4d9dd303c23b6e44af9d084e3f3c609192.tar.zst
gsoc2013-evolution-61a15e4d9dd303c23b6e44af9d084e3f3c609192.zip
Bug #668481 - Account order is not remembered
Diffstat (limited to 'mail/e-mail-ui-session.c')
-rw-r--r--mail/e-mail-ui-session.c62
1 files changed, 31 insertions, 31 deletions
diff --git a/mail/e-mail-ui-session.c b/mail/e-mail-ui-session.c
index fd9a4a94f2..ee0b77cfe3 100644
--- a/mail/e-mail-ui-session.c
+++ b/mail/e-mail-ui-session.c
@@ -78,8 +78,6 @@
(G_TYPE_INSTANCE_GET_PRIVATE \
((obj), E_TYPE_MAIL_UI_SESSION, EMailUISessionPrivate))
-typedef struct _SourceContext SourceContext;
-
struct _EMailUISessionPrivate {
FILE *filter_logfile;
EMailAccountStore *account_store;
@@ -87,6 +85,8 @@ struct _EMailUISessionPrivate {
EAccountList *account_list;
gulong account_changed_handler_id;
+
+ guint update_services_id;
};
enum {
@@ -108,11 +108,6 @@ G_DEFINE_TYPE_WITH_CODE (
E_TYPE_MAIL_SESSION,
G_IMPLEMENT_INTERFACE (E_TYPE_EXTENSIBLE, NULL))
-struct _SourceContext {
- EMailUISession *session;
- CamelService *service;
-};
-
/* Support for CamelSession.alert_user() *************************************/
static gpointer user_message_dialog;
@@ -463,18 +458,6 @@ main_get_filter_driver (CamelSession *session,
}
static void
-source_context_free (SourceContext *context)
-{
- if (context->session != NULL)
- g_object_unref (context->session);
-
- if (context->service != NULL)
- g_object_unref (context->service);
-
- g_slice_free (SourceContext, context);
-}
-
-static void
mail_ui_session_dispose (GObject *object)
{
EMailUISessionPrivate *priv;
@@ -613,7 +596,6 @@ mail_ui_session_constructed (GObject *object)
account_list, "account-changed",
G_CALLBACK (mail_ui_session_account_changed_cb), session);
priv->account_changed_handler_id = handler_id;
-
}
static gint
@@ -702,12 +684,31 @@ mail_ui_session_get_property (GObject *object,
}
static gboolean
-mail_ui_session_add_service_cb (SourceContext *context)
+mail_ui_session_update_services_cb (EMailUISession *mail_session)
{
EMailAccountStore *store;
+ GList *list, *iter;
+
+ g_return_val_if_fail (mail_session != NULL, FALSE);
+
+ mail_session->priv->update_services_id = 0;
+
+ store = e_mail_ui_session_get_account_store (mail_session);
+ e_mail_account_store_reorder_freeze (store);
+
+ list = camel_session_list_services (CAMEL_SESSION (mail_session));
+ for (iter = list; iter; iter = iter->next) {
+ CamelService *service = iter->data;
+
+ if (!service || !CAMEL_IS_STORE (service))
+ continue;
+
+ if (!e_mail_account_store_has_service (store, service))
+ e_mail_account_store_add_service (store, service);
+ }
- store = e_mail_ui_session_get_account_store (context->session);
- e_mail_account_store_add_service (store, context->service);
+ g_list_free (list);
+ e_mail_account_store_reorder_thaw (store);
return FALSE;
}
@@ -729,16 +730,15 @@ mail_ui_session_add_service (CamelSession *session,
* from an idle callback so the service has a chance to
* fully initialize first. */
if (CAMEL_IS_STORE (service)) {
- SourceContext *context;
+ EMailUISession *mail_session = E_MAIL_UI_SESSION (session);
- context = g_slice_new0 (SourceContext);
- context->session = g_object_ref (session);
- context->service = g_object_ref (service);
+ g_return_val_if_fail (mail_session != NULL, service);
- g_idle_add_full (
- G_PRIORITY_DEFAULT_IDLE,
- (GSourceFunc) mail_ui_session_add_service_cb,
- context, (GDestroyNotify) source_context_free);
+ if (mail_session->priv->update_services_id == 0)
+ mail_session->priv->update_services_id = g_idle_add_full (
+ G_PRIORITY_DEFAULT_IDLE,
+ (GSourceFunc) mail_ui_session_update_services_cb,
+ g_object_ref (session), g_object_unref);
}
return service;