diff options
author | Milan Crha <mcrha@redhat.com> | 2012-09-05 21:41:16 +0800 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2012-09-05 21:42:03 +0800 |
commit | 511acab89a83114aad35e9c6f76a8f284907dab9 (patch) | |
tree | 4455567f90a3708dc43b172491388daf0f8c590e /libemail-engine/e-mail-utils.c | |
parent | 86c5e71225cda76616a5a5d5cfba46b84351b863 (diff) | |
download | gsoc2013-evolution-511acab89a83114aad35e9c6f76a8f284907dab9.tar.gz gsoc2013-evolution-511acab89a83114aad35e9c6f76a8f284907dab9.tar.zst gsoc2013-evolution-511acab89a83114aad35e9c6f76a8f284907dab9.zip |
Bug #682425 - Can do network operations on disabled accounts
Diffstat (limited to 'libemail-engine/e-mail-utils.c')
-rw-r--r-- | libemail-engine/e-mail-utils.c | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/libemail-engine/e-mail-utils.c b/libemail-engine/e-mail-utils.c index d842b35fdb..8f91971866 100644 --- a/libemail-engine/e-mail-utils.c +++ b/libemail-engine/e-mail-utils.c @@ -1176,7 +1176,8 @@ second_preference: for (iter = list; iter != NULL; iter = g_list_next (iter)) { ESource *temp = E_SOURCE (iter->data); - if (mail_account_in_recipients (registry, temp, recipients)) { + if (em_utils_is_source_enabled_with_parents (registry, temp) && + mail_account_in_recipients (registry, temp, recipients)) { source = g_object_ref (temp); break; } @@ -1272,6 +1273,41 @@ em_utils_ref_mail_identity_for_store (ESourceRegistry *registry, return source; } +gboolean +em_utils_is_source_enabled_with_parents (ESourceRegistry *registry, + ESource *source) +{ + ESource *parent; + const gchar *parent_uid; + + g_return_val_if_fail (registry != NULL, FALSE); + g_return_val_if_fail (source != NULL, FALSE); + + if (!e_source_get_enabled (source)) + return FALSE; + + parent = g_object_ref (source); + while (parent_uid = e_source_get_parent (parent), parent_uid) { + ESource *next = e_source_registry_ref_source (registry, parent_uid); + + if (!next) + break; + + g_object_unref (parent); + + if (!e_source_get_enabled (next)) { + g_object_unref (next); + return FALSE; + } + + parent = next; + } + + g_object_unref (parent); + + return TRUE; +} + /** * em_utils_uids_free: * @uids: array of uids |