+2003-09-07 [christoph] 0.9.4claws71
+
+ * src/compose.c
+ replace '\n' and '\r' before removing trailing spaces
+
+ * src/folder.[ch]
+ * src/folderview.c
+ add information about new or removed items in folder tree change
+ notification and use this in folderview to add and remove only
+ the appected items and not refresh the whole tree
+
2003-09-07 [match] 0.9.4claws70
+
* src/Makefile.am
* src/addr_compl.c
* src/addressbook.c
item->node = g_node_append_data(parent->node, item);
hookdata.folder = item->folder;
- hookdata.update_flags = FOLDER_TREE_CHANGED;
+ hookdata.update_flags = FOLDER_TREE_CHANGED | FOLDER_NEW_FOLDERITEM;
+ hookdata.item = item;
hooks_invoke(FOLDER_UPDATE_HOOKLIST, &hookdata);
}
static gboolean folder_item_remove_func(GNode *node, gpointer data)
{
FolderItem *item = FOLDER_ITEM(node->data);
+ FolderUpdateData hookdata;
+ Folder *folder = item->folder;
if (item->cache != NULL) {
msgcache_destroy(item->cache);
}
folder_item_destroy(item);
+
+ hookdata.folder = folder;
+ hookdata.update_flags = FOLDER_TREE_CHANGED | FOLDER_REMOVE_FOLDERITEM;
+ hookdata.item = item;
+ hooks_invoke(FOLDER_UPDATE_HOOKLIST, &hookdata);
+
return FALSE;
}
void folder_item_remove(FolderItem *item)
{
- Folder *folder = item->folder;
GNode *node;
- FolderUpdateData hookdata;
g_return_if_fail(item != NULL);
g_return_if_fail(item->folder != NULL);
g_node_traverse(node, G_POST_ORDER, G_TRAVERSE_ALL, -1,
folder_item_remove_func, NULL);
g_node_destroy(node);
-
- hookdata.folder = folder;
- hookdata.update_flags = FOLDER_TREE_CHANGED;
- hooks_invoke(FOLDER_UPDATE_HOOKLIST, &hookdata);
}
void folder_item_remove_children(FolderItem *item)
hookdata.folder = folder;
hookdata.update_flags = FOLDER_TREE_CHANGED;
+ hookdata.item = NULL;
hooks_invoke(FOLDER_UPDATE_HOOKLIST, &hookdata);
g_node_traverse(folder->node, G_POST_ORDER, G_TRAVERSE_ALL, -1, folder_scan_tree_func, pptable);
typedef enum
{
FOLDER_TREE_CHANGED = 1 << 0,
-/*
- maybe enhance with:
- FOLDER_NEW_FOLDERITEM
- FOLDER_REMOVE_FOLDERITEM
-*/
+ FOLDER_NEW_FOLDERITEM = 1 << 1,
+ FOLDER_REMOVE_FOLDERITEM = 1 << 2,
} FolderUpdateFlags;
typedef enum
{
Folder *folder;
FolderUpdateFlags update_flags;
-/*
- FolderItem *item
-*/
+ FolderItem *item;
};
struct _FolderItemUpdateData
ctree = folderview->ctree;
g_return_val_if_fail(ctree != NULL, FALSE);
- if (hookdata->update_flags & FOLDER_TREE_CHANGED) {
+ if (hookdata->update_flags & FOLDER_NEW_FOLDERITEM)
+ folderview_create_folder_node(folderview, hookdata->item);
+ else if (hookdata->update_flags & FOLDER_REMOVE_FOLDERITEM) {
+ GtkCTreeNode *node;
+
+ node = gtk_ctree_find_by_row_data(GTK_CTREE(ctree), NULL, hookdata->item);
+ gtk_ctree_remove_node(GTK_CTREE(ctree), node);
+ } else if (hookdata->update_flags & FOLDER_TREE_CHANGED)
folderview_set(folderview);
- }
return FALSE;
}