2008-03-12 [paul] 3.3.1cvs21
authorPaul Mangan <paul@claws-mail.org>
Wed, 12 Mar 2008 06:22:29 +0000 (06:22 +0000)
committerPaul Mangan <paul@claws-mail.org>
Wed, 12 Mar 2008 06:22:29 +0000 (06:22 +0000)
* src/folder.c
* src/folder.h
* src/mainwindow.c
* src/procmsg.c
* src/summaryview.c
* src/plugins/trayicon/trayicon.c
add tooltip with extended folder stats

ChangeLog
PATCHSETS
configure.ac
src/folder.c
src/folder.h
src/mainwindow.c
src/plugins/trayicon/trayicon.c
src/procmsg.c
src/summaryview.c

index 586ecfa..532dd86 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2008-03-12 [paul]      3.3.1cvs21
+
+       * src/folder.c
+       * src/folder.h
+       * src/mainwindow.c
+       * src/procmsg.c
+       * src/summaryview.c
+       * src/plugins/trayicon/trayicon.c
+               add tooltip with extended folder stats
+
 2008-03-10 [colin]     3.3.1cvs20
 
        * src/common/xml.c
index ced8b46..8a3b0ec 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.274.2.234 -r 1.274.2.235 src/mainwindow.c;  ) > 3.3.1cvs18.patchset
 ( cvs diff -u -r 1.274.2.235 -r 1.274.2.236 src/mainwindow.c;  ) > 3.3.1cvs19.patchset
 ( cvs diff -u -r 1.1.4.23 -r 1.1.4.24 src/common/xml.c;  ) > 3.3.1cvs20.patchset
+( cvs diff -u -r 1.213.2.178 -r 1.213.2.179 src/folder.c;  cvs diff -u -r 1.87.2.56 -r 1.87.2.57 src/folder.h;  cvs diff -u -r 1.274.2.236 -r 1.274.2.237 src/mainwindow.c;  cvs diff -u -r 1.150.2.107 -r 1.150.2.108 src/procmsg.c;  cvs diff -u -r 1.395.2.358 -r 1.395.2.359 src/summaryview.c;  cvs diff -u -r 1.14.2.60 -r 1.14.2.61 src/plugins/trayicon/trayicon.c;  ) > 3.3.1cvs21.patchset
index 245261d..49e79ee 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=3
 MICRO_VERSION=1
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=20
+EXTRA_VERSION=21
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index dc39fce..02e4b4a 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail team
+ * Copyright (C) 1999-2008 Hiroyuki Yamamoto and the Claws Mail team
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -352,6 +352,11 @@ FolderItem *folder_item_new(Folder *folder, const gchar *name, const gchar *path
        item->unreadmarked_msgs = 0;
        item->marked_msgs = 0;
        item->total_msgs = 0;
+       item->replied_msgs = 0;
+       item->forwarded_msgs = 0;
+       item->locked_msgs = 0;
+       item->ignored_msgs = 0;
+       item->watched_msgs = 0;
        item->order = 0;
        item->last_num = -1;
        item->cache = NULL;
@@ -534,6 +539,16 @@ void folder_item_set_xml(Folder *folder, FolderItem *item, XMLTag *tag)
                        item->unreadmarked_msgs = atoi(attr->value);
                else if (!strcmp(attr->name, "marked"))
                        item->marked_msgs = atoi(attr->value);
+               else if (!strcmp(attr->name, "replied"))
+                       item->replied_msgs = atoi(attr->value);
+               else if (!strcmp(attr->name, "forwarded"))
+                       item->forwarded_msgs = atoi(attr->value);
+               else if (!strcmp(attr->name, "locked"))
+                       item->locked_msgs = atoi(attr->value);
+               else if (!strcmp(attr->name, "ignored"))
+                       item->ignored_msgs = atoi(attr->value);
+               else if (!strcmp(attr->name, "watched"))
+                       item->watched_msgs = atoi(attr->value);
                else if (!strcmp(attr->name, "order"))
                        item->order = atoi(attr->value);
                else if (!strcmp(attr->name, "total"))
@@ -649,6 +664,11 @@ XMLTag *folder_item_get_xml(Folder *folder, FolderItem *item)
        xml_tag_add_attr(tag, xml_attr_new_int("unreadmarked", item->unreadmarked_msgs));
        xml_tag_add_attr(tag, xml_attr_new_int("marked", item->marked_msgs));
        xml_tag_add_attr(tag, xml_attr_new_int("total", item->total_msgs));
+       xml_tag_add_attr(tag, xml_attr_new_int("replied", item->replied_msgs));
+       xml_tag_add_attr(tag, xml_attr_new_int("forwarded", item->forwarded_msgs));
+       xml_tag_add_attr(tag, xml_attr_new_int("locked", item->locked_msgs));
+       xml_tag_add_attr(tag, xml_attr_new_int("ignore", item->ignored_msgs));
+       xml_tag_add_attr(tag, xml_attr_new_int("watched", item->watched_msgs));
        xml_tag_add_attr(tag, xml_attr_new_int("order", item->order));
 
        if (item->account)
@@ -989,6 +1009,11 @@ struct TotalMsgCount
        guint unreadmarked_msgs;
        guint marked_msgs;
        guint total_msgs;
+       guint replied_msgs;
+       guint forwarded_msgs;
+       guint locked_msgs;
+       guint ignored_msgs;
+       guint watched_msgs;
 };
 
 struct FuncToAllFoldersData
