( cvs diff -u -r 1.382.2.152 -r 1.382.2.153 src/compose.c; cvs diff -u -r 1.204.2.52 -r 1.204.2.53 src/prefs_common.c; cvs diff -u -r 1.103.2.25 -r 1.103.2.26 src/prefs_common.h; cvs diff -u -r 1.1.2.6 -r 1.1.2.7 src/prefs_wrapping.c; ) > 1.9.13cvs41.patchset
( cvs diff -u -r 1.382.2.153 -r 1.382.2.154 src/compose.c; cvs diff -u -r 1.49.2.54 -r 1.49.2.55 src/procmime.c; cvs diff -u -r 1.105.2.31 -r 1.105.2.32 src/prefs_account.c; ) > 1.9.13cvs42.patchset
( cvs diff -u -r 1.149.2.31 -r 1.149.2.32 src/inc.c; cvs diff -u -r 1.204.2.53 -r 1.204.2.54 src/prefs_common.c; cvs diff -u -r 1.103.2.26 -r 1.103.2.27 src/prefs_common.h; ) > 1.9.13cvs43.patchset
+( cvs diff -u -r 1.213.2.52 -r 1.213.2.53 src/folder.c; ) > 1.9.13cvs44.patchset
g_node_append(parent->node, item->node);
}
-static gboolean folder_item_remove_func(GNode *node, gpointer data)
+void folder_item_remove(FolderItem *item)
{
- FolderItem *item = FOLDER_ITEM(node->data);
+ GNode *node, *start_node;
FolderUpdateData hookdata;
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+ g_return_if_fail(item->folder->node != NULL);
+
+ start_node = node = item->node;
+
+ node = item->folder->node;
+
+ node = g_node_find(node, G_PRE_ORDER, G_TRAVERSE_ALL, item);
+ node = node->children;
+
+ /* remove my children */
+ while (node != NULL) {
+ if (node && node->data) {
+ FolderItem *sub_item = (FolderItem*) node->data;
+ node = node->next;
+ folder_item_remove(sub_item);
+ }
+ }
+
+ /* remove myself */
if (item->cache != NULL) {
msgcache_destroy(item->cache);
item->cache = NULL;
hookdata.item = item;
hooks_invoke(FOLDER_UPDATE_HOOKLIST, &hookdata);
- folder_item_destroy(item);
-
- return FALSE;
-}
-
-void folder_item_remove(FolderItem *item)
-{
- GNode *node;
-
- g_return_if_fail(item != NULL);
- g_return_if_fail(item->folder != NULL);
- g_return_if_fail(item->node != NULL);
- node = item->node;
+ node = start_node;
if (item->folder->node == node)
item->folder->node = NULL;
- g_node_traverse(node, G_POST_ORDER, G_TRAVERSE_ALL, -1,
- folder_item_remove_func, NULL);
+ folder_item_destroy(item);
+
g_node_destroy(node);
}