From fcab7b57790451d252db55a39a2c8d520689a376 Mon Sep 17 00:00:00 2001 From: Not Zed Date: Fri, 12 Jan 2001 02:48:45 +0000 Subject: Perform a final pass, removing any pseudo nodes we added earlier. Quick 2001-01-12 Not Zed * camel-folder-thread.c (camel_folder_thread_messages_new): Perform a final pass, removing any pseudo nodes we added earlier. Quick patch to test the idea. svn path=/trunk/; revision=7424 --- camel/camel-folder-thread.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'camel/camel-folder-thread.c') diff --git a/camel/camel-folder-thread.c b/camel/camel-folder-thread.c index c83c33687d..2e71189946 100644 --- a/camel/camel-folder-thread.c +++ b/camel/camel-folder-thread.c @@ -277,6 +277,7 @@ group_root_set(CamelFolderThread *thread, CamelFolderThreadNode **cp) } else if (c->re && container->re) { d(printf("subjects are common %p and %p\n", c, container)); + /* build a phantom node */ remove_node(cp, container, &clast); remove_node(cp, c, &clast); @@ -535,6 +536,32 @@ camel_folder_thread_messages_new(CamelFolder *folder, GPtrArray *uids) sort_thread(&head); + /* remove any phantom nodes, this could possibly be put in group_root_set()? */ + c = &head; + while (c->next) { + CamelFolderThreadNode *scan, *newtop; + + child = c->next; + if (child->message == NULL) { + newtop = child->child; + /* unlink pseudo node */ + c->next = newtop; + + /* link its siblings onto the end of its children */ + scan = &newtop->child; + while (scan->next) + scan = scan->next; + scan->next = newtop->next; + /* and link the now 'real' node into the list */ + newtop->next = child->next; + c = newtop->next; + e_memchunk_free(thread->node_chunks, child); + } else { + c = child; + } + } + + thread->tree = head; #ifdef TIMEIT -- cgit v1.2.3