2005-04-03 [colin] 1.9.6cvs23
[claws.git] / src / summaryview.c
index 3e8ba50590ec17d73a9980291c7026270cb93aa0..72eeb7a7c06ede52d1ce05cf8f6f4a890f194df9 100644 (file)
@@ -2061,12 +2061,13 @@ void summary_sort(SummaryView *summaryview,
        if (summaryview->sort_key == SORT_BY_NONE)
                return;
 
-       if(cmp_func != NULL) {
+       if (cmp_func != NULL) {
                debug_print("Sorting summary...");
                STATUSBAR_PUSH(summaryview->mainwin, _("Sorting summary..."));
 
                main_window_cursor_wait(summaryview->mainwin);
 
+                gtk_clist_freeze(clist);
                gtk_clist_set_compare_func(clist, cmp_func);
 
                gtk_clist_set_sort_type(clist, (GtkSortType)sort_type);
@@ -2079,6 +2080,8 @@ void summary_sort(SummaryView *summaryview,
 
                if (summaryview->threaded)
                        summary_thread_init(summaryview);
+                        
+                gtk_clist_thaw(clist);
 
                debug_print("done.\n");
                STATUSBAR_POP(summaryview->mainwin);
@@ -3663,6 +3666,7 @@ void summary_thread_build(SummaryView *summaryview)
        GtkCTreeNode *next;
        GtkCTreeNode *parent;
        MsgInfo *msginfo;
+        GSList *reflist;
 
        summary_lock(summaryview);
 
@@ -3682,12 +3686,18 @@ void summary_thread_build(SummaryView *summaryview)
 
                parent = NULL;
 
-               /* alfons - claws seems to prefer subject threading before
-                * inreplyto threading. we should look more deeply in this,
-                * because inreplyto should have precedence... */
                if (msginfo && msginfo->inreplyto) {
                        parent = g_hash_table_lookup(summaryview->msgid_table,
                                                     msginfo->inreplyto);
+                                                     
+                       if (!parent && msginfo->references) {
+                               for (reflist = msginfo->references;
+                                    reflist != NULL; reflist = reflist->next)
+                                       if ((parent = g_hash_table_lookup
+                                               (summaryview->msgid_table,
+                                                reflist->data)))
+                                               break;
+                       }
                }
 
                if (prefs_common.thread_by_subject && parent == NULL) {
@@ -4426,27 +4436,6 @@ static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event,
        case GDK_Escape:
                gtk_widget_grab_focus(summaryview->folderview->ctree);
                return TRUE;
-       case GDK_Up:
-       case GDK_Down:
-               if ((node = summaryview->selected) != NULL) {
-                       GtkCTreeNode *next = NULL;
-                       do {
-                               next = (event->keyval == GDK_Down)
-                                       ? gtkut_ctree_node_next(ctree, next ? next:node)
-                                       : gtkut_ctree_node_prev(ctree, next ? next:node);
-                       } while (next && !gtk_ctree_is_viewable(ctree, next));
-
-                       if (next) {
-                               gtk_sctree_select_with_state
-                                       (GTK_SCTREE(ctree), next, event->state);
-                               
-                               /* Deprecated - what are the non-deprecated equivalents? */
-                               if (gtk_ctree_node_is_visible(GTK_CTREE(ctree), next) != GTK_VISIBILITY_FULL)
-                                       gtk_ctree_node_moveto(GTK_CTREE(ctree), next, 0, 0, 0);
-                               summaryview->selected = next;
-                       }
-               }
-               return TRUE;
        case GDK_Home:
        case GDK_End:
                if ((node = summaryview->selected) != NULL) {