From bde9c2bff430b74c3eea7832221e2a8de2fb8272 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 28 Apr 2009 14:29:05 -0400 Subject: =?UTF-8?q?Bug=20579269=20=E2=80=93=20Non=20junk=20option=20(tool?= =?UTF-8?q?=20bar)=20is=20disabled=20in=20junk=20folder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Attempted to sort out the sensitivity logic of the junk actions. --- mail/e-mail-reader.c | 47 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 8 deletions(-) (limited to 'mail') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index dd8e24bd55..c5db73c4f9 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2200,7 +2200,8 @@ e_mail_reader_check_state (EMailReader *reader) gboolean has_undeleted = FALSE; gboolean has_unimportant = FALSE; gboolean has_unread = FALSE; - gboolean draft_or_outbox; + gboolean drafts_or_outbox; + gboolean store_supports_vjunk = FALSE; guint32 state = 0; guint ii; @@ -2211,16 +2212,14 @@ e_mail_reader_check_state (EMailReader *reader) folder_uri = message_list->folder_uri; folder = message_list->folder; - if (folder != NULL) + if (folder != NULL) { store = CAMEL_STORE (folder->parent_store); + store_supports_vjunk = (store->flags & CAMEL_STORE_VJUNK); + } - draft_or_outbox = + drafts_or_outbox = em_utils_folder_is_drafts (folder, folder_uri) || em_utils_folder_is_outbox (folder, folder_uri); - if (!draft_or_outbox && store != NULL) { - has_junk = !(store->flags & CAMEL_STORE_VJUNK); - has_not_junk = TRUE; - } for (ii = 0; ii < uids->len; ii++) { CamelMessageInfo *info; @@ -2238,6 +2237,38 @@ e_mail_reader_check_state (EMailReader *reader) else has_unread = TRUE; + if (drafts_or_outbox) { + has_junk = FALSE; + has_not_junk = FALSE; + } else if (store_supports_vjunk) { + guint32 bitmask; + + /* XXX Strictly speaking, this logic is correct. + * Problem is there's nothing in the message + * list that indicates whether a message is + * already marked "Not Junk". So the user may + * think the "Not Junk" button is enabling and + * disabling itself randomly as he reads mail. */ + + if (flags & CAMEL_MESSAGE_JUNK) + has_junk = TRUE; + if (flags & CAMEL_MESSAGE_NOTJUNK) + has_not_junk = TRUE; + + bitmask = CAMEL_MESSAGE_JUNK | CAMEL_MESSAGE_NOTJUNK; + + /* If neither junk flag is set, the + * message can be marked either way. */ + if ((flags & bitmask) == 0) { + has_junk = TRUE; + has_not_junk = TRUE; + } + + } else { + has_junk = TRUE; + has_not_junk = TRUE; + } + if (flags & CAMEL_MESSAGE_DELETED) has_deleted = TRUE; else @@ -2263,7 +2294,7 @@ e_mail_reader_check_state (EMailReader *reader) state |= E_MAIL_READER_SELECTION_SINGLE; if (uids->len > 1) state |= E_MAIL_READER_SELECTION_MULTIPLE; - if (!draft_or_outbox && uids->len == 1) + if (!drafts_or_outbox && uids->len == 1) state |= E_MAIL_READER_SELECTION_CAN_ADD_SENDER; #if 0 /* FIXME */ if (can_edit) -- cgit v1.2.3