static GdkBitmap *keyxpmmask;
static GdkPixmap *clipkeyxpm;
static GdkBitmap *clipkeyxpmmask;
+static GdkPixmap *gpgsignedxpm;
+static GdkBitmap *gpgsignedxpmmask;
static void summary_free_msginfo_func (GtkCTree *ctree,
GtkCTreeNode *node,
&clipkeyxpm, &clipkeyxpmmask);
stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_KEY,
&keyxpm, &keyxpmmask);
+ stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_GPG_SIGNED,
+ &gpgsignedxpm, &gpgsignedxpmmask);
if (!small_style) {
small_style = gtk_style_copy
|| MSG_IS_LOCKED(msginfo->flags)
|| CURRENTLY_DISPLAYED(msginfo))
&& !MSG_IS_IGNORE_THREAD(msginfo->flags))
- not_killed = g_slist_append(not_killed, msginfo);
+ not_killed = g_slist_prepend(not_killed, msginfo);
else
procmsg_msginfo_free(msginfo);
}
}
if (search_type != S_SEARCH_EXTENDED) {
if (searched_header && strcasestr(searched_header, search_string) != NULL)
- not_killed = g_slist_append(not_killed, msginfo);
+ not_killed = g_slist_prepend(not_killed, msginfo);
else
procmsg_msginfo_free(msginfo);
} else {
if ((tmp_list != NULL) && matcherlist_match(tmp_list, msginfo))
- not_killed = g_slist_append(not_killed, msginfo);
+ not_killed = g_slist_prepend(not_killed, msginfo);
else
procmsg_msginfo_free(msginfo);
}
MsgInfo * msginfo = (MsgInfo *) cur->data;
if (msginfo->score > kill_score)
- not_killed = g_slist_append(not_killed, msginfo);
+ not_killed = g_slist_prepend(not_killed, msginfo);
else
procmsg_msginfo_free(msginfo);
}
/* set ctree and hash table from the msginfo list
creating thread, and count the number of messages */
+
summary_set_ctree_from_list(summaryview, mlist);
g_slist_free(mlist);
for (; node != NULL; node = GTK_CTREE_NODE_PREV(node)) {
msginfo = gtk_ctree_node_get_row_data(ctree, node);
- if (!MSG_IS_DELETED(msginfo->flags)) break;
+ if (msginfo && !MSG_IS_DELETED(msginfo->flags)) break;
}
return node;
for (; node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
msginfo = gtk_ctree_node_get_row_data(ctree, node);
- if (!MSG_IS_DELETED(msginfo->flags)) break;
+ if (msginfo && !MSG_IS_DELETED(msginfo->flags)) break;
}
return node;
for (; node != NULL; node = GTK_CTREE_NODE_PREV(node)) {
msginfo = gtk_ctree_node_get_row_data(ctree, node);
- if ((msginfo->flags.perm_flags & flags) != 0) break;
+ if (msginfo && (msginfo->flags.perm_flags & flags) != 0) break;
}
return node;
/* Find msg with matching flags but ignore messages with
ignore flags, if searching for new or unread messages */
if (!(((flags & (MSG_NEW | MSG_UNREAD)) != 0) && MSG_IS_IGNORE_THREAD(msginfo->flags)) &&
- ((msginfo->flags.perm_flags & flags) != 0))
+ (msginfo && (msginfo->flags.perm_flags & flags) != 0))
break;
}
for (; node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
msginfo = gtk_ctree_node_get_row_data(ctree, node);
- if (msginfo->msgnum == msgnum) break;
+ if (msginfo && msginfo->msgnum == msgnum) break;
}
return node;
msginfo = gtk_ctree_node_get_row_data
(GTK_CTREE(summaryview->ctree),
GTK_CTREE_NODE(cur->data));
- sel_size += msginfo->size;
- n_selected++;
+ if (!msginfo)
+ g_warning("summary_status_show(): msginfo == NULL\n");
+ else {
+ sel_size += msginfo->size;
+ n_selected++;
+ }
}
if (summaryview->folder_item->folder->type == F_NEWS) {
summary_thread_init(summaryview);
} else {
gchar *text[N_SUMMARY_COLS];
-
- mlist = g_slist_reverse(mlist);
+ cur = mlist;
for (; mlist != NULL; mlist = mlist->next) {
msginfo = (MsgInfo *)mlist->data;
msginfo->subject,
node);
}
- mlist = g_slist_reverse(mlist);
+ mlist = cur;
}
if (prefs_common.enable_hscrollbar &&
gtk_ctree_node_set_text(ctree, row, col_pos[S_COL_LOCKED], NULL);
}
- if (MSG_IS_MIME(flags) && MSG_IS_ENCRYPTED(flags)) {
+ if (MSG_IS_SIGNED(flags)) {
+ gtk_ctree_node_set_pixmap(ctree, row, col_pos[S_COL_MIME],
+ gpgsignedxpm, gpgsignedxpmmask);
+ } else if (MSG_IS_MIME(flags) && MSG_IS_ENCRYPTED(flags)) {
gtk_ctree_node_set_pixmap(ctree, row, col_pos[S_COL_MIME],
clipkeyxpm, clipkeyxpmmask);
} else if (MSG_IS_ENCRYPTED(flags)) {
STATUSBAR_PUSH(summaryview->mainwin,
_("Deleting duplicated messages..."));
+ folder_item_update_freeze();
+
gtk_ctree_pre_recursive(GTK_CTREE(summaryview->ctree), NULL,
GTK_CTREE_FUNC(summary_delete_duplicated_func),
summaryview);
else
summary_status_show(summaryview);
+ folder_item_update_thaw();
+
debug_print("done.\n");
STATUSBAR_POP(summaryview->mainwin);
main_window_cursor_normal(summaryview->mainwin);
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
GtkCList *clist = GTK_CLIST(summaryview->ctree);
GtkCTreeNode *node, *next;
+ GtkCTreeNode *new_selected = NULL;
if (!summaryview->folder_item) return FALSE;
folder_item_update_thaw();
node = GTK_CTREE_NODE(clist->row_list);
- while (node != NULL) {
+ for (; node != NULL; node = next) {
next = gtkut_ctree_node_next(ctree, node);
- if (gtk_ctree_node_get_row_data(ctree, node) == NULL) {
- if (node == summaryview->displayed) {
- messageview_clear(summaryview->messageview);
- summaryview->displayed = NULL;
- }
- if (GTK_CTREE_ROW(node)->children != NULL)
- g_warning("summary_execute(): children != NULL\n");
- else
- gtk_ctree_remove_node(ctree, node);
+ if (gtk_ctree_node_get_row_data(ctree, node) != NULL) continue;
+
+ if (node == summaryview->displayed) {
+ messageview_clear(summaryview->messageview);
+ summaryview->displayed = NULL;
}
- node = next;
+ if (GTK_CTREE_ROW(node)->children != NULL) {
+ g_warning("summary_execute(): children != NULL\n");
+ continue;
+ }
+
+ if (!new_selected &&
+ gtkut_ctree_node_is_selected(ctree, node)) {
+ gtk_sctree_unselect_all(GTK_SCTREE(ctree));
+ new_selected = summary_find_next_msg(summaryview, node);
+ if (!new_selected)
+ new_selected = summary_find_prev_msg
+ (summaryview, node);
+ }
+
+ gtk_ctree_remove_node(ctree, node);
+ }
+
+ if (new_selected) {
+ gtk_sctree_select
+ (GTK_SCTREE(ctree),
+ summaryview->displayed ? summaryview->displayed
+ : new_selected);
}
if (summaryview->threaded)
msginfo->inreplyto);
}
- if (parent == NULL) {
+ if (prefs_common.thread_by_subject && parent == NULL) {
parent = subject_table_lookup
(summaryview->subject_table,
msginfo->subject);
}
break;
case COMPOSE_FORWARD_INLINE:
- if (!sel->next) {
+ if (sel && !sel->next) {
compose_forward(NULL, msginfo, FALSE, text);
break;
}
summary_status_show(summaryview);
if (GTK_CLIST(ctree)->selection &&
- GTK_CLIST(ctree)->selection->next) {
+ GTK_CLIST(ctree)->selection->next) {
summaryview->display_msg = FALSE;
summary_set_menu_sensitive(summaryview);
toolbar_main_set_sensitive(summaryview->mainwin);
summaryview->selected = row;
msginfo = gtk_ctree_node_get_row_data(ctree, row);
+ g_return_if_fail(msginfo != NULL);
switch (column < 0 ? column : summaryview->col_state[column].type) {
case S_COL_MARK:
stock_pixmap_gdk(ctree, STOCK_PIXMAP_IGNORETHREAD, &ignorethreadxpm, &ignorethreadxpmmask);
stock_pixmap_gdk(ctree, STOCK_PIXMAP_CLIP_KEY, &clipkeyxpm, &clipkeyxpmmask);
stock_pixmap_gdk(ctree, STOCK_PIXMAP_KEY, &keyxpm, &keyxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_GPG_SIGNED, &gpgsignedxpm, &gpgsignedxpmmask);
pixmap = stock_pixmap_widget(summaryview->hbox, STOCK_PIXMAP_DIR_OPEN);
gtk_box_pack_start(GTK_BOX(summaryview->hbox), pixmap, FALSE, FALSE, 4);