2006-01-15 [colin] 1.9.100cvs156
[claws.git] / src / folderview.c
index 702980efc6b9042efa35af1d89ed869a7881399c..91132fe79b6100d20601f6de092008a6a28531f0 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2006 Hiroyuki Yamamoto and the Sylpheed-Claws team
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -575,6 +575,7 @@ FolderView *folderview_create(void)
 void folderview_init(FolderView *folderview)
 {
        GtkWidget *ctree = folderview->ctree;
+       GdkColor gdk_color;
 
        stock_pixmap_gdk(ctree, STOCK_PIXMAP_INBOX_CLOSE, &inboxxpm, &inboxxpmmask);
        stock_pixmap_gdk(ctree, STOCK_PIXMAP_INBOX_CLOSE_HRM, &inboxhrmxpm, &inboxhrmxpmmask);
@@ -633,18 +634,20 @@ void folderview_init(FolderView *folderview)
                                        (normal_style->font_desc);
                        normal_style->font_desc = font_desc;
                }
+               gtkut_convert_int_to_gdk_color(prefs_common.color_new, &gdk_color);
                normal_color_style = gtk_style_copy(normal_style);
-               normal_color_style->fg[GTK_STATE_NORMAL] = folderview->color_new;
+               normal_color_style->fg[GTK_STATE_NORMAL] = gdk_color;
 
                gtk_widget_set_style(ctree, normal_style);
        }
 
        if (!bold_style) {
+               gtkut_convert_int_to_gdk_color(prefs_common.color_new, &gdk_color);
                bold_style = gtk_style_copy(gtk_widget_get_style(ctree));
                pango_font_description_set_weight
                        (bold_style->font_desc, PANGO_WEIGHT_BOLD);
                bold_color_style = gtk_style_copy(bold_style);
-               bold_color_style->fg[GTK_STATE_NORMAL] = folderview->color_new;
+               bold_color_style->fg[GTK_STATE_NORMAL] = gdk_color;
 
                bold_tgtfold_style = gtk_style_copy(bold_style);
                bold_tgtfold_style->fg[GTK_STATE_NORMAL] = folderview->color_op;
@@ -712,13 +715,13 @@ static void mark_all_read_cb(FolderView *folderview, guint action,
        if (prefs_common.ask_mark_all_read) {
                val = alertpanel_full(_("Mark all as read"),
                        _("Do you really want to mark all mails in this "
-                         "folder as read ?"), GTK_STOCK_YES, GTK_STOCK_NO, NULL,
-                         TRUE, NULL, ALERT_QUESTION, G_ALERTDEFAULT);
+                         "folder as read ?"), GTK_STOCK_NO, GTK_STOCK_YES, NULL,
+                         TRUE, NULL, ALERT_QUESTION, G_ALERTALTERNATE);
 
-               if (val == G_ALERTALTERNATE ||
-                   val == (G_ALERTALTERNATE|G_ALERTDISABLE))
+               if (val == G_ALERTDEFAULT ||
+                   val == (G_ALERTDEFAULT|G_ALERTDISABLE))
                        return;
-               else if (val == (G_ALERTDEFAULT|G_ALERTDISABLE)) 
+               else if (val == (G_ALERTALTERNATE|G_ALERTDISABLE))
                        prefs_common.ask_mark_all_read = FALSE;
        }
        
@@ -959,9 +962,9 @@ void folderview_rescan_tree(Folder *folder, gboolean rebuild)
            alertpanel_full(_("Rebuild folder tree"), 
                         _("Rebuilding the folder tree will remove "
                           "local caches. Do you want to continue?"),
-                        GTK_STOCK_YES, GTK_STOCK_NO, NULL, FALSE,
-                        NULL, ALERT_WARNING, G_ALERTALTERNATE
-               != G_ALERTDEFAULT) {
+                        GTK_STOCK_NO, GTK_STOCK_YES, NULL, FALSE,
+                        NULL, ALERT_WARNING, G_ALERTDEFAULT
+               != G_ALERTALTERNATE) {
                return;
        }
 
