fix bug 4239, 'Preferences: Text Options Header Display modal is not modal' (sic)
[claws.git] / src / prefs_display_header.c
index fd5168ae0b6af056bdbd1faa2dafeef5b986b18b..f179d0ddc04681c169e289755274e5b16304a3c9 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2011 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"
@@ -40,6 +41,7 @@
 #include "displayheader.h"
 #include "utils.h"
 #include "gtkutils.h"
+#include "file-utils.h"
 
 enum {
        PREFS_HDR_HEADER,
@@ -109,6 +111,7 @@ static gchar *defaults[] =
        "From",
        "To",
        "Cc",
+       "Bcc",
        "Subject",
        "Date", 
        "Reply-To",
@@ -123,7 +126,7 @@ static gchar *defaults[] =
        "-Message-ID",
        "-In-Reply-To",
        "-References",
-       "-Mime-Version",
+       "-MIME-Version",
        "-Content-Type",
        "-Content-Transfer-Encoding",
        "-X-UIDL",
@@ -138,6 +141,7 @@ static gchar *defaults[] =
        "From",
        "To",
        "Cc",
+       "Bcc",
        "Subject",
        "Date", 
        "Newsgroups",
@@ -152,7 +156,7 @@ static gchar *defaults[] =
        "-Message-ID",
        "-In-Reply-To",
        "-References",
-       "-Mime-Version",
+       "-MIME-Version",
        "-Content-Type",
        "-Content-Transfer-Encoding",
        "-X-UIDL",
@@ -229,6 +233,7 @@ static void prefs_display_header_create(void)
        gtk_container_set_border_width (GTK_CONTAINER (window), 8);
        gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
        gtk_window_set_resizable(GTK_WINDOW (window), TRUE);
+       gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
 
        vbox = gtk_vbox_new (FALSE, 6);
        gtk_widget_show (vbox);
@@ -274,9 +279,9 @@ static void prefs_display_header_create(void)
        gtk_widget_show (hdr_label);
        gtk_box_pack_start (GTK_BOX (hbox1), hdr_label, FALSE, FALSE, 0);
 
-       hdr_combo = gtk_combo_box_entry_new_text();
+       hdr_combo = gtk_combo_box_text_new_with_entry();
        for(i=0; i < 9 ; i++)
-               gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(hdr_combo),
+               gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT (hdr_combo),
                        (*defaults[i] == '-') ? defaults[i]+1 : defaults[i]);
        gtk_combo_box_set_active(GTK_COMBO_BOX(hdr_combo), 0);
        gtk_widget_show (hdr_combo);
@@ -287,6 +292,47 @@ static void prefs_display_header_create(void)
        gtk_widget_show (list_view_hbox);
        gtk_box_pack_start (GTK_BOX (vbox1), list_view_hbox, TRUE, TRUE, 0);
 
+       /* hidden headers list */
+
+       list_view_hbox2 = gtk_hbox_new (FALSE, 8);
+       gtk_widget_show (list_view_hbox2);
+       gtk_box_pack_start (GTK_BOX (list_view_hbox), list_view_hbox2, TRUE, TRUE, 0);
+
+       list_view_scrolledwin = gtk_scrolled_window_new (NULL, NULL);
+       gtk_widget_set_size_request (list_view_scrolledwin, 200, 210);
+       gtk_widget_show (list_view_scrolledwin);
+       gtk_box_pack_start (GTK_BOX (list_view_hbox2), list_view_scrolledwin,
+                           TRUE, TRUE, 0);
+       gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (list_view_scrolledwin),
+                                       GTK_POLICY_AUTOMATIC,
+                                       GTK_POLICY_AUTOMATIC);
+       gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(list_view_scrolledwin),
+                                           GTK_SHADOW_IN);
+
+       hidden_headers_list_view = prefs_display_header_list_view_create
+                                       (_("Hidden headers"));
+       gtk_widget_show (hidden_headers_list_view);
+       gtk_container_add (GTK_CONTAINER (list_view_scrolledwin),
+                          hidden_headers_list_view);
+
+       btn_vbox = gtk_vbox_new (FALSE, 8);
+       gtk_widget_show (btn_vbox);
+       gtk_box_pack_start (GTK_BOX (list_view_hbox2), btn_vbox, FALSE, FALSE, 0);
+
+       reg_btn = gtk_button_new_from_stock (GTK_STOCK_ADD);
+       gtk_widget_show (reg_btn);
+       gtk_box_pack_start (GTK_BOX (btn_vbox), reg_btn, FALSE, TRUE, 0);
+       g_signal_connect (G_OBJECT (reg_btn), "clicked",
+                           G_CALLBACK
+                           (prefs_display_header_register_cb),
+                           GINT_TO_POINTER(TRUE));
+       del_btn = gtk_button_new_from_stock (GTK_STOCK_DELETE);
+       gtk_widget_show (del_btn);
+       gtk_box_pack_start (GTK_BOX (btn_vbox), del_btn, FALSE, TRUE, 0);
+       g_signal_connect (G_OBJECT       (del_btn), "clicked",
+                           G_CALLBACK (prefs_display_header_delete_cb),
+                           hidden_headers_list_view);
+
        /* display headers list */
 
        list_view_hbox1 = gtk_hbox_new (FALSE, 8);
