revise label colouring, add filter action for label colouring, fix filtering issues
[claws.git] / src / folderview.c
index b76c60fdffc1db1e66580d81c2b9b031d524fb2a..07df785085b8240c783ac8706534e63cc42168ec 100644 (file)
@@ -43,6 +43,7 @@
 #include "folderview.h"
 #include "summaryview.h"
 #include "inputdialog.h"
+#include "grouplistdialog.h"
 #include "manage_window.h"
 #include "alertpanel.h"
 #include "menu.h"
@@ -53,7 +54,6 @@
 #include "prefs_account.h"
 #include "account.h"
 #include "folder.h"
-#include "grouplist_dialog.h"
 
 #include "pixmaps/inbox.xpm"
 #include "pixmaps/outbox.xpm"
@@ -356,7 +356,6 @@ FolderView *folderview_create(void)
        gtk_signal_connect(GTK_OBJECT(ctree), "tree_select_row",
                           GTK_SIGNAL_FUNC(folderview_selected), folderview);
 
-
        gtk_signal_connect_after(GTK_OBJECT(ctree), "tree_expand",
                                 GTK_SIGNAL_FUNC(folderview_tree_expanded),
                                 folderview);
@@ -471,8 +470,10 @@ void folderview_select(FolderView *folderview, FolderItem *item)
 
        if (!item) return;
 
+       debug_print("*** select enter\n");
        node = gtk_ctree_find_by_row_data(ctree, NULL, item);
        if (node) folderview_select_node(folderview, node);
+       debug_print("*** select leave\n");
 }
 
 static void folderview_select_node(FolderView *folderview, GtkCTreeNode *node)
@@ -830,12 +831,10 @@ static void folderview_update_node(FolderView *folderview, GtkCTreeNode *node)
                                name = " (News)"; break;
                        default:
                                name = "";
-                               break;
                        }
                        name = g_strconcat(item->name, name, NULL);
                } else
                        name = g_strdup(item->name);
-               break;                  
        }
 
        if (!GTK_CTREE_ROW(node)->expanded &&
@@ -979,8 +978,18 @@ static gboolean folderview_gnode_func(GtkCTree *ctree, guint depth,
 static void folderview_expand_func(GtkCTree *ctree, GtkCTreeNode *node,
                                   gpointer data)
 {
-       if (GTK_CTREE_ROW(node)->children)
-               gtk_ctree_expand(ctree, node);
+       FolderView *folderview = (FolderView *)data;
+       FolderItem *item;
+
+       if (GTK_CTREE_ROW(node)->children) {
+               item = gtk_ctree_node_get_row_data(ctree, node);
+               g_return_if_fail(item != NULL);
+
+               if (!item->collapsed)
+                       gtk_ctree_expand(ctree, node);
+               else
+                       folderview_update_node(folderview, node);
+       }
 }
 
 #define SET_SPECIAL_FOLDER(ctree, item) \
@@ -1300,7 +1309,6 @@ static void folderview_key_pressed(GtkWidget *widget, GdkEventKey *event,
                BREAK_ON_MODIFIER_KEY();
                summary_pass_key_press_event(folderview->summaryview, event);
        default:
-               break;
        }
 }
 
@@ -1313,6 +1321,8 @@ static void folderview_selected(GtkCTree *ctree, GtkCTreeNode *row,
 
        folderview->selected = row;
 
+       debug_print("*** selected enter\n");
+
        if (folderview->opened == row) {
                folderview->open_folder = FALSE;
                return;
@@ -1347,6 +1357,7 @@ static void folderview_selected(GtkCTree *ctree, GtkCTreeNode *row,
                        gdk_pointer_ungrab(GDK_CURRENT_TIME);
        }
 
+       debug_print("*** summary_show %s\n", item->name);
        opened = summary_show(folderview->summaryview, item, FALSE);
 
        if (!opened) {
@@ -1357,17 +1368,30 @@ static void folderview_selected(GtkCTree *ctree, GtkCTreeNode *row,
 
        folderview->open_folder = FALSE;
        can_select = TRUE;
+
+
+       debug_print("*** selected leave\n");
 }
 
 static void folderview_tree_expanded(GtkCTree *ctree, GtkCTreeNode *node,
                                     FolderView *folderview)
 {
+       FolderItem *item;
+
+       item = gtk_ctree_node_get_row_data(ctree, node);
+       g_return_if_fail(item != NULL);
+       item->collapsed = FALSE;
        folderview_update_node(folderview, node);
 }
 
 static void folderview_tree_collapsed(GtkCTree *ctree, GtkCTreeNode *node,
                                      FolderView *folderview)
 {
+       FolderItem *item;
+
+       item = gtk_ctree_node_get_row_data(ctree, node);
+       g_return_if_fail(item != NULL);
+       item->collapsed= TRUE;
        folderview_update_node(folderview, node);
 }
 
@@ -1398,7 +1422,6 @@ static void folderview_col_resized(GtkCList *clist, gint column, gint width,
                prefs_common.folder_col_total = width;
                break;
        default:
-               break;
        }
 }
 
@@ -1834,6 +1857,10 @@ static void folderview_rm_imap_folder_cb(FolderView *folderview, guint action,
        if (item->folder->remove_folder(item->folder, item) < 0) {
                alertpanel_error(_("Can't remove the folder `%s'."),
                                 item->path);
+               if (folderview->opened == folderview->selected)
+                       summary_show(folderview->summaryview,
+                                    folderview->summaryview->folder_item,
+                                    FALSE);
                return;
        }
 
@@ -1908,7 +1935,7 @@ static void folderview_new_news_group_cb(FolderView *folderview, guint action,
        g_return_if_fail(item->folder->type == F_NEWS);
        g_return_if_fail(item->folder->account != NULL);
 
-       new_group = grouplist_dialog(item);
+       new_group = grouplist_dialog(item->folder);
        if (!new_group) return;
 
        if (GTK_CTREE_ROW(folderview->selected)->parent != NULL)
@@ -2051,7 +2078,6 @@ static gboolean folderview_drag_motion_cb(GtkWidget      *widget,
                                    acceptable = TRUE;
                                break;
                        default:
-                               break;
                        }
                }
        }