add Bcc to default headers in drop-down
[claws.git] / src / prefs_display_header.c
index ba7e7882dad13f6bb91105a2c6644af08ff57842..385f32cb64aecd6932b3767fa420e8eed451e098 100644 (file)
@@ -1,10 +1,10 @@
 /*
  * 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
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 3 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * 
  */
 
 #ifdef HAVE_CONFIG_H
 #  include "config.h"
+#include "claws-features.h"
 #endif
 
 #include "defs.h"
@@ -93,29 +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 GENERIC_UMPC
 static gchar *defaults[] =
 {
        "From",
        "To",
        "Cc",
+       "Bcc",
        "Subject",
        "Date", 
        "Reply-To",
@@ -130,7 +125,7 @@ static gchar *defaults[] =
        "-Message-ID",
        "-In-Reply-To",
        "-References",
-       "-Mime-Version",
+       "-MIME-Version",
        "-Content-Type",
        "-Content-Transfer-Encoding",
        "-X-UIDL",
@@ -139,7 +134,37 @@ static gchar *defaults[] =
        "-Priority",
        "-X-Face"
 };
-
+#else
+static gchar *defaults[] =
+{
+       "From",
+       "To",
+       "Cc",
+       "Bcc",
+       "Subject",
+       "Date", 
+       "Newsgroups",
+       "Followup-To",
+       "-Reply-To",
+       "-Sender",
+       "-User-Agent",
+       "-X-Mailer",    
+       "-Organization",
+       "-X-Newsreader",
+       "-Received",
+       "-Message-ID",
+       "-In-Reply-To",
+       "-References",
+       "-MIME-Version",
+       "-Content-Type",
+       "-Content-Transfer-Encoding",
+       "-X-UIDL",
+       "-Precedence",
+       "-Status",
+       "-Priority",
+       "-X-Face"
+};
+#endif
 static void prefs_display_header_set_default(void)
 {
        gint i;
@@ -167,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)
@@ -205,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);
@@ -252,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.trans_hdr ? gettext(defaults[i]) : 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);
@@ -288,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);
@@ -431,7 +460,7 @@ void prefs_display_header_read_config(void)
        fclose(fp);
 }
 
-void prefs_display_header_write_config(void)
+static void prefs_display_header_write_config(void)
 {
        gchar *rcpath;
        PrefFile *pfile;
@@ -443,7 +472,7 @@ 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;
        }
@@ -468,7 +497,7 @@ 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;
        }
 }
@@ -557,12 +586,17 @@ static void prefs_display_header_list_view_set_row(gboolean hidden)
 {
        GtkTreeView *list_view;
        DisplayHeaderProp *dp;
-       const gchar *entry_text;
+       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_entry_get_text(gtk_bin_get_child(GTK_BIN(dispheader.hdr_combo)));
+               entry_text = gtk_editable_get_chars(
+                               GTK_EDITABLE(gtk_bin_get_child(GTK_BIN(dispheader.hdr_combo))),0,-1);
        if (!entry_text || entry_text[0] == '\0') {
                alertpanel_error(_("Header name is not set."));
                return;
@@ -588,6 +622,8 @@ static void prefs_display_header_list_view_set_row(gboolean hidden)
                                           dp->name, dp);
 
        prefs_display_header_set_list();
+       
+       g_free(entry_text);
 }
 
 static void prefs_display_header_register_cb(GtkButton *btn,
@@ -682,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;
 }
@@ -694,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,
@@ -727,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.trans_hdr ? gettext(name) : name,
+                          name,
                           PREFS_HDR_DATA, dp,
                           -1);
 }
@@ -765,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()
  */
@@ -788,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();
 }