diff options
Diffstat (limited to 'camel/camel-folder-thread.c')
-rw-r--r-- | camel/camel-folder-thread.c | 27 |
1 files changed, 27 insertions, 0 deletions
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 |