Remove last outside gtk_cmclist_freeze/thaw for summaryview&folderview ctrees.
[claws.git] / src / news_gtk.c
index c848853ab16dd7200660b69d175efe1cba0b0aff..e49c2b8c40e94fb3ce4d7ec5319f898bb0d6fa5e 100644 (file)
@@ -149,8 +149,6 @@ static FolderItem *news_find_child_item(FolderItem *item, const gchar *path)
 static void subscribe_newsgroup_cb(GtkAction *action, gpointer data)
 {
        FolderView *folderview = (FolderView *)data;
-       GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
-       GtkCMCTreeNode *servernode, *node;
        Folder *folder;
        FolderItem *item;
        FolderItem *rootitem;
@@ -160,10 +158,7 @@ static void subscribe_newsgroup_cb(GtkAction *action, gpointer data)
        GNode *gnode;
        MainWindow *mainwin = mainwindow_get_mainwindow();
        
-       if (!folderview->selected) return;
-
-       item = gtk_cmctree_node_get_row_data(ctree, folderview->selected);
-       cm_return_if_fail(item != NULL);
+       if ((item = folderview_get_selected_item(folderview)) == NULL) return;
 
        if (mainwin->lock_count || news_folder_locked(item->folder))
                return;
@@ -173,12 +168,8 @@ static void subscribe_newsgroup_cb(GtkAction *action, gpointer data)
        cm_return_if_fail(FOLDER_TYPE(folder) == F_NEWS);
        cm_return_if_fail(folder->account != NULL);
 
-       if (GTK_CMCTREE_ROW(folderview->selected)->parent != NULL)
-               servernode = GTK_CMCTREE_ROW(folderview->selected)->parent;
-       else
-               servernode = folderview->selected;
-
-       rootitem = gtk_cmctree_node_get_row_data(ctree, servernode);
+       if ((rootitem = folder_item_parent(item)) == NULL)
+               rootitem = item;
 
        new_subscr = grouplist_dialog(folder);
 
@@ -193,24 +184,18 @@ static void subscribe_newsgroup_cb(GtkAction *action, gpointer data)
                        continue;
                }
 
-               node = gtk_cmctree_find_by_row_data(ctree, servernode, item);
-               if (!node) {
-                       gnode = next;
-                       continue;
-               }
-
-               if (folderview->opened == node) {
+               if (folderview_get_opened_item(folderview) == item) {
                        summary_clear_all(folderview->summaryview);
-                       folderview->opened = NULL;
+                       folderview_close_opened(folderview, TRUE);
                }
 
-               gtk_cmctree_remove_node(ctree, node);
+               folderview_remove_item(folderview, item);
                folder_item_remove(item);
 
                gnode = next;
        }
 
-       gtk_cmclist_freeze(GTK_CMCLIST(ctree));
+       folderview_freeze(folderview);
 
        /* add subscribed newsgroups */
        for (cur = new_subscr; cur != NULL; cur = cur->next) {
@@ -226,10 +211,11 @@ static void subscribe_newsgroup_cb(GtkAction *action, gpointer data)
                hookdata.folder = newitem->folder;
                hookdata.update_flags = FOLDER_TREE_CHANGED | FOLDER_ADD_FOLDERITEM;
                hookdata.item = newitem;
+               hookdata.item2 = NULL;
                hooks_invoke(FOLDER_UPDATE_HOOKLIST, &hookdata);
        }
 
-       gtk_cmclist_thaw(GTK_CMCLIST(ctree));
+       folderview_thaw(folderview);
 
        slist_free_strings_full(new_subscr);
 
@@ -239,7 +225,6 @@ static void subscribe_newsgroup_cb(GtkAction *action, gpointer data)
 static void unsubscribe_newsgroup_cb(GtkAction *action, gpointer data)
 {
        FolderView *folderview = (FolderView *)data;
-       GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
        FolderItem *item;
        gchar *name;
        gchar *message;
@@ -249,7 +234,7 @@ static void unsubscribe_newsgroup_cb(GtkAction *action, gpointer data)
        
        if (!folderview->selected) return;
 
-       item = gtk_cmctree_node_get_row_data(ctree, folderview->selected);
+       item = folderview_get_selected_item(folderview);
        cm_return_if_fail(item != NULL);
 
        if (mainwin->lock_count || news_folder_locked(item->folder))
@@ -270,9 +255,9 @@ static void unsubscribe_newsgroup_cb(GtkAction *action, gpointer data)
        g_free(name);
        if (avalue != G_ALERTALTERNATE) return;
 
-       if (folderview->opened == folderview->selected) {
+       if (item == folderview_get_opened_item(folderview)) {
                summary_clear_all(folderview->summaryview);
-               folderview->opened = NULL;
+               folderview_close_opened(folderview, TRUE);
        }
 
        if(item->folder->klass->remove_folder(item->folder, item) < 0) {
@@ -410,11 +395,10 @@ void news_gtk_synchronise(FolderItem *item, gint days)
 static void download_cb(GtkAction *action, gpointer data)
 {
        FolderView *folderview = (FolderView *)data;
-       GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
        FolderItem *item;
 
        if (!folderview->selected) return;
 
-       item = gtk_cmctree_node_get_row_data(ctree, folderview->selected);
+       item = folderview_get_selected_item(folderview);
        news_gtk_synchronise(item, 0);
 }