add Bcc to default headers in drop-down
[claws.git] / src / prefs_display_header.c
index b6d7bd51c307c8d7b2934b3217278385ced7ee46..385f32cb64aecd6932b3767fa420e8eed451e098 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail team
+ * Copyright (C) 1999-2012 Hiroyuki Yamamoto and the Claws Mail 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
@@ -19,6 +19,7 @@
 
 #ifdef HAVE_CONFIG_H
 #  include "config.h"
+#include "claws-features.h"
 #endif
 
 #include "defs.h"
@@ -93,30 +94,23 @@ static void prefs_display_header_insert_header              (GtkListStore *store,
 static GtkWidget *prefs_display_header_list_view_create        (const gchar *name);
 static void prefs_filtering_create_list_view_columns   (GtkWidget *list_view, 
                                                         const gchar *name);
-static void headers_list_model_row_changed             (GtkTreeModel *model, 
-                                                        GtkTreePath *path, 
-                                                        GtkTreeIter *iter, 
-                                                        GtkTreeView *list_view);
 static void headers_list_model_rows_reordered          (GtkTreeModel *model,
                                                         GtkTreePath  *path, 
                                                         GtkTreeIter  *iter,
                                                         gpointer      arg,
                                                         GtkTreeView  *list_view);
                                                         
-static void drag_begin (GtkTreeView *list_view,
-                        GdkDragContext *context,
-                        gpointer data);
-
 static void drag_end   (GtkTreeView *list_view,
                         GdkDragContext *context,
                         gpointer data);
 
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
 static gchar *defaults[] =
 {
        "From",
        "To",
        "Cc",
+       "Bcc",
        "Subject",
        "Date", 
        "Reply-To",
@@ -131,7 +125,7 @@ static gchar *defaults[] =
        "-Message-ID",
        "-In-Reply-To",
        "-References",
-       "-Mime-Version",
+       "-MIME-Version",
        "-Content-Type",
        "-Content-Transfer-Encoding",
        "-X-UIDL",
@@ -146,6 +140,7 @@ static gchar *defaults[] =
        "From",
        "To",
        "Cc",
+       "Bcc",
        "Subject",
        "Date", 
        "Newsgroups",
@@ -160,7 +155,7 @@ static gchar *defaults[] =
        "-Message-ID",
        "-In-Reply-To",
        "-References",
-       "-Mime-Version",
+       "-MIME-Version",
        "-Content-Type",
        "-Content-Transfer-Encoding",
        "-X-UIDL",
@@ -197,6 +192,7 @@ void prefs_display_header_open(void)
        prefs_display_header_set_dialog();
 
        gtk_widget_show(dispheader.window);
+       gtk_window_set_modal(GTK_WINDOW(dispheader.window), TRUE);
 }
 
 static void prefs_display_header_create(void)
@@ -235,7 +231,6 @@ static void prefs_display_header_create(void)
        window = gtkut_window_new(GTK_WINDOW_TOPLEVEL, "prefs_display_header");
        gtk_container_set_border_width (GTK_CONTAINER (window), 8);
        gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
-       gtk_window_set_modal (GTK_WINDOW (window), TRUE);
        gtk_window_set_resizable(GTK_WINDOW (window), TRUE);
 
        vbox = gtk_vbox_new (FALSE, 6);
@@ -282,10 +277,18 @@ static void prefs_display_header_create(void)
        gtk_widget_show (hdr_label);
        gtk_box_pack_start (GTK_BOX (hbox1), hdr_label, FALSE, FALSE, 0);
 
+#if !GTK_CHECK_VERSION(2, 24, 0)
        hdr_combo = gtk_combo_box_entry_new_text();
+#else
+       hdr_combo = gtk_combo_box_text_new_with_entry();
+#endif
        for(i=0; i < 9 ; i++)
+#if !GTK_CHECK_VERSION(2, 24, 0)
                gtk_combo_box_append_text(GTK_COMBO_BOX (hdr_combo),
-                       prefs_common_translated_header_name(defaults[i]));
+#else
+               gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT (hdr_combo),
+#endif
+                       (*defaults[i] == '-') ? defaults[i]+1 : defaults[i]);
        gtk_combo_box_set_active(GTK_COMBO_BOX(hdr_combo), 0);
        gtk_widget_show (hdr_combo);
        gtk_box_pack_start (GTK_BOX (hbox1), hdr_combo, TRUE, TRUE, 0);
@@ -318,10 +321,6 @@ static void prefs_display_header_create(void)
        gtk_container_add(GTK_CONTAINER(list_view_scrolledwin), headers_list_view);
        gtk_tree_view_set_reorderable(GTK_TREE_VIEW(headers_list_view), TRUE);
 
