sync with 0.7.5cvs16
[claws.git] / src / summaryview.c
index 5e8410ac6fd03b2f45b2cbc33440d01b7d93a364..88552f2b25fbaca9505adca3335367909e30e801 100644 (file)
@@ -310,6 +310,9 @@ static void summary_show_all_header_cb      (SummaryView            *summaryview,
 static void summary_add_address_cb     (SummaryView            *summaryview,
                                         guint                   action,
                                         GtkWidget              *widget);
+static void summary_create_filter_cb   (SummaryView            *summaryview,
+                                        guint                   action,
+                                        GtkWidget              *widget);
 
 static void summary_mark_clicked       (GtkWidget              *button,
                                         SummaryView            *summaryview);
@@ -421,6 +424,15 @@ static GtkItemFactoryEntry summary_popup_entries[] =
        {N_("/---"),                    NULL, NULL,             0, "<Separator>"},
        {N_("/Add sender to address boo_k"),
                                        NULL, summary_add_address_cb, 0, NULL},
+       {N_("/Create f_ilter rule"),    NULL, NULL,             0, "<Branch>"},
+       {N_("/Create f_ilter rule/_Automatically"),
+                                       NULL, summary_create_filter_cb, FILTER_BY_AUTO, NULL},
+       {N_("/Create f_ilter rule/by _From"),
+                                       NULL, summary_create_filter_cb, FILTER_BY_FROM, NULL},
+       {N_("/Create f_ilter rule/by _To"),
+                                       NULL, summary_create_filter_cb, FILTER_BY_TO, NULL},
+       {N_("/Create f_ilter rule/by _Subject"),
+                                       NULL, summary_create_filter_cb, FILTER_BY_SUBJECT, NULL},
        {N_("/---"),                    NULL, NULL,             0, "<Separator>"},
        {N_("/_View"),                  NULL, NULL,             0, "<Branch>"},
        {N_("/_View/Open in new _window"),
@@ -719,9 +731,11 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item,
                val = alertpanel(_("Process mark"),
                                 _("Some marks are left. Process it?"),
                                 _("Yes"), _("No"), _("Cancel"));
-               if (G_ALERTDEFAULT == val)
+               if (G_ALERTDEFAULT == val) {
+                       summary_unlock(summaryview);
                        summary_execute(summaryview);
-               else if (G_ALERTALTERNATE == val)
+                       summary_lock(summaryview);
+               } else if (G_ALERTALTERNATE == val)
                        summary_write_cache(summaryview);
                else {
                        summary_unlock(summaryview);
@@ -1086,6 +1100,7 @@ static void summary_set_menu_sensitive(SummaryView *summaryview)
        menu_set_sensitive(ifactory, "/Bounce",                   TRUE);
 
        menu_set_sensitive(ifactory, "/Add sender to address book", sens);
+       menu_set_sensitive(ifactory, "/Create filter rule",         sens);
 
        menu_set_sensitive(ifactory, "/View", sens);
        menu_set_sensitive(ifactory, "/View/Open in new window", sens);
@@ -1694,7 +1709,8 @@ static void summary_status_show(SummaryView *summaryview)
                n_selected++;
        }
 
-       if (summaryview->folder_item->folder->type == F_NEWS) {
+       if (summaryview->folder_item->folder->type == F_NEWS &&
+           prefs_common.ng_abbrev_len < strlen(summaryview->folder_item->path)) {
                gchar *group;
                group = get_abbrev_newsgroup_name
                        (g_basename(summaryview->folder_item->path));
@@ -2109,7 +2125,7 @@ gint summary_write_cache(SummaryView *summaryview)
        gint ver = CACHE_VERSION;
        gchar *buf;
        gchar *cachefile, *markfile;
-       GSList * cur;
+       GSList *cur;
        gint filemode = 0;
        PrefsFolderItem *prefs;
 
@@ -2175,6 +2191,12 @@ gint summary_write_cache(SummaryView *summaryview)
 
        gtk_ctree_pre_recursive(ctree, NULL, summary_write_cache_func, &fps);
 
+       for (cur = summaryview->killed_messages; cur != NULL; cur = cur->next) {
+               MsgInfo *msginfo = (MsgInfo *)cur->data;
+               procmsg_write_cache(msginfo, fps.cache_fp);
+               procmsg_write_flags(msginfo, fps.mark_fp);
+       }
+
        procmsg_flush_mark_queue(summaryview->folder_item, fps.mark_fp);
 
        fclose(fps.cache_fp);
@@ -2264,13 +2286,13 @@ static void summary_set_header(SummaryView *summaryview, gchar *text[],
                if (prefs_common.use_addr_book) {
                        Xstrdup_a(addr, msginfo->from, return);
                        extract_address(addr);
-               }
 
                if (account_find_from_address(addr)) {
                        addr = summary_complete_address(msginfo->to);
                        g_free(to);
                        to   = g_strconcat("-->", addr == NULL ? msginfo->to : addr, NULL);
                        text[col_pos[S_COL_FROM]] = to;
+                       }
                }
        }
 
@@ -3520,6 +3542,10 @@ static void summary_execute_move_func(GtkCTree *ctree, GtkCTreeNode *node,
        msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node);
 
        if (msginfo && MSG_IS_MOVE(msginfo->flags) && msginfo->to_folder) {
+               if (!prefs_common.immediate_exec &&
+                   msginfo->to_folder->op_count > 0)
+                       msginfo->to_folder->op_count--;
+
                g_hash_table_insert(summaryview->folder_table,
                                    msginfo->to_folder, GINT_TO_POINTER(1));
 
@@ -3568,6 +3594,10 @@ static void summary_execute_copy_func(GtkCTree *ctree, GtkCTreeNode *node,
        msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node);
 
        if (msginfo && MSG_IS_COPY(msginfo->flags) && msginfo->to_folder) {
+               if (!prefs_common.immediate_exec &&
+                   msginfo->to_folder->op_count > 0)
+                       msginfo->to_folder->op_count--;
+
                g_hash_table_insert(summaryview->folder_table,
                                    msginfo->to_folder, GINT_TO_POINTER(1));
 
@@ -4755,6 +4785,12 @@ static void summary_add_address_cb(SummaryView *summaryview,
        summary_add_address(summaryview);
 }
 
+static void summary_create_filter_cb(SummaryView *summaryview,
+                                    guint action, GtkWidget *widget)
+{
+       summary_filter_open(summaryview, (PrefsFilterType)action);
+}
+
 static void summary_mark_clicked(GtkWidget *button, SummaryView *summaryview)
 {
        summary_sort(summaryview, SORT_BY_MARK);
@@ -5293,9 +5329,9 @@ void summary_reflect_prefs_pixmap_theme(SummaryView *summaryview)
 }
 
 /*
- * Gather addresses for selected messages in summary view.
+ * Harvest addresses for selected messages in summary view.
  */
-void summary_gather_address( SummaryView *summaryview ) {
+void summary_harvest_address( SummaryView *summaryview ) {
        GtkCTree *ctree = GTK_CTREE( summaryview->ctree );
        GList *cur;
        GList *msgList;
@@ -5306,7 +5342,7 @@ void summary_gather_address( SummaryView *summaryview ) {
                msginfo = gtk_ctree_node_get_row_data( ctree, GTK_CTREE_NODE(cur->data) );
                msgList = g_list_append( msgList, GUINT_TO_POINTER( msginfo->msgnum ) );
        }
-       addressbook_gather( summaryview->folder_item, msgList );
+       addressbook_harvest( summaryview->folder_item, TRUE, msgList );
        g_list_free( msgList );
 }