Bug #678400 - ECollectionBackend populates disabled accounts
authorMilan Crha <mcrha@redhat.com>
Tue, 23 Oct 2012 18:15:09 +0000 (20:15 +0200)
committerMilan Crha <mcrha@redhat.com>
Tue, 23 Oct 2012 18:15:56 +0000 (20:15 +0200)
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;
        }
 }