#include "folderutils.h"
#include "partial_download.h"
#include "prefs_folder_column.h"
+#include "filtering.h"
#define COL_FOLDER_WIDTH 150
#define COL_NUM_WIDTH 32
GtkWidget *widget)
{
FolderItem *item;
-
+ AlertValue val;
+
item = folderview_get_selected_item(folderview);
if (item == NULL)
return;
+ if (prefs_common.ask_mark_all_read) {
+ val = alertpanel_full(_("Mark all as read"),
+ _("Do you really want to mark all mails in this "
+ "folder as read ?"), GTK_STOCK_YES, GTK_STOCK_NO, NULL,
+ TRUE, NULL, ALERT_QUESTION, G_ALERTDEFAULT);
+
+ if (val == G_ALERTALTERNATE ||
+ val == (G_ALERTALTERNATE|G_ALERTDISABLE))
+ return;
+ else if (val == (G_ALERTDEFAULT|G_ALERTDISABLE))
+ prefs_common.ask_mark_all_read = FALSE;
+ }
+
summary_lock(folderview->summaryview);
folder_item_update_freeze();
if (folderview->summaryview->folder_item == item)
return window;
}
-void folderview_rescan_tree(Folder *folder)
+void folderview_rescan_tree(Folder *folder, gboolean rebuild)
{
GtkWidget *window;
if (!folder->klass->scan_tree) return;
+ if (rebuild &&
+ alertpanel_full(_("Rebuild folder tree"),
+ _("Rebuilding the folder tree will remove "
+ "local caches. Do you want to continue?"),
+ GTK_STOCK_YES, GTK_STOCK_NO, NULL, FALSE,
+ NULL, ALERT_WARNING, G_ALERTALTERNATE)
+ != G_ALERTDEFAULT) {
+ return;
+ }
+
inc_lock();
- window = label_window_create(_("Rebuilding folder tree..."));
+ if (rebuild)
+ window = label_window_create(_("Rebuilding folder tree..."));
+ else
+ window = label_window_create(_("Scanning folder tree..."));
folder_set_ui_func(folder, folderview_scan_tree_func, NULL);
- folder_scan_tree(folder);
+ folder_scan_tree(folder, rebuild);
folder_set_ui_func(folder, NULL, NULL);
folderview_set_all();
inc_lock();
main_window_lock(folderview->mainwin);
- gtk_widget_set_sensitive(folderview->ctree, FALSE);
for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
former_new_msgs += former_new;
}
- gtk_widget_set_sensitive(folderview->ctree, TRUE);
main_window_unlock(folderview->mainwin);
inc_unlock();
}
return FALSE;
}
-gboolean folderview_process_open(gpointer data)
+static void summary_freeze_for_proc(gpointer data)
+{
+ FolderView *folderview = (FolderView *)data;
+ debug_print("freezing during processing...\n");
+ gtk_clist_freeze(GTK_CLIST(folderview->summaryview->ctree));
+}
+
+static void summary_thaw_for_proc(gpointer data)
+{
+ FolderView *folderview = (FolderView *)data;
+ debug_print("thawing after processing\n");
+ gtk_clist_thaw(GTK_CLIST(folderview->summaryview->ctree));
+}
+
+void folderview_process_open(FolderView *folderview, FolderItem *item)
+{
+ if (!item)
+ return;
+
+ folder_item_update_freeze();
+ folder_item_process_open(item,
+ summary_freeze_for_proc,
+ summary_thaw_for_proc,
+ folderview);
+ folder_item_update_thaw();
+
+ return;
+}
+
+#if 0
+gboolean folderview_process_open_cb(gpointer data)
{
FolderView *folderview = (FolderView *)data;
FolderItem *item = NULL;
if (!item)
return FALSE;
- folder_item_update_freeze();
- folder_item_process_open(item);
- folder_item_update_thaw();
+ folderview_process_open(folderview, item);
return FALSE;
}
+#endif
static void folderview_selected(GtkCTree *ctree, GtkCTreeNode *row,
gint column, FolderView *folderview)
return;
}
+ folderview_process_open(folderview, item);
main_window_cursor_normal(folderview->mainwin);
gtk_ctree_node_moveto(ctree, row, -1, 0.5, 0);
}
- g_timeout_add(0, folderview_process_open, folderview);
-
STATUSBAR_POP(folderview->mainwin);
folderview->open_folder = FALSE;
void folderview_reflect_prefs(void)
{
+ static gchar *last_font = NULL;
+ gboolean update_font = TRUE;
FolderView *folderview = mainwindow_get_mainwindow()->folderview;
- FolderItem *item = folderview_get_selected_item(folderview);
- normal_style = normal_color_style = bold_style =
- bold_color_style = bold_tgtfold_style = NULL;
+ FolderItem *item = folderview_get_selected_item(folderview);
+ GtkAdjustment *pos = gtk_scrolled_window_get_vadjustment(
+ GTK_SCROLLED_WINDOW(folderview->scrolledwin));
+ gint height = pos->value;
- folderview_init(folderview);
+ if (last_font && !strcmp(last_font, NORMAL_FONT))
+ update_font = FALSE;
+
+ if (last_font)
+ g_free(last_font);
+
+ last_font = g_strdup(NORMAL_FONT);
+
+ if (update_font) {
+ normal_style = normal_color_style = bold_style =
+ bold_color_style = bold_tgtfold_style = NULL;
+
+ folderview_init(folderview);
+ }
+ gtk_clist_freeze(GTK_CLIST(folderview->ctree));
folderview_column_set_titles(folderview);
folderview_set_all();
+
+ g_signal_handlers_block_by_func
+ (G_OBJECT(folderview->ctree),
+ G_CALLBACK(folderview_selected), folderview);
+
if (item)
folderview_select(folderview, item);
+
+ g_signal_handlers_unblock_by_func
+ (G_OBJECT(folderview->ctree),
+ G_CALLBACK(folderview_selected), folderview);
+
+ pos = gtk_scrolled_window_get_vadjustment(
+ GTK_SCROLLED_WINDOW(folderview->scrolledwin));
+ gtk_adjustment_set_value(pos, height);
+ gtk_clist_thaw(GTK_CLIST(folderview->ctree));
}
static void drag_state_stop(FolderView *folderview)