2006-10-04 [colin] 2.5.2cvs42
[claws.git] / src / summaryview.c
index ed23cafe7e37d49a1ba037faceeea670e1021ae0..9c4d4548d22add50fee172176f6f1652f129dbd9 100644 (file)
@@ -404,6 +404,7 @@ static void summary_find_answers    (SummaryView    *summaryview,
                                         MsgInfo        *msg);
 
 static gboolean summary_update_msg     (gpointer source, gpointer data);
+static gboolean summary_update_folder_item_name(gpointer source, gpointer data);
 
 GtkTargetEntry summary_drag_types[2] =
 {
@@ -492,12 +493,38 @@ static const gchar *const col_label[N_SUMMARY_COLS] = {
        "",             /* S_COL_LOCKED  */
 };
 
+void summary_freeze(SummaryView *summaryview)
+{
+       if (summaryview)
+               gtk_clist_freeze(GTK_CLIST(summaryview->ctree));
+}
+
+void summary_thaw(SummaryView *summaryview)
+{
+       if (summaryview)
+               gtk_clist_thaw(GTK_CLIST(summaryview->ctree));
+}
+
+void summary_grab_focus(SummaryView *summaryview)
+{
+       if (summaryview)
+               gtk_widget_grab_focus(summaryview->ctree);
+}
+
+GtkWidget *summary_get_main_widget(SummaryView *summaryview)
+{
+       if (summaryview)
+               return summaryview->ctree;
+       else
+               return NULL;
+}
+
 #define START_LONG_OPERATION(summaryview,force_freeze) {       \
        summary_lock(summaryview);                              \
        main_window_cursor_wait(summaryview->mainwin);          \
        if (force_freeze || sc_g_list_bigger(GTK_CLIST(summaryview->ctree)->selection, 1)) {\
                froze = TRUE;                                           \
-               gtk_clist_freeze(GTK_CLIST(summaryview->ctree));        \
+               summary_freeze(summaryview);    \
        }                                                       \
        folder_item_update_freeze();                            \
        inc_lock();                                             \
@@ -508,7 +535,7 @@ static const gchar *const col_label[N_SUMMARY_COLS] = {
        inc_unlock();                                           \
        folder_item_update_thaw();                              \
        if (froze)                                              \
-               gtk_clist_thaw(GTK_CLIST(summaryview->ctree));  \
+               summary_thaw(summaryview);      \
        main_window_cursor_normal(summaryview->mainwin);        \
        summary_unlock(summaryview);                            \
        summaryview->msginfo_update_callback_id =               \
@@ -644,6 +671,10 @@ SummaryView *summary_create(void)
        summaryview->lock_count = 0;
        summaryview->msginfo_update_callback_id =
                hooks_register_hook(MSGINFO_UPDATE_HOOKLIST, summary_update_msg, (gpointer) summaryview);
+       summaryview->folder_item_update_callback_id =
+               hooks_register_hook(FOLDER_ITEM_UPDATE_HOOKLIST,
+                               summary_update_folder_item_name,
+                               (gpointer) summaryview);
 
        summaryview->target_list = gtk_target_list_new(summary_drag_types, 2);
 
@@ -852,7 +883,7 @@ static gboolean summary_check_consistency(FolderItem *item, GSList *mlist)
 {
        int u = 0, n = 0, m = 0, t = 0;
        GSList *cur;
-       START_TIMING("consistency check");
+       START_TIMING("");
        for(cur = mlist ; cur != NULL && cur->data != NULL ; cur = g_slist_next(cur)) {
                MsgInfo * msginfo = (MsgInfo *) cur->data;
                t++;
@@ -895,7 +926,7 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item)
 
        if (!summaryview->mainwin)
                return FALSE;
-START_TIMING("--------- summary_show");
+       START_TIMING("");
        summaryview->last_displayed = NULL;
        summary_switch_from_to(summaryview, item);
 
@@ -949,7 +980,7 @@ START_TIMING("--------- summary_show");
                        folder_update_op_count();
        }
        
-       gtk_clist_freeze(GTK_CLIST(ctree));
+       summary_freeze(summaryview);
 
        summary_clear_list(summaryview);
 
@@ -964,7 +995,7 @@ START_TIMING("--------- summary_show");
                summary_set_hide_read_msgs_menu(summaryview, FALSE);
                summary_clear_all(summaryview);
                summaryview->folder_item = item;
-               gtk_clist_thaw(GTK_CLIST(ctree));
+               summary_thaw(summaryview);
                summary_unlock(summaryview);
                inc_unlock();
                if (item && quicksearch_is_running(summaryview->quicksearch)) {
@@ -1036,33 +1067,37 @@ START_TIMING("--------- summary_show");
 
        if (quicksearch_is_active(summaryview->quicksearch)) {
                GSList *not_killed;
+               gint interval = quicksearch_is_fast(summaryview->quicksearch) ? 1000:100;
                START_TIMING("quicksearch");
                gint num = 0, total = summaryview->folder_item->total_msgs;
                statusbar_print_all(_("Searching in %s... \n"), 
                        summaryview->folder_item->path ? 
                        summaryview->folder_item->path : "(null)");
                not_killed = NULL;
+               folder_item_update_freeze();
                for (cur = mlist ; cur != NULL && cur->data != NULL ; cur = g_slist_next(cur)) {
                        MsgInfo * msginfo = (MsgInfo *) cur->data;
 
-                       statusbar_progress_all(num++,total, 50);
+                       statusbar_progress_all(num++,total, interval);
 
                        if (!msginfo->hidden && quicksearch_match(summaryview->quicksearch, msginfo))
                                not_killed = g_slist_prepend(not_killed, msginfo);
                        else
                                procmsg_msginfo_free(msginfo);
-                       GTK_EVENTS_FLUSH();
+                       if (num % interval == 0)
+                               GTK_EVENTS_FLUSH();
                        if (!quicksearch_is_active(summaryview->quicksearch)) {
                                break;
                        }
                }
+               folder_item_update_thaw();
                statusbar_progress_all(0,0,0);
                statusbar_pop_all();
                
                hidden_removed = TRUE;
                if (!quicksearch_is_active(summaryview->quicksearch)) {
                        debug_print("search cancelled!\n");
-                       gtk_clist_thaw(GTK_CLIST(ctree));
+                       summary_thaw(summaryview);
                        STATUSBAR_POP(summaryview->mainwin);
                        main_window_cursor_normal(summaryview->mainwin);
                        summary_unlock(summaryview);
@@ -1214,7 +1249,7 @@ START_TIMING("--------- summary_show");
        summary_set_menu_sensitive(summaryview);
        toolbar_main_set_sensitive(summaryview->mainwin);
        
-       gtk_clist_thaw(GTK_CLIST(ctree));
+       summary_thaw(summaryview);
        debug_print("\n");
        STATUSBAR_PUSH(summaryview->mainwin, _("Done."));
        STATUSBAR_POP(summaryview->mainwin);
@@ -1233,7 +1268,7 @@ void summary_clear_list(SummaryView *summaryview)
        GtkCList *clist = GTK_CLIST(summaryview->ctree);
        gint optimal_width;
 
-       gtk_clist_freeze(clist);
+       summary_freeze(summaryview);
 
        gtk_ctree_pre_recursive(GTK_CTREE(summaryview->ctree),
                                NULL, summary_free_msginfo_func, NULL);
@@ -1269,7 +1304,7 @@ void summary_clear_list(SummaryView *summaryview)
                         optimal_width);
        }
 
-       gtk_clist_thaw(clist);
+       summary_thaw(summaryview);
 }
 
 void summary_clear_all(SummaryView *summaryview)
@@ -2048,7 +2083,7 @@ void summary_attract_by_subject(SummaryView *summaryview)
                       _("Attracting messages by subject..."));
 
        main_window_cursor_wait(summaryview->mainwin);
-       gtk_clist_freeze(clist);
+       summary_freeze(summaryview);
 
        subject_table = g_hash_table_new(attract_hash_func,
                                         attract_compare_func);
@@ -2087,7 +2122,7 @@ void summary_attract_by_subject(SummaryView *summaryview)
 
        gtk_ctree_node_moveto(ctree, summaryview->selected, 0, 0.5, 0);
 
-       gtk_clist_thaw(clist);
+       summary_thaw(summaryview);
 
        debug_print("done.\n");
        STATUSBAR_POP(summaryview->mainwin);
@@ -2310,19 +2345,23 @@ static void summary_set_column_titles(SummaryView *summaryview)
                        label = gtk_image_new_from_pixmap(clipxpm, clipxpmmask);
                        gtk_widget_show(label);
                        gtk_clist_set_column_widget(clist, pos, label);
+                       gtk_sctree_set_column_tooltip(GTK_SCTREE(clist), pos, _("Attachment"));
                        continue;
                } else if (type == S_COL_MARK) {
                        label = gtk_image_new_from_pixmap(markxpm, markxpmmask);
                        gtk_widget_show(label);
                        gtk_clist_set_column_widget(clist, pos, label);
+                       gtk_sctree_set_column_tooltip(GTK_SCTREE(clist), pos, _("Mark"));
                        continue;
                } else if (type == S_COL_LOCKED) {
                        label = gtk_image_new_from_pixmap(lockedxpm, lockedxpmmask);
                        gtk_widget_show(label);
                        gtk_clist_set_column_widget(clist, pos, label);
+                       gtk_sctree_set_column_tooltip(GTK_SCTREE(clist), pos, _("Locked"));
                        continue;
                } else if (type == S_COL_STATUS) {
                        gtk_clist_set_column_title(clist, pos, title);
+                       gtk_sctree_set_column_tooltip(GTK_SCTREE(clist), pos, _("Status"));
                        continue;
                }
 
