aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--camel/ChangeLog6
-rw-r--r--camel/camel-folder-thread.c27
2 files changed, 33 insertions, 0 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog
index d46a844e85..bc3945c5fc 100644
--- a/camel/ChangeLog
+++ b/camel/ChangeLog
@@ -1,3 +1,9 @@
+2001-01-12 Not Zed <NotZed@Ximian.com>
+
+ * 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.
+
2001-01-11 Dan Winship <danw@ximian.com>
* providers/imap/camel-imap-folder.c (camel_imap_folder_selected):
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