diff options
author | Jeffrey Stedfast <fejj@ximian.com> | 2002-10-05 02:12:20 +0800 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2002-10-05 02:12:20 +0800 |
commit | e23ff89a6059d074b6dfadab39b223271c05db43 (patch) | |
tree | 572887c3e6eaecbd7fbb80265c650b32540806db | |
parent | a57815af6b1c0c3d0548fa1492f3c061018457fe (diff) | |
download | gsoc2013-evolution-e23ff89a6059d074b6dfadab39b223271c05db43.tar.gz gsoc2013-evolution-e23ff89a6059d074b6dfadab39b223271c05db43.tar.zst gsoc2013-evolution-e23ff89a6059d074b6dfadab39b223271c05db43.zip |
Don't default 'me' to the source account until after we've tried to detect
2002-10-02 Jeffrey Stedfast <fejj@ximian.com>
* mail-callbacks.c (mail_generate_reply): Don't default 'me' to
the source account until after we've tried to detect the account
based on recipients. When adding accounts to the account hash, if
any accounts have identical email addresses, the ones that are
enabled take precedence over ones that aren't. This will hopefully
make everyone happy with reply account picking. Fixes bug #31693.
svn path=/trunk/; revision=18326
-rw-r--r-- | mail/ChangeLog | 9 | ||||
-rw-r--r-- | mail/mail-callbacks.c | 49 |
2 files changed, 45 insertions, 13 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index cebf2fe535..0e6800a93a 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,12 @@ +2002-10-02 Jeffrey Stedfast <fejj@ximian.com> + + * mail-callbacks.c (mail_generate_reply): Don't default 'me' to + the source account until after we've tried to detect the account + based on recipients. When adding accounts to the account hash, if + any accounts have identical email addresses, the ones that are + enabled take precedence over ones that aren't. This will hopefully + make everyone happy with reply account picking. Fixes bug #31693. + 2002-10-01 Larry Ewing <lewing@ximian.com> * mail-display.c (drag_data_get_cb): add support for dragging the diff --git a/mail/mail-callbacks.c b/mail/mail-callbacks.c index eef61fde6a..06342a17d9 100644 --- a/mail/mail-callbacks.c +++ b/mail/mail-callbacks.c @@ -1008,7 +1008,7 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char const char *name = NULL, *address = NULL, *source = NULL; const char *message_id, *references, *reply_addr = NULL; char *text = NULL, *subject, date_str[100], *format; - const MailConfigAccount *account, *me = NULL; + const MailConfigAccount *def, *account, *me = NULL; const GSList *l, *accounts = NULL; GHashTable *account_hash = NULL; GList *to = NULL, *cc = NULL; @@ -1035,13 +1035,37 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char /* Set the recipients */ accounts = mail_config_get_accounts (); - account_hash = g_hash_table_new (g_strcase_hash, g_strcase_equal); + + /* add the default account to the hash first */ + if ((def = mail_config_get_default_account ())) { + if (def->id->address) + g_hash_table_insert (account_hash, (char *) def->id->address, (void *) def); + } + l = accounts; while (l) { account = l->data; - if (account->id->address) - g_hash_table_insert (account_hash, (char *) account->id->address, (void *) account); + + if (account->id->address) { + const MailConfigAccount *acnt; + + /* Accounts with identical email addresses that are enabled + * take precedence over the accounts that aren't. If all + * accounts with matching email addresses are disabled, then + * the first one in the list takes precedence. The default + * account always takes precedence no matter what. + */ + acnt = g_hash_table_lookup (account_hash, account->id->address); + if (acnt && acnt != def && !acnt->source->enabled && account->source->enabled) { + g_hash_table_remove (account_hash, acnt->id->address); + acnt = NULL; + } + + if (!acnt) + g_hash_table_insert (account_hash, (char *) account->id->address, (void *) account); + } + l = l->next; } @@ -1050,11 +1074,6 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char mail_ignore_address (composer, to_addrs); mail_ignore_address (composer, cc_addrs); - /* default 'me' to the source account... */ - source = camel_mime_message_get_source (message); - if (source) - me = mail_config_get_account_by_source_url (source); - determine_recipients: if (mode == REPLY_LIST) { CamelMessageInfo *info; @@ -1112,8 +1131,7 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char } } - if (!me) - me = guess_me (to_addrs, cc_addrs, account_hash); + me = guess_me (to_addrs, cc_addrs, account_hash); } else { GHashTable *rcpt_hash; EDestination *dest; @@ -1153,8 +1171,7 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char cc = g_list_remove_link (cc, to); } } else { - if (!me) - me = guess_me (to_addrs, cc_addrs, account_hash); + me = guess_me (to_addrs, cc_addrs, account_hash); } g_hash_table_destroy (rcpt_hash); @@ -1162,6 +1179,12 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char g_hash_table_destroy (account_hash); + if (!me) { + /* default 'me' to the source account... */ + if ((source = camel_mime_message_get_source (message))) + me = mail_config_get_account_by_source_url (source); + } + /* set body text here as we want all ignored words to take effect */ switch (mail_config_get_default_reply_style ()) { case MAIL_CONFIG_REPLY_DO_NOT_QUOTE: |