Revert "Revert "Bug #678400 - ECollectionBackend populates disabled accounts""
authorMilan Crha <mcrha@redhat.com>
Fri, 2 Nov 2012 08:24:50 +0000 (09:24 +0100)
committerMilan Crha <mcrha@redhat.com>
Fri, 2 Nov 2012 08:24:50 +0000 (09:24 +0100)
This reverts commit 1c4fb39c131a03428035a2035fca8ea462fc7714,
because the initial revert was a misunderstanding of the change.

libebackend/e-collection-backend.c

index 87b1861..d332093 100644 (file)
@@ -349,6 +349,19 @@ collection_backend_child_is_mail (ESource *child_source)
        return FALSE;
 }
 
+static gboolean
+include_master_source_enabled_transform (GBinding *binding,
+                                        const GValue *source_value,
+                                        GValue *target_value,
+                                        gpointer backend)
+{
+       g_value_set_boolean (target_value,
+               g_value_get_boolean (source_value) &&
+               e_source_get_enabled (e_backend_get_source (backend)));
+
+       return TRUE;
+}
+
 static void
 collection_backend_bind_child_enabled (ECollectionBackend *backend,
                                        ESource *child_source)
@@ -365,26 +378,38 @@ collection_backend_bind_child_enabled (ECollectionBackend *backend,
        extension = e_source_get_extension (collection_source, extension_name);
 
        if (collection_backend_child_is_calendar (child_source)) {
-               g_object_bind_property (
+               g_object_bind_property_full (
                        extension, "calendar-enabled",
                        child_source, "enabled",
-                       G_BINDING_SYNC_CREATE);
+                       G_BINDING_SYNC_CREATE,
+                       include_master_source_enabled_transform,
+                       include_master_source_enabled_transform,
+                       backend,
+                       NULL);
                return;
        }
 
        if (collection_backend_child_is_contacts (child_source)) {
-               g_object_bind_property (
+               g_object_bind_property_full (
                        extension, "contacts-enabled",
                        child_source, "enabled",
-                       G_BINDING_SYNC_CREATE);
+                       G_BINDING_SYNC_CREATE,
+                       include_master_source_enabled_transform,
+                       include_master_source_enabled_transform,
+                       backend,
+                       NULL);
                return;
        }
 
        if (collection_backend_child_is_mail (child_source)) {
-               g_object_bind_property (
+               g_object_bind_property_full (
                        extension, "mail-enabled",
                        child_source, "enabled",
-                       G_BINDING_SYNC_CREATE);
+                       G_BINDING_SYNC_CREATE,
+                       include_master_source_enabled_transform,
+                       include_master_source_enabled_transform,
+                       backend,
+                       NULL);
                return;
        }
 }