diff -up evolution-ews-3.22.6/src/collection/e-ews-backend.c.subsources-enabled-state evolution-ews-3.22.6/src/collection/e-ews-backend.c
--- evolution-ews-3.22.6/src/collection/e-ews-backend.c.subsources-enabled-state 2016-04-20 22:43:15.000000000 +0200
+++ evolution-ews-3.22.6/src/collection/e-ews-backend.c 2017-03-24 14:50:15.159481455 +0100
@@ -170,6 +170,38 @@ ews_backend_get_settings (EEwsBackend *b
return CAMEL_EWS_SETTINGS (settings);
}
+static void
+ews_backend_update_enabled (ESource *data_source,
+ ESource *collection_source)
+{
+ ESourceCollection *collection_extension = NULL;
+ gboolean part_enabled = TRUE;
+
+ g_return_if_fail (E_IS_SOURCE (data_source));
+
+ if (!collection_source || !e_source_get_enabled (collection_source)) {
+ e_source_set_enabled (data_source, FALSE);
+ return;
+ }
+
+ if (e_source_has_extension (collection_source, E_SOURCE_EXTENSION_COLLECTION))
+ collection_extension = e_source_get_extension (collection_source, E_SOURCE_EXTENSION_COLLECTION);
+
+ if (e_source_has_extension (data_source, E_SOURCE_EXTENSION_CALENDAR) ||
+ e_source_has_extension (data_source, E_SOURCE_EXTENSION_TASK_LIST) ||
+ e_source_has_extension (data_source, E_SOURCE_EXTENSION_MEMO_LIST)) {
+ part_enabled = !collection_extension || e_source_collection_get_calendar_enabled (collection_extension);
+ } else if (e_source_has_extension (data_source, E_SOURCE_EXTENSION_ADDRESS_BOOK)) {
+ part_enabled = !collection_extension || e_source_collection_get_contacts_enabled (collection_extension);
+ } else if (e_source_has_extension (data_source, E_SOURCE_EXTENSION_MAIL_ACCOUNT) ||
+ e_source_has_extension (data_source, E_SOURCE_EXTENSION_MAIL_IDENTITY) ||
+ e_source_has_extension (data_source, E_SOURCE_EXTENSION_MAIL_TRANSPORT)) {
+ part_enabled = !collection_extension || e_source_collection_get_mail_enabled (collection_extension);
+ }
+
+ e_source_set_enabled (data_source, part_enabled);
+}
+
static ESource *
ews_backend_new_child (EEwsBackend *backend,
EEwsFolder *folder)
@@ -188,7 +220,6 @@ ews_backend_new_child (EEwsBackend *back
display_name = e_ews_folder_get_name (folder);
e_source_set_display_name (source, display_name);
- e_source_set_enabled (source, TRUE);
switch (e_ews_folder_get_folder_type (folder)) {
case E_EWS_FOLDER_TYPE_CALENDAR:
@@ -210,6 +241,7 @@ ews_backend_new_child (EEwsBackend *back
extension = e_source_get_extension (source, extension_name);
e_source_backend_set_backend_name (
E_SOURCE_BACKEND (extension), "ews");
+ ews_backend_update_enabled (source, e_backend_get_source (E_BACKEND (backend)));
if (e_ews_folder_get_folder_type (folder) != E_EWS_FOLDER_TYPE_CONTACTS &&
!e_source_has_extension (source, E_SOURCE_EXTENSION_EWS_FOLDER) &&
@@ -378,9 +410,22 @@ ews_backend_add_gal_source (EEwsBackend
const gchar *oal_id = NULL;
const gchar *uid;
gchar *oal_selected;
+ gboolean can_enable;
settings = ews_backend_get_settings (backend);
collection_backend = E_COLLECTION_BACKEND (backend);
+ source = e_backend_get_source (E_BACKEND (backend));
+ if (source) {
+ ESourceCollection *collection_extension = NULL;
+
+ if (e_source_has_extension (source, E_SOURCE_EXTENSION_COLLECTION))
+ collection_extension = e_source_get_extension (source, E_SOURCE_EXTENSION_COLLECTION);
+
+ can_enable = !collection_extension || (e_source_get_enabled (source) &&
+ e_source_collection_get_contacts_enabled (collection_extension));
+ } else {
+ can_enable = FALSE;
+ }
gal_uid = camel_ews_settings_get_gal_uid (settings);
@@ -390,7 +435,7 @@ ews_backend_add_gal_source (EEwsBackend
g_object_unref (server);
if (source != NULL) {
- e_source_set_enabled (source, TRUE);
+ e_source_set_enabled (source, can_enable);
g_object_unref (source);
return;
}
@@ -427,7 +472,7 @@ ews_backend_add_gal_source (EEwsBackend
source = e_collection_backend_new_child (
collection_backend, oal_id);
- e_source_set_enabled (source, TRUE);
+ e_source_set_enabled (source, can_enable);
e_source_set_display_name (source, display_name);
@@ -507,7 +552,7 @@ add_remote_sources (EEwsBackend *backend
E_SERVER_SIDE_SOURCE (source), TRUE);
e_server_side_source_set_remote_deletable (
E_SERVER_SIDE_SOURCE (source), TRUE);
- e_source_set_enabled (source, TRUE);
+ ews_backend_update_enabled (source, e_backend_get_source (E_BACKEND (backend)));
e_source_registry_server_add_source (registry, source);
} else {
GError *error = NULL;
@@ -635,7 +680,7 @@ ews_backend_claim_old_resources (ECollec
for (iter = old_resources; iter; iter = g_list_next (iter)) {
ESource *source = iter->data;
- e_source_set_enabled (source, TRUE);
+ ews_backend_update_enabled (source, e_backend_get_source (E_BACKEND (backend)));
e_source_registry_server_add_source (registry, source);
}