@@ -1431,22 +1434,29 @@ static void folderview_update_node(FolderView *folderview, GtkCTreeNode *node)
        gtk_ctree_node_set_foreground(ctree, node, NULL);
 
        if (use_bold) {
-               if (item->prefs->color > 0 && !use_color) {
-                       GdkColor gdk_color;
+               GdkColor gdk_color;
 
+               if (item->prefs->color > 0 && !use_color) {
                        gtkut_convert_int_to_gdk_color(item->prefs->color, &gdk_color);
                        color_style = gtk_style_copy(bold_style);
                        color_style->fg[GTK_STATE_NORMAL] = gdk_color;
                        style = color_style;
-               } else if (use_color)
+               } else if (use_color) {
+                       gtkut_convert_int_to_gdk_color(prefs_common.color_new, &gdk_color);
+                       bold_color_style = gtk_style_copy(bold_style);
+                       bold_color_style->fg[GTK_STATE_NORMAL] = gdk_color;
                        style = bold_color_style;
-               else
+               else
                        style = bold_style;
                if (item->op_count > 0) {
                        style = bold_tgtfold_style;
                }
        } else if (use_color) {
-               style = normal_color_style;
+               GdkColor gdk_color;
+
+               gtkut_convert_int_to_gdk_color(prefs_common.color_new, &gdk_color);
+               style = gtk_style_copy(normal_color_style);
+               style->fg[GTK_STATE_NORMAL] = gdk_color;
                gtk_ctree_node_set_foreground(ctree, node,
                                              &folderview->color_new);
        } else if (item->op_count > 0) {
@@ -1669,7 +1679,7 @@ static gboolean folderview_button_pressed(GtkWidget *ctree, GdkEventButton *even
 
        if (!event) return FALSE;
 
-       if (event->button == 1) {
+       if (event->button == 1 || event->button == 2) {
                folderview->open_folder = TRUE;
 
                if (event->type == GDK_2BUTTON_PRESS) {
@@ -1815,20 +1825,6 @@ static gboolean folderview_key_pressed(GtkWidget *widget, GdkEventKey *event,
        return FALSE;
 }
 
-static void summary_freeze_for_proc(gpointer data)
-{
-       FolderView *folderview = (FolderView *)data;
-       debug_print("freezing during processing...\n");
-       gtk_clist_freeze(GTK_CLIST(folderview->summaryview->ctree));
-}
-
-static void summary_thaw_for_proc(gpointer data)
-{
-       FolderView *folderview = (FolderView *)data;
-       debug_print("thawing after processing\n");
-       gtk_clist_thaw(GTK_CLIST(folderview->summaryview->ctree));
-}
-
 static void folderview_selected(GtkCTree *ctree, GtkCTreeNode *row,
                                gint column, FolderView *folderview)
 {
@@ -2057,7 +2053,7 @@ static void folderview_empty_trash_cb(FolderView *folderview, guint action,
        if (prefs_common.ask_on_clean) {
                if (alertpanel(_("Empty trash"),
                               _("Delete all messages in trash?"),
-                              GTK_STOCK_YES, GTK_STOCK_NO, NULL) != G_ALERTDEFAULT)
+                              GTK_STOCK_CANCEL, _("+_Empty trash"), NULL) != G_ALERTALTERNATE)
                        return;
        }
        
@@ -2142,12 +2138,12 @@ void folderview_move_folder(FolderView *folderview, FolderItem *from_folder,
                                        "sub-folder of '%s' ?"), from_folder->name,
                                        to_folder->name);
                status = alertpanel_full(_("Move folder"), buf,
-                                        GTK_STOCK_YES, GTK_STOCK_NO, NULL, TRUE,
-                                        NULL, ALERT_QUESTION, G_ALERTALTERNATE);
+                                        GTK_STOCK_NO, GTK_STOCK_YES, NULL, TRUE,
+                                        NULL, ALERT_QUESTION, G_ALERTDEFAULT);
                g_free(buf);
 
-               if (status != G_ALERTDEFAULT
-                && status != (G_ALERTDEFAULT | G_ALERTDISABLE))
+               if (status != G_ALERTALTERNATE
+                && status != (G_ALERTALTERNATE | G_ALERTDISABLE))
                        return;
                if (status & G_ALERTDISABLE)
                        prefs_common.warn_dnd = FALSE;
@@ -2251,13 +2247,18 @@ void folderview_set_target_folder_color(gint color_op)
        }
 }
 
+static gchar *last_font = NULL;
 void folderview_reflect_prefs_pixmap_theme(FolderView *folderview)
 {
+       /* force reinit */
+       if (last_font) 
+               g_free(last_font);
+       last_font = NULL;
+       
 }
 
 void folderview_reflect_prefs(void)
 {
-       static gchar *last_font = NULL;
        gboolean update_font = TRUE;
        FolderView *folderview = mainwindow_get_mainwindow()->folderview;
        FolderItem *item = folderview_get_selected_item(folderview);
@@ -2287,8 +2288,13 @@ void folderview_reflect_prefs(void)
                (G_OBJECT(folderview->ctree),
                 G_CALLBACK(folderview_selected), folderview);
 
-       if (item)
+       if (item) {
+               GtkCTreeNode *node = gtk_ctree_find_by_row_data(
+                       GTK_CTREE(folderview->ctree), NULL, item);
+
                folderview_select(folderview, item);
+               folderview->selected = node;
+       }
 
        g_signal_handlers_unblock_by_func
                (G_OBJECT(folderview->ctree),