-       g_signal_connect(G_OBJECT(headers_list_view), "drag_begin",                      
-                        G_CALLBACK(drag_begin),
-                        headers_list_view);
-                        
        g_signal_connect(G_OBJECT(headers_list_view), "drag_end",                        
                         G_CALLBACK(drag_end),
                         headers_list_view);
@@ -473,7 +472,7 @@ static void prefs_display_header_write_config(void)
                             DISPLAY_HEADER_RC, NULL);
 
        if ((pfile = prefs_write_open(rcpath)) == NULL) {
-               g_warning("failed to write configuration to file\n");
+               g_warning("failed to write configuration to file");
                g_free(rcpath);
                return;
        }
@@ -498,7 +497,7 @@ static void prefs_display_header_write_config(void)
        g_free(rcpath);
 
        if (prefs_file_close(pfile) < 0) {
-               g_warning("failed to write configuration to file\n");
+               g_warning("failed to write configuration to file");
                return;
        }
 }
@@ -590,7 +589,11 @@ static void prefs_display_header_list_view_set_row(gboolean hidden)
        gchar *entry_text;
        GtkTreeModel *model;
 
+#if !GTK_CHECK_VERSION(2, 24, 0)
        entry_text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(dispheader.hdr_combo));
+#else
+       entry_text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(dispheader.hdr_combo));
+#endif
        if (!entry_text)
                entry_text = gtk_editable_get_chars(
                                GTK_EDITABLE(gtk_bin_get_child(GTK_BIN(dispheader.hdr_combo))),0,-1);
@@ -715,7 +718,7 @@ static gboolean prefs_display_header_key_pressed(GtkWidget *widget,
                                             GdkEventKey *event,
                                             gpointer data)
 {
-       if (event && event->keyval == GDK_Escape)
+       if (event && event->keyval == GDK_KEY_Escape)
                prefs_display_header_cancel();
        return FALSE;
 }
@@ -727,12 +730,14 @@ static void prefs_display_header_ok(void)
                        (GTK_TOGGLE_BUTTON(dispheader.other_headers));
        prefs_display_header_write_config();
        gtk_widget_hide(dispheader.window);
+       gtk_window_set_modal(GTK_WINDOW(dispheader.window), FALSE);
 }
 
 static void prefs_display_header_cancel(void)
 {
        prefs_display_header_read_config();
        gtk_widget_hide(dispheader.window);
+       gtk_window_set_modal(GTK_WINDOW(dispheader.window), FALSE);
 }
 
 static gint prefs_display_header_deleted(GtkWidget *widget, GdkEventAny *event,
@@ -760,7 +765,7 @@ static void prefs_display_header_insert_header(GtkListStore *store,
        gtk_list_store_append(store, &iter);
        gtk_list_store_set(store, &iter,
                           PREFS_HDR_HEADER,
-                          prefs_common_translated_header_name(name),
+                          name,
                           PREFS_HDR_DATA, dp,
                           -1);
 }
@@ -798,17 +803,6 @@ static void prefs_filtering_create_list_view_columns(GtkWidget *list_view,
        gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), column);          
 }
 
-/*!
- *\brief       Called as a result of a drag & drop
- */
-static void headers_list_model_row_changed(GtkTreeModel *model, 
-                                          GtkTreePath *path, 
-                                          GtkTreeIter *iter, 
-                                          GtkTreeView *list_view)
-{
-       prefs_display_header_set_list();
-}
-
 /*!
  *\brief       Called as a result of a gtk_list_store_swap()
  */
@@ -821,28 +815,13 @@ static void headers_list_model_rows_reordered(GtkTreeModel *model,
        prefs_display_header_set_list();
 }
 
-static void drag_begin(GtkTreeView *list_view,
-                     GdkDragContext *context,
-                     gpointer data)
-{
-       /* XXX unfortunately a completed drag & drop does not emit 
-        * a "rows_reordered" signal, but a "row_changed" signal.
-        * So during drag and drop, listen to "row_changed", and
-        * update the account list accordingly */
-
-       GtkTreeModel *model = gtk_tree_view_get_model(list_view);
-       g_signal_connect(G_OBJECT(model), "row_changed",
-                        G_CALLBACK(headers_list_model_row_changed),
-                        list_view);
-}
-
+/*!
+ *\brief       Called as a result of a drag & drop
+ */
 static void drag_end(GtkTreeView *list_view,
                    GdkDragContext *context,
                    gpointer data)
 {
-       GtkTreeModel *model = gtk_tree_view_get_model(list_view);
-       g_signal_handlers_disconnect_by_func(G_OBJECT(model),
-                                            G_CALLBACK(headers_list_model_row_changed),
-                                            list_view);
+       prefs_display_header_set_list();
 }