[evolution/gnome-3-8] Fix sidebar message counts for real Junk / Trash folders.



commit 49a1fea6d2ce5f9ed5475e6d19bf7fe7337c57db
Author: Matthew Barnes <mbarnes redhat com>
Date:   Sat Aug 3 10:41:42 2013 +0200

    Fix sidebar message counts for real Junk / Trash folders.
    
    (cherry picked from commit 20a97f4d617ed15d752c127c4bbe3d1e2e5bbba9)

 modules/mail/e-mail-shell-view-private.c |   42 +++++++++++++++++++++--------
 1 files changed, 30 insertions(+), 12 deletions(-)
---
diff --git a/modules/mail/e-mail-shell-view-private.c b/modules/mail/e-mail-shell-view-private.c
index 6373e57..e64069a 100644
--- a/modules/mail/e-mail-shell-view-private.c
+++ b/modules/mail/e-mail-shell-view-private.c
@@ -1024,29 +1024,47 @@ e_mail_shell_view_update_sidebar (EMailShellView *mail_shell_view)
                        buffer, ngettext ("%d selected, ", "%d selected, ",
                        uids->len), uids->len);
 
-       if (CAMEL_IS_VTRASH_FOLDER (folder)) {
-               CamelVTrashFolder *trash_folder;
-
-               trash_folder = (CamelVTrashFolder *) folder;
-
-               /* "Trash" folder */
-               if (trash_folder->type == CAMEL_VTRASH_FOLDER_TRASH)
+       /* "Trash" folder (virtual or real) */
+       if (folder->folder_flags & CAMEL_FOLDER_IS_TRASH) {
+               if (CAMEL_IS_VTRASH_FOLDER (folder)) {
+                       /* For a virtual Trash folder, count
+                        * the messages marked for deletion. */
                        g_string_append_printf (
                                buffer, ngettext ("%d deleted",
                                "%d deleted", num_deleted), num_deleted);
+               } else {
+                       /* For a regular Trash folder, just
+                        * count the visible messages.
+                        *
+                        * XXX Open question: what to do about messages
+                        *     marked for deletion in Trash?  Probably
+                        *     this is the wrong question to be asking
+                        *     anyway.  Deleting a message in a real
+                        *     Trash should permanently expunge the
+                        *     message (if the server supports that),
+                        *     which would eliminate this corner case. */
+                       if (!e_mail_reader_get_hide_deleted (reader))
+                               num_visible += num_deleted;
+
+                       g_string_append_printf (
+                               buffer, ngettext ("%d deleted",
+                               "%d deleted", num_visible), num_visible);
+               }
 
-               /* "Junk" folder (hide deleted messages) */
-               else if (e_mail_reader_get_hide_deleted (reader))
+       /* "Junk" folder (virtual or real) */
+       } else if (folder->folder_flags & CAMEL_FOLDER_IS_JUNK) {
+               if (e_mail_reader_get_hide_deleted (reader)) {
+                       /* Junk folder with deleted messages hidden. */
                        g_string_append_printf (
                                buffer, ngettext ("%d junk",
                                "%d junk", num_junked_not_deleted),
                                num_junked_not_deleted);
-
-               /* "Junk" folder (show deleted messages) */
-               else
+               } else {
+                       /* Junk folder with deleted messages visible. */
                        g_string_append_printf (
                                buffer, ngettext ("%d junk", "%d junk",
                                num_junked), num_junked);
+               }
 
        /* "Drafts" folder */
        } else if (em_utils_folder_is_drafts (registry, folder)) {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]