fix bug 4239, 'Preferences: Text Options Header Display modal is not modal' (sic)
[claws.git] / src / prefs_other.c
index 1ea901a9714847b7b6382e44d6f4058a9966d4b7..30c18b9ee3fe3ac0f438e1b647892ff22862ec17 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 2005-2015 Colin Leroy and The Claws Mail Team
+ * Copyright (C) 2005-2019 Colin Leroy 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
@@ -59,12 +59,14 @@ typedef struct _OtherPage
        GtkWidget *checkbtn_askonclean;
        GtkWidget *checkbtn_warnqueued;
        GtkWidget *spinbtn_iotimeout;
+       GtkWidget *checkbtn_gtk_enable_accels;
        GtkWidget *checkbtn_gtk_can_change_accels;
        GtkWidget *checkbtn_askonfilter;
        GtkWidget *checkbtn_use_shred;
        GtkWidget *checkbtn_real_time_sync;
        GtkWidget *flush_metadata_faster_radiobtn;
        GtkWidget *flush_metadata_safer_radiobtn;
+       GtkWidget *checkbtn_transhdr;
 #ifndef PASSWORD_CRYPTO_OLD
        GtkWidget *checkbtn_use_passphrase;
 #endif
@@ -108,6 +110,7 @@ static void prefs_keybind_select(void)
        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), FALSE);
+       gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
        manage_window_set_transient (GTK_WINDOW (window));
 
        vbox1 = gtk_vbox_new (FALSE, VSPACING);
@@ -409,11 +412,7 @@ static void prefs_keybind_apply_clicked(GtkWidget *widget)
                {"<Actions>/Menu/Edit/Advanced/DelForwWord",            "<alt>D"}, /* - */
        };
 
-#if !GTK_CHECK_VERSION(2, 24, 0)
-       text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(keybind.combo));
-#else
        text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(keybind.combo));
