fix bug where unsubscribing a newsgroup would destroy (most of the) filtering rules
[claws.git] / src / folderview.c
index 053b3b6905e1ba7ac65fefdad3648e95a98ece10..ccf4337e3a6694d7515a1a1a5a76d3c8b0a884f1 100644 (file)
@@ -2106,13 +2106,14 @@ static void folderview_rename_folder_cb(FolderView *folderview, guint action,
        }
 
        Xstrdup_a(old_path, item->path, {g_free(new_folder); return;});
-       old_id = folder_item_get_identifier(item);
 
        if (item->folder->klass->rename_folder(item->folder, item, new_folder) < 0) {
-               g_free(old_id);
+               alertpanel_error(_("The folder could not be renamed.\n"
+                                  "The new folder name could not be allowed."));
                return;
        }
 
+       old_id = folder_item_get_identifier(item);
        /* if (FOLDER_TYPE(item->folder) == F_MH)
                prefs_filtering_rename_path(old_path, item->path); */
        new_id = folder_item_get_identifier(item);
@@ -2265,9 +2266,10 @@ static void folderview_rm_imap_server_cb(FolderView *folderview, guint action,
        }
 
        account = item->folder->account;
+       folderview_unselect(folderview);
+       summary_clear_all(folderview->summaryview);
        folder_destroy(item->folder);
        account_destroy(account);
-       gtk_ctree_remove_node(ctree, folderview->selected);
        account_set_menu();
        main_window_reflect_prefs_all();
        folder_write_list();
@@ -2277,6 +2279,7 @@ static void folderview_new_news_group_cb(FolderView *folderview, guint action,
                                         GtkWidget *widget)
 {
        GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+       gchar *text[N_FOLDER_COLS] = {NULL, "0", "0", "0"};
        GtkCTreeNode *servernode, *node;
        Folder *folder;
        FolderItem *item;
@@ -2341,11 +2344,20 @@ static void folderview_new_news_group_cb(FolderView *folderview, guint action,
                if (folder_find_child_item_by_name(rootitem, name) != NULL)
                        continue;
 
+               text[COL_FOLDER] = name;
+               node = gtk_ctree_insert_node(ctree, servernode, NULL, text,
+                                            FOLDER_SPACING,
+                                            folderxpm, folderxpmmask,
+                                            folderopenxpm, folderopenxpmmask,
+                                            FALSE, FALSE);
+               gtk_ctree_expand(ctree, servernode);
+
                newitem = folder_item_new(folder, name, name);
                folder_item_append(rootitem, newitem);
-               folderview_append_item(newitem);
+               gtk_ctree_node_set_row_data(ctree, node, newitem);
        }
 
+       folderview_sort_folders(folderview, servernode, folder);
        gtk_clist_thaw(GTK_CLIST(ctree));
 
        slist_free_strings(new_subscr);
@@ -2361,6 +2373,7 @@ static void folderview_rm_news_group_cb(FolderView *folderview, guint action,
        FolderItem *item;
        gchar *name;
        gchar *message;
+       gchar *old_id;
        AlertValue avalue;
 
        if (!folderview->selected) return;
@@ -2371,6 +2384,8 @@ static void folderview_rm_news_group_cb(FolderView *folderview, guint action,
        g_return_if_fail(FOLDER_TYPE(item->folder) == F_NEWS);
        g_return_if_fail(item->folder->account != NULL);
 
+       old_id = folder_item_get_identifier(item);
+
        name = trim_string(item->path, 32);
        message = g_strdup_printf(_("Really delete newsgroup `%s'?"), name);
        avalue = alertpanel(_("Delete newsgroup"), message,
@@ -2387,7 +2402,8 @@ static void folderview_rm_news_group_cb(FolderView *folderview, guint action,
        folder_item_remove(item);
        folder_write_list();
        
-       prefs_filtering_delete_path(name);
+       prefs_filtering_delete_path(old_id);
+       g_free(old_id);
 }
 
 static void folderview_rm_news_server_cb(FolderView *folderview, guint action,
@@ -2426,9 +2442,10 @@ static void folderview_rm_news_server_cb(FolderView *folderview, guint action,
        }
 
        account = item->folder->account;
-       folder_destroy(item->folder);
+       folderview_unselect(folderview);
+       summary_clear_all(folderview->summaryview);
+       folder_destroy(item->folder);
        account_destroy(account);
-       gtk_ctree_remove_node(ctree, folderview->selected);
        account_set_menu();
        main_window_reflect_prefs_all();
        folder_write_list();
@@ -2836,9 +2853,7 @@ static void folderview_drag_received_cb(GtkWidget        *widget,
                                case GDK_ACTION_MOVE:
                                case GDK_ACTION_DEFAULT:
                                default:
-                       if (FOLDER_TYPE(src_item->folder) != FOLDER_TYPE(item->folder) ||
-                           (FOLDER_TYPE(item->folder) == F_IMAP &&
-                            src_item->folder != item->folder))
+                       if (FOLDER_TYPE(src_item->folder) == F_NEWS)
                                summary_copy_selected_to(folderview->summaryview, item);
                        else
                                summary_move_selected_to(folderview->summaryview, item);