@@ -1040,6 +1065,11 @@ static void folder_count_total_msgs_func(FolderItem *item, gpointer data)
        count->unreadmarked_msgs += item->unreadmarked_msgs;
        count->marked_msgs += item->marked_msgs;
        count->total_msgs += item->total_msgs;
+       count->replied_msgs += item->replied_msgs;
+       count->forwarded_msgs += item->forwarded_msgs;
+       count->locked_msgs += item->locked_msgs;
+       count->ignored_msgs += item->ignored_msgs;
+       count->watched_msgs += item->watched_msgs;
 }
 
 struct TotalMsgStatus
@@ -1151,11 +1181,16 @@ gchar *folder_get_status(GPtrArray *folders, gboolean full)
 
 void folder_count_total_msgs(guint *new_msgs, guint *unread_msgs, 
                             guint *unreadmarked_msgs, guint *marked_msgs,
-                            guint *total_msgs)
+                            guint *total_msgs, guint *replied_msgs,
+                            guint *forwarded_msgs, guint *locked_msgs,
+                            guint *ignored_msgs, guint *watched_msgs)
 {
        struct TotalMsgCount count;
 
-       count.new_msgs = count.unread_msgs = count.unreadmarked_msgs = count.total_msgs = 0;
+       count.new_msgs = count.unread_msgs = count.unreadmarked_msgs = 0;
+       count.total_msgs = count.replied_msgs = count.forwarded_msgs = 0;
+       count.locked_msgs = count.ignored_msgs = count.watched_msgs = 0;
+       count.marked_msgs = 0;
 
        debug_print("Counting total number of messages...\n");
 
@@ -1166,6 +1201,11 @@ void folder_count_total_msgs(guint *new_msgs, guint *unread_msgs,
        *unreadmarked_msgs = count.unreadmarked_msgs;
        *marked_msgs = count.marked_msgs;
        *total_msgs = count.total_msgs;
+       *replied_msgs = count.replied_msgs;
+       *forwarded_msgs = count.forwarded_msgs;
+       *locked_msgs = count.locked_msgs;
+       *ignored_msgs = count.ignored_msgs;
+       *watched_msgs = count.watched_msgs;
 }
 
 Folder *folder_find_from_path(const gchar *path)
@@ -1968,6 +2008,9 @@ gint folder_item_scan_full(FolderItem *item, gboolean filtering)
        GSList *newmsg_list = NULL;
        guint newcnt = 0, unreadcnt = 0, totalcnt = 0;
        guint markedcnt = 0, unreadmarkedcnt = 0;
+       guint repliedcnt = 0, forwardedcnt = 0;
+       guint lockedcnt = 0, ignoredcnt = 0, watchedcnt = 0;
+
        guint cache_max_num, folder_max_num, cache_cur_num, folder_cur_num;
        gboolean update_flags = 0, old_uids_valid = FALSE;
        GHashTable *subject_table = NULL;
@@ -2263,6 +2306,16 @@ gint folder_item_scan_full(FolderItem *item, gboolean filtering)
                        unreadmarkedcnt++;
                if (MSG_IS_MARKED(msginfo->flags))
                        markedcnt++;
+               if (MSG_IS_REPLIED(msginfo->flags))
+                       repliedcnt++;
+               if (MSG_IS_FORWARDED(msginfo->flags))
+                       forwardedcnt++;
+               if (MSG_IS_LOCKED(msginfo->flags))
+                       lockedcnt++;
+               if (MSG_IS_IGNORE_THREAD(msginfo->flags))
+                       ignoredcnt++;
+               if (MSG_IS_WATCH_THREAD(msginfo->flags))
+                       watchedcnt++;
 
                totalcnt++;
 
@@ -2277,7 +2330,10 @@ gint folder_item_scan_full(FolderItem *item, gboolean filtering)
        
        if (item->new_msgs != newcnt || item->unread_msgs != unreadcnt
        ||  item->total_msgs != totalcnt || item->marked_msgs != markedcnt
-       ||  item->unreadmarked_msgs != unreadmarkedcnt) {
+       ||  item->unreadmarked_msgs != unreadmarkedcnt
+       ||  item->replied_msgs != repliedcnt || item->forwarded_msgs != forwardedcnt
+       ||  item->locked_msgs != lockedcnt || item->ignored_msgs != ignoredcnt
+       ||  item->watched_msgs != watchedcnt) {
                update_flags |= F_ITEM_UPDATE_CONTENT;
        }
 
@@ -2286,6 +2342,11 @@ gint folder_item_scan_full(FolderItem *item, gboolean filtering)
        item->total_msgs = totalcnt;
        item->unreadmarked_msgs = unreadmarkedcnt;
        item->marked_msgs = markedcnt;
+       item->replied_msgs = repliedcnt;
+       item->forwarded_msgs = forwardedcnt;
+       item->locked_msgs = lockedcnt;
+       item->ignored_msgs = ignoredcnt;
+       item->watched_msgs = watchedcnt;
 
        update_flags |= F_ITEM_UPDATE_MSGCNT;
 
@@ -2449,6 +2510,9 @@ static void folder_item_read_cache(FolderItem *item)
                        MsgInfoList *list, *cur;
                        guint newcnt = 0, unreadcnt = 0;
                        guint markedcnt = 0, unreadmarkedcnt = 0;
+                       guint repliedcnt = 0, forwardedcnt = 0;
+                       guint lockedcnt = 0, ignoredcnt = 0;
+                       guint watchedcnt = 0;
                        MsgInfo *msginfo;
 
                        item->cache = msgcache_new();
@@ -2468,12 +2532,27 @@ static void folder_item_read_cache(FolderItem *item)
                                        unreadmarkedcnt++;
                                if (MSG_IS_MARKED(msginfo->flags))
                                        markedcnt++;
+                               if (MSG_IS_REPLIED(msginfo->flags))
+                                       repliedcnt++;
+                               if (MSG_IS_FORWARDED(msginfo->flags))
+                                       forwardedcnt++;
+                               if (MSG_IS_LOCKED(msginfo->flags))
+                                       lockedcnt++;
+                               if (MSG_IS_IGNORE_THREAD(msginfo->flags))
+                                       ignoredcnt++;
+                               if (MSG_IS_WATCH_THREAD(msginfo->flags))
+                                       watchedcnt++;
                                procmsg_msginfo_unset_flags(msginfo, MSG_FULLY_CACHED, 0);
                        }
                        item->new_msgs = newcnt;
                        item->unread_msgs = unreadcnt;
                        item->unreadmarked_msgs = unreadmarkedcnt;
                        item->marked_msgs = markedcnt;