@@ -349,49 +395,6 @@ static void prefs_display_header_create(void)
        g_signal_connect (G_OBJECT (down_btn), "clicked",
                          G_CALLBACK (prefs_display_header_down), NULL);
 
-       /* hidden headers list */
-
-       list_view_hbox2 = gtk_hbox_new (FALSE, 8);
-       gtk_widget_show (list_view_hbox2);
-       gtk_box_pack_start (GTK_BOX (list_view_hbox), list_view_hbox2, TRUE, TRUE, 0);
-
-       list_view_scrolledwin = gtk_scrolled_window_new (NULL, NULL);
-       gtk_widget_set_size_request (list_view_scrolledwin, 200, 210);
-       gtk_widget_show (list_view_scrolledwin);
-       gtk_box_pack_start (GTK_BOX (list_view_hbox2), list_view_scrolledwin,
-                           TRUE, TRUE, 0);
-       gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (list_view_scrolledwin),
-                                       GTK_POLICY_AUTOMATIC,
-                                       GTK_POLICY_AUTOMATIC);
-       gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(list_view_scrolledwin),
-                                           GTK_SHADOW_IN);
-
-       hidden_headers_list_view = prefs_display_header_list_view_create
-                                       (_("Hidden headers"));
-       gtk_widget_show (hidden_headers_list_view);
-       gtk_container_add (GTK_CONTAINER (list_view_scrolledwin),
-                          hidden_headers_list_view);
-
-       btn_vbox = gtk_vbox_new (FALSE, 8);
-       gtk_widget_show (btn_vbox);
-       gtk_box_pack_start (GTK_BOX (list_view_hbox2), btn_vbox, FALSE, FALSE, 0);
-
-       reg_btn = gtk_button_new_from_stock (GTK_STOCK_ADD);
-       gtk_widget_show (reg_btn);
-       gtk_box_pack_start (GTK_BOX (btn_vbox), reg_btn, FALSE, TRUE, 0);
-       g_signal_connect (G_OBJECT (reg_btn), "clicked",
-                           G_CALLBACK
-                           (prefs_display_header_register_cb),
-                           GINT_TO_POINTER(TRUE));
-       del_btn = gtk_button_new_from_stock (GTK_STOCK_DELETE);
-       gtk_widget_show (del_btn);
-       gtk_box_pack_start (GTK_BOX (btn_vbox), del_btn, FALSE, TRUE, 0);
-       g_signal_connect (G_OBJECT       (del_btn), "clicked",
-                           G_CALLBACK (prefs_display_header_delete_cb),
-                           hidden_headers_list_view);
-
-       
-
        PACK_CHECK_BUTTON (vbox, checkbtn_other_headers,
                           _("Show all unspecified headers"));
        SET_TOGGLE_SENSITIVITY (checkbtn_other_headers, list_view_hbox2);
@@ -421,8 +424,8 @@ void prefs_display_header_read_config(void)
 
        rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
                             DISPLAY_HEADER_RC, NULL);
-       if ((fp = g_fopen(rcpath, "rb")) == NULL) {
-               if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen");
+       if ((fp = claws_fopen(rcpath, "rb")) == NULL) {
+               if (ENOENT != errno) FILE_OP_ERROR(rcpath, "claws_fopen");
                g_free(rcpath);
                prefs_common.disphdr_list = NULL;
                prefs_display_header_set_default();
@@ -438,7 +441,7 @@ void prefs_display_header_read_config(void)
                        g_slist_remove(prefs_common.disphdr_list, dp);
        }
 
-       while (fgets(buf, sizeof(buf), fp) != NULL) {
+       while (claws_fgets(buf, sizeof(buf), fp) != NULL) {
                g_strdelimit(buf, "\r\n", '\0');
                dp = display_header_prop_read_str(buf);
                if (dp)
@@ -446,7 +449,7 @@ void prefs_display_header_read_config(void)
                                g_slist_append(prefs_common.disphdr_list, dp);
        }
 
-       fclose(fp);
+       claws_fclose(fp);
 }
 
 static void prefs_display_header_write_config(void)
@@ -461,7 +464,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;
        }
@@ -472,9 +475,9 @@ static void prefs_display_header_write_config(void)
                gchar *dpstr;
 
                dpstr = display_header_prop_get_str(dp);
-               if (fputs(dpstr, pfile->fp) == EOF ||
-                   fputc('\n', pfile->fp) == EOF) {
-                       FILE_OP_ERROR(rcpath, "fputs || fputc");
+               if (claws_fputs(dpstr, pfile->fp) == EOF ||
+                   claws_fputc('\n', pfile->fp) == EOF) {
+                       FILE_OP_ERROR(rcpath, "claws_fputs || claws_fputc");
                        prefs_file_close_revert(pfile);
                        g_free(rcpath);
                        g_free(dpstr);
@@ -486,7 +489,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;
        }
 }
@@ -578,8 +581,7 @@ static void prefs_display_header_list_view_set_row(gboolean hidden)
        gchar *entry_text;
        GtkTreeModel *model;
 
-       entry_text = gtk_combo_box_text_get_active_text(
-               GTK_COMBO_BOX_TEXT(dispheader.hdr_combo));
+       entry_text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(dispheader.hdr_combo));
        if (!entry_text)
                entry_text = gtk_editable_get_chars(
                                GTK_EDITABLE(gtk_bin_get_child(GTK_BIN(dispheader.hdr_combo))),0,-1);
@@ -704,7 +706,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;
 }