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;
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;
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);
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) {
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(new_subscr);
- g_slist_free(new_subscr);
+ slist_free_strings_full(new_subscr);
folder_write_list();
}
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;
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))
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) {
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);
}