"", /* S_COL_LOCKED */
};
+void summary_freeze(SummaryView *summaryview)
+{
+ if (summaryview)
+ gtk_clist_freeze(GTK_CLIST(summaryview->ctree));
+}
+
+void summary_thaw(SummaryView *summaryview)
+{
+ if (summaryview)
+ gtk_clist_thaw(GTK_CLIST(summaryview->ctree));
+}
+
+void summary_grab_focus(SummaryView *summaryview)
+{
+ if (summaryview)
+ gtk_widget_grab_focus(summaryview->ctree);
+}
+
+GtkWidget *summary_get_main_widget(SummaryView *summaryview)
+{
+ if (summaryview)
+ return summaryview->ctree;
+ else
+ return NULL;
+}
+
#define START_LONG_OPERATION(summaryview,force_freeze) { \
summary_lock(summaryview); \
main_window_cursor_wait(summaryview->mainwin); \
if (force_freeze || sc_g_list_bigger(GTK_CLIST(summaryview->ctree)->selection, 1)) {\
froze = TRUE; \
- gtk_clist_freeze(GTK_CLIST(summaryview->ctree)); \
+ summary_freeze(summaryview); \
} \
folder_item_update_freeze(); \
inc_lock(); \
inc_unlock(); \
folder_item_update_thaw(); \
if (froze) \
- gtk_clist_thaw(GTK_CLIST(summaryview->ctree)); \
+ summary_thaw(summaryview); \
main_window_cursor_normal(summaryview->mainwin); \
summary_unlock(summaryview); \
summaryview->msginfo_update_callback_id = \
{
int u = 0, n = 0, m = 0, t = 0;
GSList *cur;
- START_TIMING("consistency check");
+ START_TIMING("");
for(cur = mlist ; cur != NULL && cur->data != NULL ; cur = g_slist_next(cur)) {
MsgInfo * msginfo = (MsgInfo *) cur->data;
t++;
if (!summaryview->mainwin)
return FALSE;
-START_TIMING("--------- summary_show");
+ START_TIMING("");
summaryview->last_displayed = NULL;
summary_switch_from_to(summaryview, item);
folder_update_op_count();
}
- gtk_clist_freeze(GTK_CLIST(ctree));
+ summary_freeze(summaryview);
summary_clear_list(summaryview);
summary_set_hide_read_msgs_menu(summaryview, FALSE);
summary_clear_all(summaryview);
summaryview->folder_item = item;
- gtk_clist_thaw(GTK_CLIST(ctree));
+ summary_thaw(summaryview);
summary_unlock(summaryview);
inc_unlock();
if (item && quicksearch_is_running(summaryview->quicksearch)) {
if (quicksearch_is_active(summaryview->quicksearch)) {
GSList *not_killed;
+ gint interval = quicksearch_is_fast(summaryview->quicksearch) ? 1000:100;
START_TIMING("quicksearch");
gint num = 0, total = summaryview->folder_item->total_msgs;
statusbar_print_all(_("Searching in %s... \n"),
summaryview->folder_item->path ?
summaryview->folder_item->path : "(null)");
not_killed = NULL;
+ folder_item_update_freeze();
for (cur = mlist ; cur != NULL && cur->data != NULL ; cur = g_slist_next(cur)) {
MsgInfo * msginfo = (MsgInfo *) cur->data;
- statusbar_progress_all(num++,total, 50);
+ statusbar_progress_all(num++,total, interval);
if (!msginfo->hidden && quicksearch_match(summaryview->quicksearch, msginfo))
not_killed = g_slist_prepend(not_killed, msginfo);
else
procmsg_msginfo_free(msginfo);
- GTK_EVENTS_FLUSH();
+ if (num % interval == 0)
+ GTK_EVENTS_FLUSH();
if (!quicksearch_is_active(summaryview->quicksearch)) {
break;
}
}
+ folder_item_update_thaw();
statusbar_progress_all(0,0,0);
statusbar_pop_all();
hidden_removed = TRUE;
if (!quicksearch_is_active(summaryview->quicksearch)) {
debug_print("search cancelled!\n");
- gtk_clist_thaw(GTK_CLIST(ctree));
+ summary_thaw(summaryview);
STATUSBAR_POP(summaryview->mainwin);
main_window_cursor_normal(summaryview->mainwin);
summary_unlock(summaryview);
summary_set_menu_sensitive(summaryview);
toolbar_main_set_sensitive(summaryview->mainwin);
- gtk_clist_thaw(GTK_CLIST(ctree));
+ summary_thaw(summaryview);
debug_print("\n");
STATUSBAR_PUSH(summaryview->mainwin, _("Done."));
STATUSBAR_POP(summaryview->mainwin);
GtkCList *clist = GTK_CLIST(summaryview->ctree);
gint optimal_width;
- gtk_clist_freeze(clist);
+ summary_freeze(summaryview);
gtk_ctree_pre_recursive(GTK_CTREE(summaryview->ctree),
NULL, summary_free_msginfo_func, NULL);
optimal_width);
}
- gtk_clist_thaw(clist);
+ summary_thaw(summaryview);
}
void summary_clear_all(SummaryView *summaryview)
_("Attracting messages by subject..."));
main_window_cursor_wait(summaryview->mainwin);
- gtk_clist_freeze(clist);
+ summary_freeze(summaryview);
subject_table = g_hash_table_new(attract_hash_func,
attract_compare_func);
gtk_ctree_node_moveto(ctree, summaryview->selected, 0, 0.5, 0);
- gtk_clist_thaw(clist);
+ summary_thaw(summaryview);
debug_print("done.\n");
STATUSBAR_POP(summaryview->mainwin);
label = gtk_image_new_from_pixmap(clipxpm, clipxpmmask);
gtk_widget_show(label);
gtk_clist_set_column_widget(clist, pos, label);
+ gtk_sctree_set_column_tooltip(GTK_SCTREE(clist), pos, _("Attachment"));
continue;
} else if (type == S_COL_MARK) {
label = gtk_image_new_from_pixmap(markxpm, markxpmmask);
gtk_widget_show(label);
gtk_clist_set_column_widget(clist, pos, label);
+ gtk_sctree_set_column_tooltip(GTK_SCTREE(clist), pos, _("Mark"));
continue;
} else if (type == S_COL_LOCKED) {
label = gtk_image_new_from_pixmap(lockedxpm, lockedxpmmask);
gtk_widget_show(label);
gtk_clist_set_column_widget(clist, pos, label);
+ gtk_sctree_set_column_tooltip(GTK_SCTREE(clist), pos, _("Locked"));
continue;
} else if (type == S_COL_STATUS) {
gtk_clist_set_column_title(clist, pos, title);
+ gtk_sctree_set_column_tooltip(GTK_SCTREE(clist), pos, _("Status"));
continue;
}
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
GtkCList *clist = GTK_CLIST(summaryview->ctree);
GtkCListCompareFunc cmp_func = NULL;
- START_TIMING("summary_sort");
+ START_TIMING("");
g_signal_handlers_block_by_func(G_OBJECT(summaryview->ctree),
G_CALLBACK(summary_tree_expanded), summaryview);
- gtk_clist_freeze(GTK_CLIST(summaryview->ctree));
+ summary_freeze(summaryview);
switch (sort_key) {
case SORT_BY_MARK:
main_window_cursor_wait(summaryview->mainwin);
- gtk_clist_freeze(clist);
gtk_clist_set_compare_func(clist, cmp_func);
gtk_clist_set_sort_type(clist, (GtkSortType)sort_type);
gtk_ctree_node_moveto(ctree, summaryview->selected, 0, 0.5, 0);
main_window_cursor_normal(summaryview->mainwin);
- gtk_clist_thaw(clist);
debug_print("done.\n");
STATUSBAR_POP(summaryview->mainwin);
}
unlock:
- gtk_clist_thaw(GTK_CLIST(summaryview->ctree));
+ summary_thaw(summaryview);
g_signal_handlers_unblock_by_func(G_OBJECT(summaryview->ctree),
G_CALLBACK(summary_tree_expanded), summaryview);
END_TIMING();
MsgInfo *msginfo;
GtkCTreeNode *node = NULL;
GHashTable *msgid_table;
- GHashTable *subject_table;
+ GHashTable *subject_table = NULL;
GSList * cur;
- START_TIMING("summary_set_ctree_from_list");
+ START_TIMING("");
if (!mlist) return;
msgid_table = g_hash_table_new(g_str_hash, g_str_equal);
summaryview->msgid_table = msgid_table;
- subject_table = g_hash_table_new(g_str_hash, g_str_equal);
- summaryview->subject_table = subject_table;
+
+ if (prefs_common.thread_by_subject) {
+ subject_table = g_hash_table_new(g_str_hash, g_str_equal);
+ summaryview->subject_table = subject_table;
+ } else {
+ summaryview->subject_table = NULL;
+ }
if (prefs_common.use_addr_book)
start_address_completion(NULL);
if (summaryview->threaded) {
GNode *root, *gnode;
- START_TIMING("summaryview_set_ctree_from_list(1)");
+ START_TIMING("threaded");
root = procmsg_get_thread_tree(mlist);
for (gnode = root->children; gnode != NULL;
END_TIMING();
} else {
gchar *text[N_SUMMARY_COLS];
- START_TIMING("summaryview_set_ctree_from_list(2)");
+ START_TIMING("unthreaded");
cur = mlist;
for (; mlist != NULL; mlist = mlist->next) {
msginfo = (MsgInfo *)mlist->data;
g_hash_table_insert(msgid_table,
msginfo->msgid, node);
- subject_table_insert(subject_table,
+ if (prefs_common.thread_by_subject)
+ subject_table_insert(subject_table,
msginfo->subject,
node);
}
if (debug_get_mode()) {
debug_print("\tmsgid hash table size = %d\n",
g_hash_table_size(msgid_table));
- debug_print("\tsubject hash table size = %d\n",
+ if (prefs_common.thread_by_subject)
+ debug_print("\tsubject hash table size = %d\n",
g_hash_table_size(subject_table));
}
node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
if (prefs_common.bold_unread) {
- START_TIMING("summaryview_set_ctree_from_list(3)");
+ START_TIMING("bold_unread");
while (node) {
GtkCTreeNode *next = GTK_CTREE_NODE_NEXT(node);
if (GTK_CTREE_ROW(node)->children)
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
MsgInfo *msginfo;
gint val;
- START_TIMING("summary_display_msg_full");
+ START_TIMING("");
if (!new_window) {
if (summaryview->displayed == row)
return;
void summary_cancel(SummaryView *summaryview)
{
MsgInfo * msginfo;
- GtkCList *clist = GTK_CLIST(summaryview->ctree);
msginfo = gtk_ctree_node_get_row_data(GTK_CTREE(summaryview->ctree),
summaryview->selected);
summary_lock(summaryview);
- gtk_clist_freeze(clist);
+ summary_freeze(summaryview);
summary_update_status(summaryview);
summary_status_show(summaryview);
- gtk_clist_thaw(clist);
+ summary_thaw(summaryview);
summary_unlock(summaryview);
}
if ( aval==0 ) { /* append */
if (append_file(src, dest, TRUE) < 0)
- alertpanel_error(_("Can't save the file '%s'."), tmp);
+ alertpanel_error(_("Couldn't save the file '%s'."), tmp);
} else { /* overwrite */
if (copy_file(src, dest, TRUE) < 0)
- alertpanel_error(_("Can't save the file '%s'."), tmp);
+ alertpanel_error(_("Couldn't save the file '%s'."), tmp);
}
g_free(src);
if (!msginfo) break;
src = procmsg_get_message_file(msginfo);
if (append_file(src, dest, TRUE) < 0)
- alertpanel_error(_("Can't save the file '%s'."), tmp);
+ alertpanel_error(_("Couldn't save the file '%s'."), tmp);
}
g_free(src);
}
if (summary_is_locked(summaryview)) return FALSE;
summary_lock(summaryview);
- gtk_clist_freeze(clist);
+ summary_freeze(summaryview);
main_window_cursor_wait(summaryview->mainwin);
summary_thread_init(summaryview);
}
- gtk_clist_thaw(GTK_CLIST(summaryview->ctree));
+ summary_thaw(summaryview);
summaryview->selected = clist->selection ?
GTK_CTREE_NODE(clist->selection->data) : NULL;
msginfo->msgid))
g_hash_table_remove(summaryview->msgid_table,
msginfo->msgid);
- if (msginfo->subject && *msginfo->subject &&
+ if (prefs_common.thread_by_subject &&
+ msginfo->subject && *msginfo->subject &&
node == subject_table_lookup(summaryview->subject_table,
msginfo->subject)) {
subject_table_remove(summaryview->subject_table,
g_hash_table_remove(summaryview->msgid_table,
msginfo->msgid);
}
- if (msginfo->subject && *msginfo->subject &&
+ if (prefs_common.thread_by_subject &&
+ msginfo->subject && *msginfo->subject &&
node == subject_table_lookup(summaryview->subject_table,
msginfo->subject)) {
subject_table_remove(summaryview->subject_table,
g_signal_handlers_block_by_func(G_OBJECT(ctree),
G_CALLBACK(summary_tree_expanded), summaryview);
- gtk_clist_freeze(GTK_CLIST(ctree));
+ summary_freeze(summaryview);
node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
while (node) {
gtkut_ctree_set_focus_row(ctree, summaryview->selected);
- gtk_clist_thaw(GTK_CLIST(ctree));
+ summary_thaw(summaryview);
g_signal_handlers_unblock_by_func(G_OBJECT(ctree),
G_CALLBACK(summary_tree_expanded), summaryview);
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
GtkCTreeNode *node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
GtkCTreeNode *next;
- START_TIMING("summary_thread_init");
+ START_TIMING("");
if (!summaryview->thread_collapsed) {
g_signal_handlers_block_by_func(G_OBJECT(ctree),
G_CALLBACK(summary_tree_expanded), summaryview);
g_signal_handlers_block_by_func(G_OBJECT(ctree),
G_CALLBACK(summary_tree_expanded), summaryview);
- gtk_clist_freeze(GTK_CLIST(ctree));
+ summary_freeze(summaryview);
while (node) {
if (GTK_CTREE_ROW(node)->children) {
node = GTK_CTREE_NODE_NEXT(node);
}
- gtk_clist_thaw(GTK_CLIST(ctree));
+ summary_thaw(summaryview);
g_signal_handlers_unblock_by_func(G_OBJECT(ctree),
G_CALLBACK(summary_tree_expanded), summaryview);
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
GtkCTreeNode *node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
- gtk_clist_freeze(GTK_CLIST(ctree));
+ summary_freeze(summaryview);
while (node) {
if (GTK_CTREE_ROW(node)->children)
node = GTK_CTREE_ROW(node)->sibling;
}
- gtk_clist_thaw(GTK_CLIST(ctree));
+ summary_thaw(summaryview);
summaryview->thread_collapsed = TRUE;
_("Apply these rules regardless of the account they belong to"));
account_rules_user_current = gtk_radio_button_new_with_label_from_widget
(GTK_RADIO_BUTTON(account_rules_skip),
- _("Use current account for these rules"));
+ _("Apply these rules if they apply to the current account"));
gtk_box_pack_start (GTK_BOX (vbox), account_rules_skip, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox), account_rules_force, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox), account_rules_user_current, FALSE, FALSE, 0);
STATUSBAR_PUSH(summaryview->mainwin, _("Filtering..."));
main_window_cursor_wait(summaryview->mainwin);
- gtk_clist_freeze(GTK_CLIST(summaryview->ctree));
+ summary_freeze(summaryview);
if (selected_only) {
GList *cur;
}
g_slist_free(mlist);
- gtk_clist_thaw(GTK_CLIST(summaryview->ctree));
+ summary_thaw(summaryview);
folder_item_update_thaw();
debug_print("done.\n");
g_list_length(GTK_CLIST(ctree)->row_list)-1);
if (next) {
gtk_sctree_select_with_state
- (GTK_SCTREE(ctree), next, event->state);
+ (GTK_SCTREE(ctree), next, (event->state & ~GDK_CONTROL_MASK) );
/* Deprecated - what are the non-deprecated equivalents? */
if (gtk_ctree_node_is_visible(GTK_CTREE(ctree), next) != GTK_VISIBILITY_FULL)
FolderSortKey sort_key)
{
GtkCTreeNode *node = NULL;
- START_TIMING("summary_sort_by_column_click");
+ START_TIMING("");
if (summaryview->sort_key == sort_key)
summary_sort(summaryview, sort_key,
summaryview->sort_type == SORT_ASCENDING
node = GTK_CTREE_NODE(GTK_CLIST(summaryview->ctree)->row_list);
- gtk_clist_freeze(GTK_CLIST(summaryview->ctree));
+ summary_freeze(summaryview);
if (prefs_common.bold_unread) {
while (node) {
GtkCTreeNode *next = GTK_CTREE_NODE_NEXT(node);
node = next;
}
}
- gtk_clist_thaw(GTK_CLIST(summaryview->ctree));
+ summary_thaw(summaryview);
END_TIMING();
}
void summary_set_prefs_from_folderitem(SummaryView *summaryview, FolderItem *item)
{
+ FolderSortKey sort_key;
+ FolderSortType sort_type;
g_return_if_fail(summaryview != NULL);
g_return_if_fail(item != NULL);
summaryview->simplify_subject_preg = summary_compile_simplify_regexp(item->prefs->simplify_subject_regexp);
/* Sorting */
- summaryview->sort_key = item->sort_key;
- summaryview->sort_type = item->sort_type;
-
+ if (folder_get_sort_type(item->folder, &sort_key, &sort_type)) {
+ summaryview->sort_key = sort_key;
+ summaryview->sort_type = sort_type;
+ } else {
+ summaryview->sort_key = item->sort_key;
+ summaryview->sort_type = item->sort_type;
+ }
/* Threading */
summaryview->threaded = item->threaded;
summaryview->thread_collapsed = item->thread_collapsed;