* src/procmsg.c
authorAlfons Hoogervorst <alfons@proteus.demon.nl>
Sun, 11 Jan 2004 17:52:03 +0000 (17:52 +0000)
committerAlfons Hoogervorst <alfons@proteus.demon.nl>
Sun, 11 Jan 2004 17:52:03 +0000 (17:52 +0000)
subject threading fixes:

- make message with lowest message number the
  thread parent,
- refine recording last node when threading. the last node
  should be the previous one if a node has a thread parent,
  or the current node if not

        (there's another threading bug fix coming up)

ChangeLog.claws
configure.ac
src/procmsg.c

index e946de6..93abe91 100644 (file)
@@ -1,3 +1,16 @@
+2003-01-10 [alfons]    0.9.8claws27
+
+       * src/procmsg.c
+               subject threading fixes:
+               
+                       - make message with lowest message number the
+                         thread parent,
+                       - refine recording last node when threading. the last node
+                         should be the previous one if a node has a thread parent,
+                         or the current node if not
+               
+               (there's another threading bug fix coming up)
+
 2004-01-10 [paul]      0.9.8claws26
 
        * src/main.c
index be29498..fad18cb 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=9
 MICRO_VERSION=8
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=26
+EXTRA_VERSION=27
 if test $EXTRA_VERSION -eq 0; then
     VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}claws
 else
index 47b0a87..09787cd 100644 (file)
@@ -190,6 +190,7 @@ static GNode *subject_relation_lookup(GRelation *relation, MsgInfo *msginfo)
                        /* best node should be the oldest in the found nodes */
                        /* parent node must not be older then msginfo */
                        if ((relation_msginfo->date_t < msginfo->date_t) &&
+                           (relation_msginfo->msgnum < msginfo->msgnum) &&
                            ((best_msginfo == NULL) ||
                             (best_msginfo->date_t > relation_msginfo->date_t)))
                                match = TRUE;
@@ -252,10 +253,9 @@ GNode *procmsg_get_thread_tree(GSList *mlist)
                }
        }
 
-       /* complete the unfinished threads */
+       /* complete the unfinished threads. record the last encountered node. */
        for (node = root->children; node != NULL; ) {
-               prev = node->prev;      /* CLAWS: need the last node */
-               parent = NULL;
+               parent = prev = NULL;
                next = node->next;
                msginfo = (MsgInfo *)node->data;
                if (msginfo->inreplyto) { 
@@ -264,12 +264,15 @@ GNode *procmsg_get_thread_tree(GSList *mlist)
                           be an ancestor of parent (circular reference) */
                        if (parent && parent != node && 
                            !g_node_is_ancestor(node, parent)) {
+                               /* since this node is moved away, the previous
+                                * one is the last recorded one */
+                               prev = node->prev;
                                g_node_unlink(node);
                                g_node_insert_before
                                        (parent, parent->children, node);
                        }                               
                }
-               last = (next == NULL) ? prev : node;
+               last = prev ? prev : node;
                node = next;
        }