+                       item->replied_msgs = repliedcnt;
+                       item->forwarded_msgs = forwardedcnt;
+                       item->locked_msgs = lockedcnt;
+                       item->ignored_msgs = ignoredcnt;
+                       item->watched_msgs = watchedcnt;
                        procmsg_msg_list_free(list);
                } else
                        msgcache_read_mark(item->cache, mark_file);
@@ -2831,6 +2910,16 @@ static void add_msginfo_to_cache(FolderItem *item, MsgInfo *newmsginfo, MsgInfo
                item->unreadmarked_msgs++;
        if (MSG_IS_MARKED(newmsginfo->flags))
                item->marked_msgs++;
+       if (MSG_IS_REPLIED(newmsginfo->flags))
+               item->replied_msgs++;
+       if (MSG_IS_FORWARDED(newmsginfo->flags))
+               item->forwarded_msgs++;
+       if (MSG_IS_LOCKED(newmsginfo->flags))
+               item->locked_msgs++;
+       if (MSG_IS_IGNORE_THREAD(newmsginfo->flags))
+               item->ignored_msgs++;
+       if (MSG_IS_WATCH_THREAD(newmsginfo->flags))
+               item->watched_msgs++;
        item->total_msgs++;
 
        folder_item_update_freeze();
@@ -2859,6 +2948,16 @@ static void remove_msginfo_from_cache(FolderItem *item, MsgInfo *msginfo)
                msginfo->folder->unreadmarked_msgs--;
        if (MSG_IS_MARKED(msginfo->flags))
                item->marked_msgs--;
+       if (MSG_IS_REPLIED(msginfo->flags))
+               item->replied_msgs--;
+       if (MSG_IS_FORWARDED(msginfo->flags))
+               item->forwarded_msgs--;
+       if (MSG_IS_LOCKED(msginfo->flags))
+               item->locked_msgs--;
+       if (MSG_IS_IGNORE_THREAD(msginfo->flags))
+               item->ignored_msgs--;
+       if (MSG_IS_WATCH_THREAD(msginfo->flags))
+               item->watched_msgs--;
 
        msginfo->folder->total_msgs--;
 
@@ -3536,6 +3635,11 @@ gint folder_item_remove_all_msg(FolderItem *item)
                item->unreadmarked_msgs = 0;
                item->marked_msgs = 0;
                item->total_msgs = 0;
+               item->replied_msgs = 0;
+               item->forwarded_msgs = 0;
+               item->locked_msgs = 0;
+               item->ignored_msgs = 0;
+               item->watched_msgs = 0;
                folder_item_update(item, F_ITEM_UPDATE_MSGCNT | F_ITEM_UPDATE_CONTENT);
        }
 
index 0cce8f7..229ce74 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail team
+ * Copyright (C) 1999-2008 Hiroyuki Yamamoto and the Claws Mail team
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -645,6 +645,11 @@ struct _FolderItem
        gint total_msgs;
        gint unreadmarked_msgs;
        gint marked_msgs;
+       gint replied_msgs;
+       gint forwarded_msgs;
+       gint locked_msgs;
+       gint ignored_msgs;
+       gint watched_msgs;
 
        gint order;
 
@@ -770,7 +775,9 @@ void   folder_func_to_all_folders   (FolderItemFunc function,
                                         gpointer data);
 void folder_count_total_msgs(guint *new_msgs, guint *unread_msgs, 
                             guint *unreadmarked_msgs, guint *marked_msgs,
-                            guint *total_msgs);
+                            guint *total_msgs, guint *replied_msgs,
+                            guint *forwarded_msgs, guint *locked_msgs,
+                            guint *ignored_msgs, guint *watched_msgs);
 gchar *folder_get_status       (GPtrArray      *folders,
                                 gboolean        full);
 
index b8b533f..799d782 100644 (file)
@@ -1,6 +1,6 @@
 /*
    Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
-   Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail team
+   Copyright (C) 1999-2008 Hiroyuki Yamamoto and the Claws Mail team
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -1447,9 +1447,12 @@ void mainwindow_maemo_led_set(gboolean state) {
 
 static void led_update(FolderItem *removed_item)
 {
-       guint new, unread, unreadmarked, marked, total;
+       guint new, unread, unreadmarked, marked, total, replied;
+       guint forwarded, locked, ignored, watched;
 
-       folder_count_total_msgs(&new, &unread, &unreadmarked, &marked, &total);
+       folder_count_total_msgs(&new, &unread, &unreadmarked, &marked, &total,
+                               &replied, &forwarded, &locked, &ignored,
+                               &watched);
        if (removed_item) {
                total -= removed_item->total_msgs;
                new -= removed_item->new_msgs;
index bda0cd5..cdbc4f1 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 2003-2007 the Claws Mail Team
+ * Copyright (C) 2003-2008 the Claws Mail Team
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -186,10 +186,13 @@ static void set_trayicon_pixmap(TrayIconType icontype)
 static void update(FolderItem *removed_item)
 {
        guint new, unread, unreadmarked, marked, total;
+       guint replied, forwarded, locked, ignored, watched;
        gchar *buf;
        TrayIconType icontype = TRAYICON_NOTHING;
 
-       folder_count_total_msgs(&new, &unread, &unreadmarked, &marked, &total);
+       folder_count_total_msgs(&new, &unread, &unreadmarked, &marked, &total,
+                               &replied, &forwarded, &locked, &ignored,
+                               &watched);
        if (removed_item) {
                total -= removed_item->total_msgs;
                new -= removed_item->new_msgs;
index c18e2ca..f1fb163 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail team
+ * Copyright (C) 1999-2008 Hiroyuki Yamamoto and the Claws Mail team
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -1842,6 +1842,46 @@ static void update_folder_msg_counts(FolderItem *item, MsgInfo *msginfo, MsgPerm
                procmsg_update_unread_children(msginfo, FALSE);
                item->marked_msgs--;
        }
+
+       if (!(old_flags & MSG_REPLIED) && (new_flags & MSG_REPLIED)) {
+               item->replied_msgs++;
+       }
+
+       if ((old_flags & MSG_REPLIED) && !(new_flags & MSG_REPLIED)) {
+               item->replied_msgs--;
+       }
+
+       if (!(old_flags & MSG_FORWARDED) && (new_flags & MSG_FORWARDED)) {
+               item->forwarded_msgs++;
+       }
+
+       if ((old_flags & MSG_FORWARDED) && !(new_flags & MSG_FORWARDED)) {
+               item->forwarded_msgs--;
+       }
+
+       if (!(old_flags & MSG_LOCKED) && (new_flags & MSG_LOCKED)) {
+               item->locked_msgs++;
+       }
+
+       if ((old_flags & MSG_LOCKED) && !(new_flags & MSG_LOCKED)) {
+               item->locked_msgs--;
+       }
+
+       if ((old_flags & MSG_IGNORE_THREAD) && !(new_flags & MSG_IGNORE_THREAD)) {
+               item->ignored_msgs--;
+       }
+
+       if (!(old_flags & MSG_IGNORE_THREAD) && (new_flags & MSG_IGNORE_THREAD)) {
+               item->ignored_msgs++;
+       }
+
+       if ((old_flags & MSG_WATCH_THREAD) && !(new_flags & MSG_WATCH_THREAD)) {
+               item->watched_msgs--;
+       }
+
+       if (!(old_flags & MSG_WATCH_THREAD) && (new_flags & MSG_WATCH_THREAD)) {
+               item->watched_msgs++;
+       }
 }
 
 void procmsg_msginfo_set_flags(MsgInfo *msginfo, MsgPermFlags perm_flags, MsgTmpFlags tmp_flags)
@@ -1871,7 +1911,7 @@ void procmsg_msginfo_set_flags(MsgInfo *msginfo, MsgPermFlags perm_flags, MsgTmp
                folder_item_change_msg_flags(msginfo->folder, msginfo, perm_flags_new);
 
                update_folder_msg_counts(item, msginfo, perm_flags_old);
-
+               summary_update_unread(mainwindow_get_mainwindow()->summaryview, NULL);
        }
 
        /* Tmp flags handling */
index 398c5b6..94c3d01 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail team
+ * Copyright (C) 1999-2008 Hiroyuki Yamamoto and the Claws Mail team
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -1093,7 +1093,7 @@ static gboolean summaryview_quicksearch_recurse(gpointer data)
 
 static gboolean summary_check_consistency(FolderItem *item, GSList *mlist)
 {
-       int u = 0, n = 0, m = 0, t = 0;
+       int u = 0, n = 0, m = 0, t = 0, r = 0, f = 0, l = 0, i = 0, w = 0;
        GSList *cur;
        START_TIMING("");
        for(cur = mlist ; cur != NULL && cur->data != NULL ; cur = g_slist_next(cur)) {
@@ -1105,11 +1105,26 @@ static gboolean summary_check_consistency(FolderItem *item, GSList *mlist)
                        u++;
                if (MSG_IS_MARKED(msginfo->flags))
                        m++;            
+               if (MSG_IS_REPLIED(msginfo->flags))
+                       r++;
+               if (MSG_IS_FORWARDED(msginfo->flags))
+                       f++;
+               if (MSG_IS_LOCKED(msginfo->flags))
+                       l++;
+               if (MSG_IS_IGNORE_THREAD(msginfo->flags))
+                       i++;
+               if (MSG_IS_WATCH_THREAD(msginfo->flags))
+                       w++;
        }
        if (t != item->total_msgs
        ||  n != item->new_msgs
        ||  u != item->unread_msgs
        ||  m != item->marked_msgs
+       ||  r != item->replied_msgs
+       ||  f != item->forwarded_msgs
+       ||  l != item->locked_msgs
+       ||  i != item->ignored_msgs
+       ||  w != item->watched_msgs
        ||  (m == 0 && item->unreadmarked_msgs != 0)
        ||  item->unreadmarked_msgs < 0) {
                debug_print("Inconsistency\n");
@@ -2416,9 +2431,11 @@ static void summary_status_show(SummaryView *summaryview)
        gchar *itstr;
        GList *rowlist, *cur;
        guint n_selected = 0, n_new = 0, n_unread = 0, n_total = 0;
+       guint n_marked = 0, n_replied = 0, n_forwarded = 0, n_locked = 0, n_ignored = 0, n_watched = 0;
        off_t sel_size = 0, n_size = 0;
        MsgInfo *msginfo;
        gchar *name;
+       gchar *tooltip;
        
        if (!summaryview->folder_item) {
                gtk_label_set_text(GTK_LABEL(summaryview->statlabel_folder), "");
@@ -2453,11 +2470,29 @@ static void summary_status_show(SummaryView *summaryview)
                                        n_new++;
                                if (MSG_IS_UNREAD(msginfo->flags))
                                        n_unread++;
+                               if (MSG_IS_MARKED(msginfo->flags))
+                                       n_marked++;
+                               if (MSG_IS_REPLIED(msginfo->flags))
+                                       n_replied++;
+                               if (MSG_IS_FORWARDED(msginfo->flags))
+                                       n_forwarded++;
+                               if (MSG_IS_LOCKED(msginfo->flags))
+                                       n_locked++;
+                               if (MSG_IS_IGNORE_THREAD(msginfo->flags))
+                                       n_ignored++;
+                               if (MSG_IS_WATCH_THREAD(msginfo->flags))
+                                       n_watched++;
                        }
                }
        } else {
                n_new = summaryview->folder_item->new_msgs;
                n_unread = summaryview->folder_item->unread_msgs;
+               n_marked = summaryview->folder_item->marked_msgs;
+               n_replied = summaryview->folder_item->replied_msgs;
+               n_forwarded = summaryview->folder_item->forwarded_msgs;
+               n_locked = summaryview->folder_item->locked_msgs;
+               n_ignored = summaryview->folder_item->ignored_msgs;
+               n_watched = summaryview->folder_item->watched_msgs;
                n_total = summaryview->folder_item->total_msgs;
                n_size = summaryview->total_size;
        }
