#include "timing.h"
#include "gedit-print.h"
#include "log.h"
+#include "manual.h"
#define SUMMARY_COL_MARK_WIDTH 10
#define SUMMARY_COL_STATUS_WIDTH 13
summary_set_column_titles(summaryview);
}
+static gboolean summaryview_quicksearch_recurse(gpointer data)
+{
+ SummaryView *summaryview = (SummaryView *)data;
+ main_window_cursor_wait(summaryview->mainwin);
+ quicksearch_reset_cur_folder_item(summaryview->quicksearch);
+ quicksearch_search_subfolders(summaryview->quicksearch,
+ summaryview->folderview,
+ summaryview->folder_item);
+ main_window_cursor_normal(summaryview->mainwin);
+ return FALSE;
+}
gboolean summary_show(SummaryView *summaryview, FolderItem *item)
{
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
statusbar_pop_all();
hidden_removed = TRUE;
- if (quicksearch_is_running(summaryview->quicksearch)) {
- /* only scan subfolders when quicksearch changed,
- * not when search is the same and folder changed */
- main_window_cursor_wait(summaryview->mainwin);
- quicksearch_reset_cur_folder_item(summaryview->quicksearch);
- quicksearch_search_subfolders(summaryview->quicksearch,
- summaryview->folderview,
- summaryview->folder_item);
- main_window_cursor_normal(summaryview->mainwin);
- }
-
if (!quicksearch_is_active(summaryview->quicksearch)) {
debug_print("search cancelled!\n");
gtk_clist_thaw(GTK_CLIST(ctree));
g_slist_free(mlist);
+ if (quicksearch_is_active(summaryview->quicksearch) &&
+ quicksearch_is_running(summaryview->quicksearch)) {
+ /* only scan subfolders when quicksearch changed,
+ * not when search is the same and folder changed */
+ g_timeout_add(100, summaryview_quicksearch_recurse, summaryview);
+ }
+
if (is_refresh) {
summaryview->displayed =
summary_find_msg_by_msgnum(summaryview,
void summary_select_next_marked(SummaryView *summaryview)
{
- GtkCTreeNode *node;
+ GtkCTreeNode *node = summaryview->selected;
+ gboolean skip_cur = FALSE;
+
+ if (summaryview->displayed
+ && summaryview->selected == summaryview->displayed) {
+ debug_print("skipping cur (%p %p)\n",
+ summaryview->displayed, summaryview->selected);
+ skip_cur = TRUE;
+ }
+
node = summary_find_next_flagged_msg
- (summaryview, summaryview->selected, MSG_MARKED, TRUE);
+ (summaryview, node, MSG_MARKED, skip_cur);
+
+ if (node)
+ summary_select_node(summaryview, node, TRUE, FALSE);
+ else {
+ node = summary_find_next_flagged_msg
+ (summaryview, NULL, MSG_MARKED, FALSE);
+ if (node == NULL || node == summaryview->selected) {
+ AlertValue val = 0;
- if (!node) {
- AlertValue val;
+ switch (prefs_common.next_unread_msg_dialog) {
+ case NEXTUNREADMSGDIALOG_ALWAYS:
+ val = alertpanel(_("No more marked messages"),
+ _("No marked message found. "
+ "Go to next folder?"),
+ GTK_STOCK_NO, "+"GTK_STOCK_YES, NULL);
+ break;
+ case NEXTUNREADMSGDIALOG_ASSUME_YES:
+ val = G_ALERTALTERNATE;
+ break;
+ case NEXTUNREADMSGDIALOG_ASSUME_NO:
+ val = G_ALERTOTHER;
+ break;
+ default:
+ debug_print(
+ _("Internal error: unexpected value for prefs_common.next_unread_msg_dialog\n"));
+ }
- val = alertpanel(_("No more marked messages"),
- _("No marked message found. "
- "Search from the beginning?"),
- GTK_STOCK_NO, "+"GTK_STOCK_YES, NULL);
- if (val != G_ALERTALTERNATE) return;
- node = summary_find_next_flagged_msg(summaryview, NULL,
- MSG_MARKED, TRUE);
- }
+ if (val == G_ALERTALTERNATE) {
+ folderview_select_next_marked(summaryview->folderview);
+ return;
+ }
+ else
+ return;
+ } else
+ summary_select_node(summaryview, node, TRUE, FALSE);
- if (!node)
- alertpanel_notice(_("No marked messages."));
- else
- summary_select_node(summaryview, node, TRUE, FALSE);
+ }
}
void summary_select_prev_labeled(SummaryView *summaryview)
for (; node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
msginfo = gtk_ctree_node_get_row_data(ctree, node);
- if (msginfo && !MSG_IS_DELETED(msginfo->flags)) break;
+ if (msginfo && !MSG_IS_DELETED(msginfo->flags)
+ && !MSG_IS_MOVE(msginfo->flags)) break;
}
return node;
summaryview->subject_table = subject_table;
if (prefs_common.use_addr_book)
- start_address_completion();
+ start_address_completion(NULL);
if (summaryview->threaded) {
GNode *root, *gnode;
msginfo->fromname :
_("(No From)");
} else {
- /* this leaks */
+ gchar buf[BUFFSIZE];
gchar *tmp = summary_complete_address(msginfo->from);
- from_text = tmp ? tmp : (msginfo->fromname ?
- msginfo->fromname:
- _("(No From)"));
+ if (tmp) {
+ strncpy2(buf, tmp, sizeof(buf));
+ g_free(tmp);
+ from_text = buf;
+ } else {
+ from_text = (msginfo->fromname) ?
+ msginfo->fromname:
+ _("(No From)");
+ }
}
to_text = msginfo->to ? msginfo->to :
summaryview->selected);
if (!msginfo) return;
- compose_reedit(msginfo);
+ compose_reedit(msginfo, FALSE);
}
gboolean summary_step(SummaryView *summaryview, GtkScrollType type)
if (!summaryview->folder_item) return;
- aval = alertpanel(_("Delete message(s)"),
- _("Do you really want to delete selected message(s)?"),
- GTK_STOCK_CANCEL, "+"GTK_STOCK_DELETE, NULL);
- if (aval != G_ALERTALTERNATE) return;
+ if (!prefs_common.live_dangerously) {
+ aval = alertpanel(_("Delete message(s)"),
+ _("Do you really want to delete selected message(s)?"),
+ GTK_STOCK_CANCEL, "+"GTK_STOCK_DELETE, NULL);
+ if (aval != G_ALERTALTERNATE) return;
+ }
for (cur = GTK_CLIST(ctree)->selection; cur != NULL && cur->data != NULL;
cur = cur->next) {
void summary_move_selected_to(SummaryView *summaryview, FolderItem *to_folder)
{
GList *cur;
-
+ GtkCTreeNode *sel_last = NULL;
if (!to_folder) return;
if (!summaryview->folder_item ||
FOLDER_TYPE(summaryview->folder_item->folder) == F_NEWS) return;
START_LONG_OPERATION(summaryview);
for (cur = GTK_CLIST(summaryview->ctree)->selection;
- cur != NULL && cur->data != NULL; cur = cur->next)
+ cur != NULL && cur->data != NULL; cur = cur->next) {
+ sel_last = GTK_CTREE_NODE(cur->data);
summary_move_row_to
(summaryview, GTK_CTREE_NODE(cur->data), to_folder);
-
+ }
END_LONG_OPERATION(summaryview);
summaryview->display_msg = prefs_common.always_show_msg;
if (prefs_common.immediate_exec) {
summary_execute(summaryview);
} else {
+ GtkCTreeNode *node = summary_find_next_msg(summaryview, sel_last);
+ if (!node)
+ node = summary_find_prev_msg(summaryview, sel_last);
+ summary_select_node(summaryview, node, prefs_common.always_show_msg, TRUE);
summary_status_show(summaryview);
}
if (hooks_invoke(MAIL_MANUAL_FILTERING_HOOKLIST, &mail_filtering_data))
return;
- filter_message_by_msginfo(filtering_rules, msginfo);
+ filter_message_by_msginfo(filtering_rules, msginfo, NULL);
}
void summary_msginfo_filter_open(FolderItem * item, MsgInfo *msginfo,
if (item == NULL)
prefs_filtering_open(&pre_global_processing,
_("Processing rules to apply before folder rules"),
- header, key);
+ MANUAL_ANCHOR_PROCESSING,
+ header, key, FALSE);
else
prefs_filtering_open(&item->prefs->processing,
_("Processing configuration"),
- header, key);
+ MANUAL_ANCHOR_PROCESSING,
+ header, key, FALSE);
}
else {
prefs_filtering_open(&filtering_rules,
- _("Filtering configuration"),
- header, key);
+ _("Filtering configuration"),
+ MANUAL_ANCHOR_FILTERING,
+ header, key, TRUE);
}
g_free(header);
}
gtk_ctree_node_set_row_style(ctree, node, style);
+ gtk_style_unref(style);
}
static void summary_set_row_colorlabel(SummaryView *summaryview, GtkCTreeNode *row, guint labelcolor)