aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@ximian.com>2002-10-05 02:12:20 +0800
committerJeffrey Stedfast <fejj@src.gnome.org>2002-10-05 02:12:20 +0800
commite23ff89a6059d074b6dfadab39b223271c05db43 (patch)
tree572887c3e6eaecbd7fbb80265c650b32540806db
parenta57815af6b1c0c3d0548fa1492f3c061018457fe (diff)
downloadgsoc2013-evolution-e23ff89a6059d074b6dfadab39b223271c05db43.tar
gsoc2013-evolution-e23ff89a6059d074b6dfadab39b223271c05db43.tar.gz
gsoc2013-evolution-e23ff89a6059d074b6dfadab39b223271c05db43.tar.bz2
gsoc2013-evolution-e23ff89a6059d074b6dfadab39b223271c05db43.tar.lz
gsoc2013-evolution-e23ff89a6059d074b6dfadab39b223271c05db43.tar.xz
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/ChangeLog9
-rw-r--r--mail/mail-callbacks.c49
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: