show pixmap in mark and locked column headers and a bugfix by adding locked and score...
[claws.git] / src / summaryview.c
index bdb37e6634c140842814a2cba8ffef26d73bc11a..8cb9ab359d0659b1b2b0d26ee34149069caaae13 100644 (file)
@@ -46,6 +46,7 @@
 #include <ctype.h>
 #include <unistd.h>
 #include <sys/stat.h>
+#include <regex.h>
 
 #include "intl.h"
 #include "main.h"
@@ -81,6 +82,7 @@
 #include "scoring.h"
 #include "prefs_folder_item.h"
 #include "filtering.h"
+#include "string_match.h"
 
 #define STATUSBAR_PUSH(mainwin, str) \
 { \
@@ -241,6 +243,9 @@ static void summary_unthread_for_exec_func  (GtkCTree       *ctree,
                                                 GtkCTreeNode   *node,
                                                 gpointer        data);
 
+void summary_simplify_subject(SummaryView *summaryview, gchar * rexp,
+                             GSList * mlist);
+
 void summary_processing(SummaryView *summaryview, GSList * mlist);
 static void summary_filter_func                (GtkCTree               *ctree,
                                         GtkCTreeNode           *node,
@@ -535,6 +540,10 @@ void summary_init(SummaryView *summaryview)
                         &forwardedxpm, &forwardedxpmmask);
        stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_CLIP,
                         &clipxpm, &clipxpmmask);
+       stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_LOCKED,
+                        &lockedxpm, &lockedxpmmask);
+       stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_IGNORETHREAD,
+                        &ignorethreadxpm, &ignorethreadxpmmask);
 
        if (!small_style) {
                small_style = gtk_style_copy
@@ -695,9 +704,8 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item,
                        return FALSE;
                }
                folder_update_op_count();
-       }
-        
-       summary_write_cache(summaryview);
+       } else
+               summary_write_cache(summaryview);
         
        summaryview->folderview->opened = selected_node;
 
@@ -803,6 +811,14 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item,
                mlist = not_killed;
        }
 
+       if (item->prefs->enable_simplify_subject
+           && item->prefs->simplify_subject_regexp != NULL
+           && strlen(item->prefs->simplify_subject_regexp) != 0) {
+               summary_simplify_subject(summaryview, 
+                                        item->prefs->simplify_subject_regexp,
+                                        mlist);
+       }
+
        STATUSBAR_POP(summaryview->mainwin);
 
        /* set ctree and hash table from the msginfo list
@@ -1752,14 +1768,16 @@ static void summary_set_column_titles(SummaryView *summaryview)
                SORT_BY_FROM,
                SORT_BY_DATE,
                SORT_BY_SIZE,
-               SORT_BY_NUMBER
+               SORT_BY_NUMBER,
+               SORT_BY_SCORE,
+               SORT_BY_LOCKED
        };
 
        for (pos = 0; pos < N_SUMMARY_COLS; pos++) {
                type = summaryview->col_state[pos].type;
 
-               single_char = (type == S_COL_MIME ||
-                              type == S_COL_MARK || type == S_COL_UNREAD);
+               /* CLAWS: mime and unread are single char headers */
+               single_char = (type == S_COL_MIME || type == S_COL_UNREAD);
                justify = (type == S_COL_NUMBER || type == S_COL_SIZE)
                        ? GTK_JUSTIFY_RIGHT : GTK_JUSTIFY_LEFT;
 
@@ -1773,6 +1791,11 @@ static void summary_set_column_titles(SummaryView *summaryview)
                        else
                                title = col_label[type];
                        break;
+               /* CLAWS: dummies for mark and locked headers */        
+               case S_COL_MARK:        
+               case S_COL_LOCKED:
+                       title = "";
+                       break;
                default:
                        title = gettext(col_label[type]);
                }
@@ -1788,8 +1811,17 @@ static void summary_set_column_titles(SummaryView *summaryview)
                        continue;
                }
 
-               hbox = gtk_hbox_new(FALSE, 4);
-               label = gtk_label_new(title);
+               /* CLAWS: changed so that locked and mark headers
+                * show a pixmap instead of single character */
+               hbox  = gtk_hbox_new(FALSE, 4);
+               
+               if (type == S_COL_LOCKED)
+                       label = gtk_pixmap_new(lockedxpm, lockedxpmmask);
+               else if (type == S_COL_MARK) 
+                       label = gtk_pixmap_new(markxpm, markxpmmask);
+               else 
+                       label = gtk_label_new(title);
+               
                if (justify == GTK_JUSTIFY_RIGHT)
                        gtk_box_pack_end(GTK_BOX(hbox), label,
                                         FALSE, FALSE, 0);
@@ -3600,6 +3632,17 @@ static void summary_unthread_for_exec_func(GtkCTree *ctree, GtkCTreeNode *node,
        }
 }
 
+void summary_simplify_subject(SummaryView *summaryview, gchar * rexp,
+                             GSList * mlist)
+{
+       GSList * cur;
+       for(cur = mlist ; cur != NULL ; cur = cur->next) {
+               MsgInfo * msginfo = (MsgInfo *) cur->data;
+               string_remove_all_matches(msginfo->subject, rexp, 
+                                         REG_EXTENDED, 0);
+       }
+}
+
 void summary_processing(SummaryView *summaryview, GSList * mlist)
 {
        GSList * processing_list;