-#endif
 
        if (!strcmp(text, _("Default"))) {
                menurc = default_menurc;
@@ -457,6 +456,7 @@ static void prefs_other_create_widget(PrefsPage *_page, GtkWindow *window,
 
        GtkWidget *frame_keys;
        GtkWidget *vbox_keys;
+       GtkWidget *checkbtn_gtk_enable_accels;
        GtkWidget *checkbtn_gtk_can_change_accels;
        GtkWidget *button_keybind;
 
@@ -465,6 +465,7 @@ static void prefs_other_create_widget(PrefsPage *_page, GtkWindow *window,
        GtkAdjustment *spinbtn_iotimeout_adj;
 
        GtkWidget *vbox2;
+       GtkWidget *checkbtn_transhdr;
        GtkWidget *checkbtn_askonclean;
        GtkWidget *checkbtn_askonfilter;
        GtkWidget *checkbtn_use_shred;
@@ -513,6 +514,9 @@ static void prefs_other_create_widget(PrefsPage *_page, GtkWindow *window,
 
        vbox_keys = gtkut_get_options_frame(vbox1, &frame_keys, _("Keyboard shortcuts"));
 
+       PACK_CHECK_BUTTON(vbox_keys, checkbtn_gtk_enable_accels,
+                       _("Enable keyboard shortcuts"));
+
        PACK_CHECK_BUTTON(vbox_keys, checkbtn_gtk_can_change_accels,
                        _("Enable customisable keyboard shortcuts"));
 
@@ -579,6 +583,11 @@ static void prefs_other_create_widget(PrefsPage *_page, GtkWindow *window,
        gtk_widget_show (vbox2);
        gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
 
+       PACK_CHECK_BUTTON(vbox2, checkbtn_transhdr,
+                          _("Translate header names"));
+       CLAWS_SET_TIP(checkbtn_transhdr,
+                            _("The display of standard headers (such as 'From:', 'Subject:') "
+                            "will be translated into your language."));
        PACK_CHECK_BUTTON (vbox2, checkbtn_askonclean, 
                           _("Ask before emptying trash"));
        PACK_CHECK_BUTTON (vbox2, checkbtn_askonfilter,
@@ -626,6 +635,8 @@ static void prefs_other_create_widget(PrefsPage *_page, GtkWindow *window,
        g_signal_connect (G_OBJECT (button_change_passphrase), "clicked",
                          G_CALLBACK (prefs_change_master_passphrase), NULL);
 #endif
+       SET_TOGGLE_SENSITIVITY(checkbtn_gtk_enable_accels, checkbtn_gtk_can_change_accels);
+       SET_TOGGLE_SENSITIVITY(checkbtn_gtk_enable_accels, button_keybind);
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_addaddrbyclick), 
                prefs_common.add_address_by_click);
@@ -637,12 +648,16 @@ static void prefs_other_create_widget(PrefsPage *_page, GtkWindow *window,
                prefs_common.ask_on_clean);
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_warnqueued), 
                prefs_common.warn_queued_on_exit);
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_gtk_enable_accels),
+               prefs_common.gtk_enable_accels);
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_gtk_can_change_accels),
                prefs_common.gtk_can_change_accels);
 
        gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbtn_iotimeout),
                prefs_common.io_timeout_secs);
 
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_transhdr),
+               prefs_common.trans_hdr);
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_askonfilter), 
                prefs_common.ask_apply_per_account_filtering_rules);
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_use_shred), 
@@ -663,6 +678,8 @@ static void prefs_other_create_widget(PrefsPage *_page, GtkWindow *window,
        prefs_other->checkbtn_askonclean = checkbtn_askonclean;
        prefs_other->checkbtn_warnqueued = checkbtn_warnqueued;
        prefs_other->spinbtn_iotimeout = spinbtn_iotimeout;
+       prefs_other->checkbtn_transhdr = checkbtn_transhdr;
+       prefs_other->checkbtn_gtk_enable_accels = checkbtn_gtk_enable_accels;
        prefs_other->checkbtn_gtk_can_change_accels = checkbtn_gtk_can_change_accels;
        prefs_other->checkbtn_askonfilter = checkbtn_askonfilter;
        prefs_other->checkbtn_use_shred = checkbtn_use_shred;
@@ -678,6 +695,7 @@ static void prefs_other_create_widget(PrefsPage *_page, GtkWindow *window,
 static void prefs_other_save(PrefsPage *_page)
 {
        OtherPage *page = (OtherPage *) _page;
+       gboolean gtk_enable_accels;
        gboolean gtk_can_change_accels;
 
        prefs_common.add_address_by_click = gtk_toggle_button_get_active(
@@ -698,6 +716,8 @@ static void prefs_other_save(PrefsPage *_page)
 #ifdef HAVE_LIBETPAN
        imap_main_set_timeout(prefs_common.io_timeout_secs);
 #endif
+       prefs_common.trans_hdr = gtk_toggle_button_get_active(
+                       GTK_TOGGLE_BUTTON(page->checkbtn_transhdr));
        prefs_common.ask_apply_per_account_filtering_rules = 
                gtk_toggle_button_get_active(
                        GTK_TOGGLE_BUTTON(page->checkbtn_askonfilter)); 
@@ -755,7 +775,26 @@ static void prefs_other_save(PrefsPage *_page)
                                "gtk-can-change-accels",
                                (glong)prefs_common.gtk_can_change_accels,
                                "XProperty");
+       }
+       gtk_enable_accels = gtk_toggle_button_get_active(
+               GTK_TOGGLE_BUTTON(page->checkbtn_gtk_enable_accels));
+
+       if (prefs_common.gtk_enable_accels != gtk_enable_accels) {
+               prefs_common.gtk_enable_accels = gtk_enable_accels;
 
+               gtk_settings_set_long_property(gtk_settings_get_default(),
+                               "gtk-enable-accels",
+                               (glong)prefs_common.gtk_enable_accels,
+                               "XProperty");
+               
+               gtk_settings_set_long_property(gtk_settings_get_default(),
+                               "gtk-enable-mnemonics",
+                               (glong)prefs_common.gtk_enable_accels,
+                               "XProperty");
+       }
+       
+       if (prefs_common.gtk_enable_accels != gtk_enable_accels ||
+           prefs_common.gtk_can_change_accels != gtk_can_change_accels) {              
                /* gtk_can_change_accels value changed : we have (only if changed)
                 * to apply the gtk property to all widgets : */
                gtk_rc_reparse_all_for_settings(gtk_settings_get_default(), TRUE);
@@ -790,6 +829,14 @@ void prefs_other_init(void)
                        "gtk-can-change-accels",
                        (glong)prefs_common.gtk_can_change_accels,
                        "XProperty");
+       gtk_settings_set_long_property(gtk_settings_get_default(),
+                       "gtk-enable-accels",
+                       (glong)prefs_common.gtk_enable_accels,
+                       "XProperty");
+       gtk_settings_set_long_property(gtk_settings_get_default(),
+                       "gtk-enable-mnemonics",
+                       (glong)prefs_common.gtk_enable_accels,
+                       "XProperty");
 }
 
 void prefs_other_done(void)