@@ -2513,11 +2548,31 @@ static void summary_status_show(SummaryView *summaryview)
                g_free(str);
 
                str = g_strdup_printf(_("%d new, %d unread, %d total (%s)"),
-
                                              n_new, n_unread, n_total,
                                              to_human_readable(n_size));
 
+
                gtk_label_set_text(GTK_LABEL(summaryview->statlabel_msgs), str);
+#if GTK_CHECK_VERSION(2, 12, 0)
+               tooltip = g_strdup_printf(_("<b>Message summary</b>\n"
+                                           "<b>New:</b> %d\n"
+                                           "<b>Unread:</b> %d\n"
+                                           "<b>Total:</b> %d\n"
+                                           "<b>Size:</b> %s\n\n"
+                                           "<b>Marked:</b> %d\n"
+                                           "<b>Replied:</b> %d\n"
+                                           "<b>Forwarded:</b> %d\n"
+                                           "<b>Locked:</b> %d\n"
+                                           "<b>Ignored:</b> %d\n"
+                                           "<b>Watched:</b> %d"),
+                                             n_new, n_unread, n_total,
+                                             to_human_readable(n_size),
+                                             n_marked,n_replied,n_forwarded,
+                                             n_locked,n_ignored,n_watched);
+
+               gtk_widget_set_tooltip_markup(GTK_WIDGET(summaryview->statlabel_msgs),
+                                           tooltip); 
+#endif
                g_free(str);
        } else {
                gchar *ssize, *tsize;
@@ -6431,8 +6486,10 @@ static void summary_selected(GtkCTree *ctree, GtkCTreeNode *row,
                    !MSG_IS_COPY(msginfo->flags)) {
                        if (MSG_IS_MARKED(msginfo->flags)) {
                                summary_unmark_row(summaryview, row);
+                               summary_status_show(summaryview);
                        } else {
                                summary_mark_row(summaryview, row);
+                               summary_status_show(summaryview);
                        }
                }
                break;
@@ -6455,11 +6512,13 @@ static void summary_selected(GtkCTree *ctree, GtkCTreeNode *row,
                break;
        case S_COL_LOCKED:
                if (MSG_IS_LOCKED(msginfo->flags)) {
-                       summary_msginfo_unset_flags(msginfo, MSG_LOCKED, 0);
-                       summary_set_row_marks(summaryview, row);
+                       summary_unlock_row(summaryview, row);
+                       summary_status_show(summaryview);
                }
-               else
+               else {
                        summary_lock_row(summaryview, row);
+                       summary_status_show(summaryview);
+               }
                break;
        default:
                break;
@@ -7392,6 +7451,7 @@ static gboolean summary_update_msg(gpointer source, gpointer data)
 void summary_update_unread(SummaryView *summaryview, FolderItem *removed_item)
 {
        guint new, unread, unreadmarked, marked, total;
+       guint replied, forwarded, locked, ignored, watched;
        static gboolean tips_initialized = FALSE;
 
        if (prefs_common.layout_mode != SMALL_LAYOUT) {
@@ -7404,7 +7464,9 @@ void summary_update_unread(SummaryView *summaryview, FolderItem *removed_item)
                } 
                return;
        }
-       folder_count_total_msgs(&new, &unread, &unreadmarked, &marked, &total);
+       folder_count_total_msgs(&new, &unread, &unreadmarked, &marked, &total,
+                               &replied, &forwarded, &locked, &ignored,
+                               &watched);
        if (removed_item) {
                total -= removed_item->total_msgs;
                new -= removed_item->new_msgs;