fix a bug after "check for new messages"; remove unnecessary check
[claws.git] / src / folderview.c
index cee090a58bd86926f89c8686692e1382a68cf783..59ebec08cc3ec395e8ab34557d97ccbe71c03d96 100644 (file)
@@ -62,7 +62,6 @@
 #include "folder.h"
 #include "inc.h"
 #include "statusbar.h"
-#include "toolbar.h"
 
 typedef enum
 {
@@ -786,19 +785,11 @@ static GtkWidget *label_window_create(const gchar *str)
 void folderview_rescan_tree(Folder *folder)
 {
        GtkWidget *window;
-       AlertValue avalue;
 
        g_return_if_fail(folder != NULL);
 
        if (!folder->scan_tree) return;
 
-       avalue = alertpanel
-               (_("Rescan folder tree"),
-                _("All previous settings for each folders will be lost.\n"
-                  "Continue?"),
-                _("Yes"), _("No"), NULL);
-       if (avalue != G_ALERTDEFAULT) return;
-
        inc_lock();
        window = label_window_create(_("Rescanning folder tree..."));
 
@@ -1227,6 +1218,8 @@ static void folderview_update_node(FolderView *folderview, GtkCTreeNode *node)
 
        gtk_ctree_node_set_row_style(ctree, node, style);
 
+       item->need_update = FALSE;
+
        if ((node = gtkut_ctree_find_collapsed_parent(ctree, node)) != NULL)
                folderview_update_node(folderview, node);
 }
@@ -1253,6 +1246,31 @@ void folderview_update_item(FolderItem *item, gboolean update_summary)
        }
 }
 
+void folderview_update_items_when_required(gboolean update_summary)
+{
+       GList *list;
+       FolderView *folderview;
+       GtkCTree *ctree;
+       GtkCTreeNode *node;
+       FolderItem *item;
+
+       for (list = folderview_list; list != NULL; list = list->next) {
+               folderview = (FolderView *)list->data;
+               ctree = GTK_CTREE(folderview->ctree);
+
+               for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+                    node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
+                       item = gtk_ctree_node_get_row_data(ctree, node);
+
+                       if (item->need_update) {
+                               folderview_update_node(folderview, node);
+                               if (update_summary && folderview->opened == node)
+                                       summary_show(folderview->summaryview, item);
+                       }
+               }
+       }
+}
+
 static void folderview_update_item_foreach_func(gpointer key, gpointer val,
                                                gpointer data)
 {
@@ -1822,6 +1840,12 @@ static void folderview_update_tree_cb(FolderView *folderview, guint action,
                folderview_check_new(item->folder);
        else
                folderview_rescan_tree(item->folder);
+       
+       if (folderview->opened) {
+               item = gtk_ctree_node_get_row_data(ctree, folderview->opened);
+               if (item)
+                       folderview_update_item(item, TRUE);
+       }
 }
 
 static void folderview_new_folder_cb(FolderView *folderview, guint action,
@@ -1866,7 +1890,7 @@ static void folderview_new_folder_cb(FolderView *folderview, guint action,
                return;
        }
 
-       new_item = item->folder->create_folder(item->folder, item, new_folder);
+       new_item = folder_create_folder(item, new_folder);
        if (!new_item) {
                alertpanel_error(_("Can't create the folder `%s'."), name);
                g_free(new_folder);
@@ -1884,6 +1908,8 @@ static void folderview_new_folder_cb(FolderView *folderview, guint action,
                                     FALSE, FALSE);
        gtk_ctree_expand(ctree, folderview->selected);
        gtk_ctree_node_set_row_data(ctree, node, new_item);
+       if (normal_style)
+               gtk_ctree_node_set_row_style(ctree, node, normal_style);
        folderview_sort_folders(folderview, folderview->selected, item->folder);
 
        gtk_clist_thaw(GTK_CLIST(ctree));
@@ -1920,7 +1946,7 @@ static void folderview_new_mbox_folder_cb(FolderView *folderview, guint action,
                return;
        }
 
-       new_item = item->folder->create_folder(item->folder, item, new_folder);
+       new_item = folder_create_folder(item, new_folder);
        g_free(new_folder);
        if (!new_item) return;
 
@@ -1934,6 +1960,8 @@ static void folderview_new_mbox_folder_cb(FolderView *folderview, guint action,
                                     FALSE, FALSE);
        gtk_ctree_expand(ctree, folderview->selected);
        gtk_ctree_node_set_row_data(ctree, node, new_item);
+       if (normal_style)
+               gtk_ctree_node_set_row_style(ctree, node, normal_style);
        folderview_sort_folders(folderview, folderview->selected, item->folder);
 
        gtk_clist_thaw(GTK_CLIST(ctree));
@@ -2230,7 +2258,7 @@ static void folderview_new_imap_folder_cb(FolderView *folderview, guint action,
                return;
        }
 
-       new_item = item->folder->create_folder(item->folder, item, new_folder);
+       new_item = folder_create_folder(item, new_folder);
        if (!new_item) {
                alertpanel_error(_("Can't create the folder `%s'."), name);
                g_free(new_folder);
@@ -2248,6 +2276,8 @@ static void folderview_new_imap_folder_cb(FolderView *folderview, guint action,
                                     FALSE, FALSE);
        gtk_ctree_expand(ctree, folderview->selected);
        gtk_ctree_node_set_row_data(ctree, node, new_item);
+       if (normal_style)
+               gtk_ctree_node_set_row_style(ctree, node, normal_style);
        folderview_sort_folders(folderview, folderview->selected, item->folder);
 
        gtk_clist_thaw(GTK_CLIST(ctree));