GtkCMCTreeNode *node);
-static void summary_set_hide_read_msgs_menu (SummaryView *summaryview,
- guint action);
-static void summary_set_hide_del_msgs_menu (SummaryView *summaryview,
- guint action);
-static void summary_set_hide_read_threads_menu (SummaryView *summaryview,
- guint action);
+static void summary_set_hide_menu (SummaryView *summaryview,
+ const gchar *menu_item,
+ guint action);
static GtkCMCTreeNode *summary_find_prev_msg
(SummaryView *summaryview,
debug_print("Creating summary view...\n");
summaryview = g_new0(SummaryView, 1);
-#if !(GTK_CHECK_VERSION(2,12,0))
- summaryview->tooltips = tips;
-#endif
#define SUMMARY_VBOX_SPACING 3
vbox = gtk_vbox_new(FALSE, SUMMARY_VBOX_SPACING);
(item && item->path)?item->path:"(null)",
item?folder_item_parent(item):0x0,
item?item->no_select:FALSE);
- summary_set_hide_read_msgs_menu(summaryview, FALSE);
- summary_set_hide_del_msgs_menu(summaryview, FALSE);
- summary_set_hide_read_threads_menu(summaryview, FALSE);
+ summary_set_hide_menu(summaryview, "/Menu/View/HideReadMessages", FALSE);
+ summary_set_hide_menu(summaryview, "/Menu/View/HideDelMessages", FALSE);
+ summary_set_hide_menu(summaryview, "/Menu/View/HideReadThreads", FALSE);
summary_clear_all(summaryview);
summaryview->folder_item = item;
summary_thaw(summaryview);
quicksearch_has_sat_predicate(summaryview->quicksearch) == FALSE) {
GSList *not_killed;
- summary_set_hide_read_msgs_menu(summaryview, summaryview->folder_item->hide_read_msgs);
- summary_set_hide_del_msgs_menu(summaryview, summaryview->folder_item->hide_del_msgs);
- summary_set_hide_read_threads_menu(summaryview, summaryview->folder_item->hide_read_threads);
+ summary_set_hide_menu(summaryview, "/Menu/View/HideReadMessages",
+ summaryview->folder_item->hide_read_msgs);
+ summary_set_hide_menu(summaryview, "/Menu/View/HideDelMessages",
+ summaryview->folder_item->hide_del_msgs);
+ summary_set_hide_menu(summaryview, "/Menu/View/HideReadThreads",
+ summaryview->folder_item->hide_read_threads);
not_killed = NULL;
for(cur = mlist ; cur != NULL && cur->data != NULL ; cur = g_slist_next(cur)) {
MsgInfo * msginfo = (MsgInfo *) cur->data;
g_slist_free(mlist);
mlist = not_killed;
} else {
- summary_set_hide_read_msgs_menu(summaryview, FALSE);
- summary_set_hide_del_msgs_menu(summaryview, FALSE);
- summary_set_hide_read_threads_menu(summaryview, FALSE);
+ summary_set_hide_menu(summaryview, "/Menu/View/HideReadMessages",
+ FALSE);
+ summary_set_hide_menu(summaryview, "/Menu/View/HideDelMessages",
+ FALSE);
+ summary_set_hide_menu(summaryview, "/Menu/View/HideReadThreads",
+ FALSE);
}
if (!hidden_removed) {
#undef CURRENTLY_DISPLAYED
+static void summary_cancel_mark_read_timeout(SummaryView *summaryview) {
+ if (summaryview->mark_as_read_timeout_tag != 0) {
+ g_source_remove(summaryview->mark_as_read_timeout_tag);
+ summaryview->mark_as_read_timeout_tag = 0;
+ }
+}
void summary_clear_list(SummaryView *summaryview)
{
summaryview->folder_item = NULL;
}
+ summary_cancel_mark_read_timeout(summaryview);
+
summaryview->display_msg = FALSE;
summaryview->selected = NULL;
_("Internal error: unexpected value for prefs_common.next_unread_msg_dialog\n"));
}
- if (val == G_ALERTALTERNATE) {
- folderview_select_next_unread(summaryview->folderview, TRUE);
- return;
- }
- else
- return;
- } else
+ if (val == G_ALERTALTERNATE)
+ folderview_select_next_with_flag(summaryview->folderview, MSG_UNREAD, TRUE);
+ } else {
summary_select_node(summaryview, node, TRUE, FALSE);
-
+ }
}
}
}
if (val == G_ALERTALTERNATE) {
- folderview_select_next_new(summaryview->folderview);
+ folderview_select_next_with_flag(summaryview->folderview, MSG_NEW, TRUE);
return;
}
else
}
if (val == G_ALERTALTERNATE) {
- folderview_select_next_marked(summaryview->folderview);
+ folderview_select_next_with_flag(summaryview->folderview, MSG_MARKED, TRUE);
return;
}
else
if (!summaryview->folder_item)
return;
if (node) {
+ summary_cancel_mark_read_timeout(summaryview);
gtkut_ctree_expand_parent_all(ctree, node);
if (do_refresh) {
summary_lock(summaryview);
msginfo = gtk_cmctree_node_get_row_data(ctree, node);
+ cm_return_if_fail(msginfo != NULL);
+
if (MSG_IS_DELETED(msginfo->flags))
summaryview->deleted++;
gtk_box_pack_start(GTK_BOX(hbox), label,
FALSE, FALSE, 0);
- if (summaryview->sort_key == sort_by[type]) {
+ if (summaryview->sort_key == sort_by[type] ||
+ (summaryview->sort_key == SORT_BY_THREAD_DATE &&
+ sort_by[SORT_BY_DATE] && type == S_COL_DATE)) {
arrow = gtk_arrow_new
(summaryview->sort_type == SORT_ASCENDING
? GTK_ARROW_DOWN : GTK_ARROW_UP,
extract_address(from_text);
}
if (!from_text)
- _("(No From)");
+ from_text = _("(No From)");
} else {
gchar *tmp = summary_complete_address(msginfo->from);
if (tmp) {
from_text = msginfo->from;
else {
from_text = msginfo->from;
- extract_address(from_text);
+ if (from_text)
+ extract_address(from_text);
}
if (!from_text)
- _("(No From)");
+ from_text = _("(No From)");
}
}
MarkAsReadData *mdata = (MarkAsReadData *)data;
if (!mdata)
return FALSE;
-
+
if (mdata->msginfo == summary_get_selected_msg(mdata->summaryview))
msginfo_mark_as_read(mdata->summaryview, mdata->msginfo,
- mdata->summaryview->selected);
+ mdata->summaryview->selected);
+ procmsg_msginfo_free(mdata->msginfo);
- g_free(mdata);
+ mdata->summaryview->mark_as_read_timeout_tag = 0;
- return FALSE;
+ g_free(mdata);
+ return FALSE;
}
static void summary_display_msg_full(SummaryView *summaryview,
prefs_common.mark_as_read_delay) {
MarkAsReadData *data = g_new0(MarkAsReadData, 1);
data->summaryview = summaryview;
- data->msginfo = msginfo;
-#if GLIB_CHECK_VERSION(2,14,0)
- g_timeout_add_seconds(prefs_common.mark_as_read_delay,
- msginfo_mark_as_read_timeout, data);
-#else
- g_timeout_add(prefs_common.mark_as_read_delay * 1000,
- msginfo_mark_as_read_timeout, data);
-#endif
+ data->msginfo = procmsg_msginfo_new_ref(msginfo);
+ if (summaryview->mark_as_read_timeout_tag != 0)
+ g_source_remove(summaryview->mark_as_read_timeout_tag);
+ summaryview->mark_as_read_timeout_tag =
+ g_timeout_add_seconds(prefs_common.mark_as_read_delay,
+ msginfo_mark_as_read_timeout, data);
} else if (new_window || !prefs_common.mark_as_read_on_new_window) {
msginfo_mark_as_read(summaryview, msginfo, row);
}
if (!summaryview->folder_item ||
FOLDER_TYPE(summaryview->folder_item->folder) == F_NEWS) return;
- to_folder = foldersel_folder_sel(summaryview->folder_item->folder,
- FOLDER_SEL_MOVE, NULL, FALSE);
+ to_folder = foldersel_folder_sel(NULL, FOLDER_SEL_MOVE, NULL, FALSE);
summary_move_selected_to(summaryview, to_folder);
}
if (!summaryview->folder_item) return;
- to_folder = foldersel_folder_sel(summaryview->folder_item->folder,
- FOLDER_SEL_COPY, NULL, FALSE);
+ to_folder = foldersel_folder_sel(NULL, FOLDER_SEL_COPY, NULL, FALSE);
summary_copy_selected_to(summaryview, to_folder);
}
if (node == summaryview->displayed) {
messageview_clear(summaryview->messageview);
+ summary_cancel_mark_read_timeout(summaryview);
summaryview->displayed = NULL;
}
if (GTK_CMCTREE_ROW(node)->children != NULL) {
if (node == summaryview->displayed) {
messageview_clear(summaryview->messageview);
+ summary_cancel_mark_read_timeout(summaryview);
summaryview->displayed = NULL;
}
if (GTK_CMCTREE_ROW(node)->children != NULL) {
if (node == summaryview->displayed)
summaryview->displayed = NULL;
+ summary_cancel_mark_read_timeout(summaryview);
+
for (top_parent = node;
GTK_CMCTREE_ROW(top_parent)->parent != NULL;
top_parent = GTK_CMCTREE_ROW(top_parent)->parent)
return tag_b == NULL ? 0:1;
if (tag_b == NULL)
- return tag_a == NULL ? 0:1;
+ return 1;
return g_utf8_collate(tag_a, tag_b);
}
static void summary_selected(GtkCMCTree *ctree, GtkCMCTreeNode *row,
gint column, SummaryView *summaryview)
{
- GList *list, *cur;
+ const GList *list, *cur;
MessageView *msgview;
MsgInfo *msginfo;
gboolean marked_unread = FALSE;
static void summary_date_clicked(GtkWidget *button, SummaryView *summaryview)
{
- summary_sort_by_column_click(summaryview, SORT_BY_DATE);
+ if (summaryview->sort_key == SORT_BY_DATE)
+ summary_sort_by_column_click(summaryview, SORT_BY_DATE);
+ else
+ summary_sort_by_column_click(summaryview, SORT_BY_THREAD_DATE);
}
static void summary_from_clicked(GtkWidget *button, SummaryView *summaryview)
summary_show(summaryview, summaryview->folder_item);
}
-static void summary_set_hide_read_msgs_menu (SummaryView *summaryview,
- guint action)
-{
- GtkWidget *widget;
-
- widget = gtk_ui_manager_get_widget(summaryview->mainwin->ui_manager, "/Menu/View/HideReadMessages");
- g_object_set_data(G_OBJECT(widget), "dont_toggle",
- GINT_TO_POINTER(1));
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(widget), action);
- g_object_set_data(G_OBJECT(widget), "dont_toggle",
- GINT_TO_POINTER(0));
-}
-
-static void summary_set_hide_read_threads_menu (SummaryView *summaryview,
- guint action)
+static void summary_set_hide_menu (SummaryView *summaryview,
+ const gchar *menu_item,
+ guint action)
{
GtkWidget *widget;
- widget = gtk_ui_manager_get_widget(summaryview->mainwin->ui_manager, "/Menu/View/HideReadThreads");
- g_object_set_data(G_OBJECT(widget), "dont_toggle",
- GINT_TO_POINTER(1));
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(widget), action);
- g_object_set_data(G_OBJECT(widget), "dont_toggle",
- GINT_TO_POINTER(0));
-}
+ widget = gtk_ui_manager_get_widget(summaryview->mainwin->ui_manager, menu_item);
+ cm_return_if_fail(widget != NULL);
-static void summary_set_hide_del_msgs_menu (SummaryView *summaryview,
- guint action)
-{
- GtkWidget *widget;
-
- widget = gtk_ui_manager_get_widget(summaryview->mainwin->ui_manager, "/Menu/View/HideDelMessages");
g_object_set_data(G_OBJECT(widget), "dont_toggle",
GINT_TO_POINTER(1));
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(widget), action);
guint new, unread, unreadmarked, marked, total;
guint replied, forwarded, locked, ignored, watched;
static gboolean tips_initialized = FALSE;
-#if !(GTK_CHECK_VERSION(2,12,0))
- GtkTooltips *tips = summaryview->tooltips;
-#endif
if (prefs_common.layout_mode != SMALL_LAYOUT) {
if (tips_initialized) {