@@ -2387,10 +2426,10 @@ void summary_sort(SummaryView *summaryview,
        GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
        GtkCList *clist = GTK_CLIST(summaryview->ctree);
        GtkCListCompareFunc cmp_func = NULL;
-       START_TIMING("summary_sort");
+       START_TIMING("");
        g_signal_handlers_block_by_func(G_OBJECT(summaryview->ctree),
                                       G_CALLBACK(summary_tree_expanded), summaryview);
-       gtk_clist_freeze(GTK_CLIST(summaryview->ctree));
+       summary_freeze(summaryview);
 
        switch (sort_key) {
        case SORT_BY_MARK:
@@ -2454,7 +2493,6 @@ void summary_sort(SummaryView *summaryview,
 
                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);
@@ -2463,13 +2501,12 @@ void summary_sort(SummaryView *summaryview,
                gtk_ctree_node_moveto(ctree, summaryview->selected, 0, 0.5, 0);
 
                main_window_cursor_normal(summaryview->mainwin);
-                gtk_clist_thaw(clist);
 
                debug_print("done.\n");
                STATUSBAR_POP(summaryview->mainwin);
        }
 unlock:
-       gtk_clist_thaw(GTK_CLIST(summaryview->ctree));
+       summary_thaw(summaryview);
        g_signal_handlers_unblock_by_func(G_OBJECT(summaryview->ctree),
                                       G_CALLBACK(summary_tree_expanded), summaryview);
        END_TIMING();
@@ -2525,9 +2562,9 @@ static void summary_set_ctree_from_list(SummaryView *summaryview,
        MsgInfo *msginfo;
        GtkCTreeNode *node = NULL;
        GHashTable *msgid_table;
-       GHashTable *subject_table;
+       GHashTable *subject_table = NULL;
        GSList * cur;
-       START_TIMING("summary_set_ctree_from_list");
+       START_TIMING("");
        
        if (!mlist) return;
 
@@ -2541,15 +2578,20 @@ static void summary_set_ctree_from_list(SummaryView *summaryview,
 
        msgid_table = g_hash_table_new(g_str_hash, g_str_equal);
        summaryview->msgid_table = msgid_table;
-       subject_table = g_hash_table_new(g_str_hash, g_str_equal);
-       summaryview->subject_table = subject_table;
+
+       if (prefs_common.thread_by_subject) {
+               subject_table = g_hash_table_new(g_str_hash, g_str_equal);
+               summaryview->subject_table = subject_table;
+       } else {
+               summaryview->subject_table = NULL;
+       }
 
        if (prefs_common.use_addr_book)
                start_address_completion(NULL);
        
        if (summaryview->threaded) {
                GNode *root, *gnode;
-               START_TIMING("summaryview_set_ctree_from_list(1)");
+               START_TIMING("threaded");
                root = procmsg_get_thread_tree(mlist);
 
                for (gnode = root->children; gnode != NULL;
@@ -2564,7 +2606,7 @@ static void summary_set_ctree_from_list(SummaryView *summaryview,
                END_TIMING();
        } else {
                gchar *text[N_SUMMARY_COLS];
-               START_TIMING("summaryview_set_ctree_from_list(2)");
+               START_TIMING("unthreaded");
                cur = mlist;
                for (; mlist != NULL; mlist = mlist->next) {
                        msginfo = (MsgInfo *)mlist->data;
@@ -2583,7 +2625,8 @@ static void summary_set_ctree_from_list(SummaryView *summaryview,
                                g_hash_table_insert(msgid_table,
                                                    msginfo->msgid, node);
 
-                       subject_table_insert(subject_table,
+                       if (prefs_common.thread_by_subject)
+                               subject_table_insert(subject_table,
                                             msginfo->subject,
                                             node);
                }
@@ -2610,7 +2653,8 @@ static void summary_set_ctree_from_list(SummaryView *summaryview,
        if (debug_get_mode()) {
                debug_print("\tmsgid hash table size = %d\n",
                            g_hash_table_size(msgid_table));
-               debug_print("\tsubject hash table size = %d\n",
+               if (prefs_common.thread_by_subject)
+                       debug_print("\tsubject hash table size = %d\n",
                            g_hash_table_size(subject_table));
        }
 
@@ -2619,7 +2663,7 @@ static void summary_set_ctree_from_list(SummaryView *summaryview,
        node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
 
        if (prefs_common.bold_unread) {
-               START_TIMING("summaryview_set_ctree_from_list(3)");
+               START_TIMING("bold_unread");
                while (node) {
                        GtkCTreeNode *next = GTK_CTREE_NODE_NEXT(node);
                        if (GTK_CTREE_ROW(node)->children)
@@ -2904,7 +2948,7 @@ static void summary_display_msg_full(SummaryView *summaryview,
        GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
        MsgInfo *msginfo;
        gint val;
-       START_TIMING("summary_display_msg_full");
+       START_TIMING("");
        if (!new_window) {
                if (summaryview->displayed == row)
                        return;
@@ -3607,7 +3651,6 @@ static void summary_delete_row(SummaryView *summaryview, GtkCTreeNode *row)
 void summary_cancel(SummaryView *summaryview)
 {
        MsgInfo * msginfo;
-       GtkCList *clist = GTK_CLIST(summaryview->ctree);
 
        msginfo = gtk_ctree_node_get_row_data(GTK_CTREE(summaryview->ctree),
                                              summaryview->selected);
@@ -3622,12 +3665,12 @@ void summary_cancel(SummaryView *summaryview)
 
        summary_lock(summaryview);
 
-       gtk_clist_freeze(clist);
+       summary_freeze(summaryview);
 
        summary_update_status(summaryview);
        summary_status_show(summaryview);
 
-       gtk_clist_thaw(clist);
+       summary_thaw(summaryview);
 
        summary_unlock(summaryview);
 }
@@ -4028,10 +4071,10 @@ void summary_save_as(SummaryView *summaryview)
 
        if ( aval==0 ) { /* append */
                if (append_file(src, dest, TRUE) < 0) 
-                       alertpanel_error(_("Can't save the file '%s'."), tmp);
+                       alertpanel_error(_("Couldn't save the file '%s'."), tmp);
        } else { /* overwrite */
                if (copy_file(src, dest, TRUE) < 0)
-                       alertpanel_error(_("Can't save the file '%s'."), tmp);
+                       alertpanel_error(_("Couldn't save the file '%s'."), tmp);
        }
        g_free(src);
        
@@ -4046,7 +4089,7 @@ void summary_save_as(SummaryView *summaryview)
                        if (!msginfo) break;
                        src = procmsg_get_message_file(msginfo);
                        if (append_file(src, dest, TRUE) < 0)
-                               alertpanel_error(_("Can't save the file '%s'."), tmp);
+                               alertpanel_error(_("Couldn't save the file '%s'."), tmp);
                }
                g_free(src);
        }
@@ -4115,7 +4158,7 @@ gboolean summary_execute(SummaryView *summaryview)
        if (summary_is_locked(summaryview)) return FALSE;
        summary_lock(summaryview);
 
-       gtk_clist_freeze(clist);
+       summary_freeze(summaryview);
 
        main_window_cursor_wait(summaryview->mainwin);
 
@@ -4177,7 +4220,7 @@ gboolean summary_execute(SummaryView *summaryview)
                summary_thread_init(summaryview);
        }
 
-       gtk_clist_thaw(GTK_CLIST(summaryview->ctree));
+       summary_thaw(summaryview);
 
        summaryview->selected = clist->selection ?
                GTK_CTREE_NODE(clist->selection->data) : NULL;
@@ -4247,7 +4290,8 @@ static void summary_execute_move_func(GtkCTree *ctree, GtkCTreeNode *node,
                                                msginfo->msgid))
                        g_hash_table_remove(summaryview->msgid_table,
                                            msginfo->msgid);
-               if (msginfo->subject && *msginfo->subject && 
+               if (prefs_common.thread_by_subject &&
+                   msginfo->subject && *msginfo->subject && 
                    node == subject_table_lookup(summaryview->subject_table,
                                                 msginfo->subject)) {
                        subject_table_remove(summaryview->subject_table,
@@ -4341,7 +4385,8 @@ static void summary_execute_delete_func(GtkCTree *ctree, GtkCTreeNode *node,
                        g_hash_table_remove(summaryview->msgid_table,
                                            msginfo->msgid);
                }       
-               if (msginfo->subject && *msginfo->subject && 
+               if (prefs_common.thread_by_subject &&
+                   msginfo->subject && *msginfo->subject && 
                    node == subject_table_lookup(summaryview->subject_table,
                                                 msginfo->subject)) {
                        subject_table_remove(summaryview->subject_table,
@@ -4369,7 +4414,7 @@ void summary_thread_build(SummaryView *summaryview)
 
        g_signal_handlers_block_by_func(G_OBJECT(ctree),
                                       G_CALLBACK(summary_tree_expanded), summaryview);
-       gtk_clist_freeze(GTK_CLIST(ctree));
+       summary_freeze(summaryview);
 
        node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
        while (node) {
@@ -4408,7 +4453,7 @@ void summary_thread_build(SummaryView *summaryview)
 
        gtkut_ctree_set_focus_row(ctree, summaryview->selected);
 
-       gtk_clist_thaw(GTK_CLIST(ctree));
+       summary_thaw(summaryview);
        g_signal_handlers_unblock_by_func(G_OBJECT(ctree),
                                         G_CALLBACK(summary_tree_expanded), summaryview);
 
@@ -4426,7 +4471,7 @@ static void summary_thread_init(SummaryView *summaryview)
        GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
        GtkCTreeNode *node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
        GtkCTreeNode *next;
-       START_TIMING("summary_thread_init");
+       START_TIMING("");
        if (!summaryview->thread_collapsed) {
                g_signal_handlers_block_by_func(G_OBJECT(ctree),
                                       G_CALLBACK(summary_tree_expanded), summaryview);
@@ -4522,7 +4567,7 @@ void summary_expand_threads(SummaryView *summaryview)
 
        g_signal_handlers_block_by_func(G_OBJECT(ctree),
                                       G_CALLBACK(summary_tree_expanded), summaryview);
-       gtk_clist_freeze(GTK_CLIST(ctree));
+       summary_freeze(summaryview);
 
        while (node) {
                if (GTK_CTREE_ROW(node)->children) {
@@ -4532,7 +4577,7 @@ void summary_expand_threads(SummaryView *summaryview)
                node = GTK_CTREE_NODE_NEXT(node);
        }
 
-       gtk_clist_thaw(GTK_CLIST(ctree));
+       summary_thaw(summaryview);
        g_signal_handlers_unblock_by_func(G_OBJECT(ctree),
                                         G_CALLBACK(summary_tree_expanded), summaryview);
 
@@ -4546,7 +4591,7 @@ void summary_collapse_threads(SummaryView *summaryview)
        GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
        GtkCTreeNode *node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
 
-       gtk_clist_freeze(GTK_CLIST(ctree));
+       summary_freeze(summaryview);
 
        while (node) {
                if (GTK_CTREE_ROW(node)->children)
@@ -4554,7 +4599,7 @@ void summary_collapse_threads(SummaryView *summaryview)
                node = GTK_CTREE_ROW(node)->sibling;
        }
 
-       gtk_clist_thaw(GTK_CLIST(ctree));
+       summary_thaw(summaryview);
        
        summaryview->thread_collapsed = TRUE;
 
@@ -4589,7 +4634,7 @@ gboolean summary_filter_get_mode(void)
                                                        _("Apply these rules regardless of the account they belong to"));
        account_rules_user_current = gtk_radio_button_new_with_label_from_widget
                                                        (GTK_RADIO_BUTTON(account_rules_skip),
-                                                       _("Use current account for these rules"));
+                                                       _("Apply these rules if they apply to the current account"));
        gtk_box_pack_start (GTK_BOX (vbox), account_rules_skip, FALSE, FALSE, 0);
        gtk_box_pack_start (GTK_BOX (vbox), account_rules_force, FALSE, FALSE, 0);
        gtk_box_pack_start (GTK_BOX (vbox), account_rules_user_current, FALSE, FALSE, 0);
@@ -4651,7 +4696,7 @@ void summary_filter(SummaryView *summaryview, gboolean selected_only)
        STATUSBAR_PUSH(summaryview->mainwin, _("Filtering..."));
        main_window_cursor_wait(summaryview->mainwin);
 
-       gtk_clist_freeze(GTK_CLIST(summaryview->ctree));
+       summary_freeze(summaryview);
 
        if (selected_only) {
                GList *cur;
@@ -4675,7 +4720,7 @@ void summary_filter(SummaryView *summaryview, gboolean selected_only)
        }
        g_slist_free(mlist);
 
-       gtk_clist_thaw(GTK_CLIST(summaryview->ctree));
+       summary_thaw(summaryview);
 
        folder_item_update_thaw();
        debug_print("done.\n");
@@ -5288,7 +5333,7 @@ static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event,
                                                g_list_length(GTK_CLIST(ctree)->row_list)-1);
                        if (next) {
                                gtk_sctree_select_with_state
-                                       (GTK_SCTREE(ctree), next, event->state);
+                                       (GTK_SCTREE(ctree), next, (event->state & ~GDK_CONTROL_MASK) );
 
                                /* Deprecated - what are the non-deprecated equivalents? */
                                if (gtk_ctree_node_is_visible(GTK_CTREE(ctree), next) != GTK_VISIBILITY_FULL)
@@ -5592,7 +5637,7 @@ static void summary_sort_by_column_click(SummaryView *summaryview,
                                         FolderSortKey sort_key)
 {
        GtkCTreeNode *node = NULL;
-       START_TIMING("summary_sort_by_column_click");
+       START_TIMING("");
        if (summaryview->sort_key == sort_key)
                summary_sort(summaryview, sort_key,
                             summaryview->sort_type == SORT_ASCENDING
@@ -5602,7 +5647,7 @@ static void summary_sort_by_column_click(SummaryView *summaryview,
 
        node = GTK_CTREE_NODE(GTK_CLIST(summaryview->ctree)->row_list);
 
-       gtk_clist_freeze(GTK_CLIST(summaryview->ctree));
+       summary_freeze(summaryview);
        if (prefs_common.bold_unread) {
                while (node) {
                        GtkCTreeNode *next = GTK_CTREE_NODE_NEXT(node);
@@ -5611,7 +5656,7 @@ static void summary_sort_by_column_click(SummaryView *summaryview,
                        node = next;
                }
        }
-       gtk_clist_thaw(GTK_CLIST(summaryview->ctree));
+       summary_thaw(summaryview);
        END_TIMING();
 }
 
@@ -6171,6 +6216,8 @@ static regex_t *summary_compile_simplify_regexp(gchar *simplify_subject_regexp)
 
 void summary_set_prefs_from_folderitem(SummaryView *summaryview, FolderItem *item)
 {
+       FolderSortKey sort_key;
+       FolderSortType sort_type;
        g_return_if_fail(summaryview != NULL);
        g_return_if_fail(item != NULL);
 
@@ -6185,9 +6232,13 @@ void summary_set_prefs_from_folderitem(SummaryView *summaryview, FolderItem *ite
                summaryview->simplify_subject_preg = summary_compile_simplify_regexp(item->prefs->simplify_subject_regexp);
 
        /* Sorting */
-       summaryview->sort_key = item->sort_key;
-       summaryview->sort_type = item->sort_type;
-
+       if (folder_get_sort_type(item->folder, &sort_key, &sort_type)) {
+               summaryview->sort_key = sort_key;
+               summaryview->sort_type = sort_type;
+       } else {
+               summaryview->sort_key = item->sort_key;
+               summaryview->sort_type = item->sort_type;
+       }
        /* Threading */
        summaryview->threaded = item->threaded;
        summaryview->thread_collapsed = item->thread_collapsed;
@@ -6230,6 +6281,24 @@ static gboolean summary_update_msg(gpointer source, gpointer data)
        return FALSE;
 }
 
+static gboolean summary_update_folder_item_name(gpointer source, gpointer data)
+{
+       FolderItemUpdateData *hookdata = (FolderItemUpdateData *)source;
+       SummaryView *summaryview = (SummaryView *)data;
+
+       g_return_val_if_fail(hookdata != NULL, FALSE);
+       g_return_val_if_fail(hookdata->item != NULL, FALSE);
+       g_return_val_if_fail(summaryview != NULL, FALSE);
+
+       if (hookdata->update_flags & F_ITEM_UPDATE_NAME) {
+               gchar *name = folder_item_get_name(hookdata->item);
+               gtk_label_set_text(GTK_LABEL(summaryview->statlabel_folder), name);
+               g_free(name);
+       }
+
+       return FALSE;
+}
+
 /*!
  *\brief       change summaryview to display your answer(s) to a message
  *