fix bug 4239, 'Preferences: Text Options Header Display modal is not modal' (sic)
[claws.git] / src / prefs_toolbar.c
index 24efd931fb035a8f24c61728f9f54737f91296fe..12bbb83829ddde37722119a78c7d4ad6b17ba207 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 2002-2015 Hiroyuki Yamamoto & the Claws Mail team
+ * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2002-2017 Hiroyuki Yamamoto & 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
@@ -14,7 +14,6 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
  */
 
 /*
@@ -92,7 +91,7 @@ static const gint ToolbarIcons[] =
        STOCK_PIXMAP_LDAP,
        STOCK_PIXMAP_LINEWRAP_CURRENT,
        STOCK_PIXMAP_LINEWRAP_ALL,
-       STOCK_PIXMAP_MAIL,
+       STOCK_PIXMAP_MAIL_DRAFT,
        STOCK_PIXMAP_MAIL_ATTACH,
        STOCK_PIXMAP_MAIL_COMPOSE,
        STOCK_PIXMAP_MAIL_FORWARD,
@@ -129,7 +128,7 @@ static const gint ToolbarIcons[] =
        STOCK_PIXMAP_MIME_PS,
        STOCK_PIXMAP_MIME_TEXT_CALENDAR,
        STOCK_PIXMAP_MIME_PGP_SIG,
-       STOCK_PIXMAP_PRINTER,
+       STOCK_PIXMAP_PRINTER_BTN,
        STOCK_PIXMAP_PRIVACY_SIGNED,
        STOCK_PIXMAP_PRIVACY_PASSED,
        STOCK_PIXMAP_PRIVACY_FAILED,
@@ -145,6 +144,7 @@ static const gint ToolbarIcons[] =
        STOCK_PIXMAP_HAM_BTN,
        STOCK_PIXMAP_TRASH,
        STOCK_PIXMAP_DELETE,
+       STOCK_PIXMAP_DELETE_DUP,
        STOCK_PIXMAP_CANCEL,
        STOCK_PIXMAP_MARK_IGNORETHREAD,
        STOCK_PIXMAP_MARK_WATCHTHREAD,
@@ -370,19 +370,16 @@ static void prefs_toolbar_set_displayed(ToolbarPage *prefs_toolbar)
        }
 
        /* select first */
-       gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter);
-       gtk_tree_selection_select_iter(gtk_tree_view_get_selection
-                                               (list_view_set),
-                                      &iter);
+       if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter)) {
+               gtk_tree_selection_select_iter(gtk_tree_view_get_selection
+                                                       (list_view_set),
+                                              &iter);
+       }
 }
 
 static void add_item_to_plugin_combo(gpointer key, gpointer data, gpointer combo_box)
 {
-#if !GTK_CHECK_VERSION(2, 24, 0)
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo_box), (const gchar*)key);
-#else
        gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box), (const gchar*)key);
-#endif
 }
 
 static void prefs_toolbar_populate(ToolbarPage *prefs_toolbar)
@@ -392,27 +389,17 @@ static void prefs_toolbar_populate(ToolbarPage *prefs_toolbar)
        GHashTable **hash;
 
        prefs_toolbar->combo_action_list = toolbar_get_action_items(prefs_toolbar->source);
-#if !GTK_CHECK_VERSION(2, 24, 0)
-       combobox_set_popdown_strings(GTK_COMBO_BOX(prefs_toolbar->item_func_combo),
-                                    prefs_toolbar->combo_action_list);
-#else
        combobox_set_popdown_strings(GTK_COMBO_BOX_TEXT(prefs_toolbar->item_func_combo),
                                     prefs_toolbar->combo_action_list);
-#endif
 
-       /* get currently defined sylpheed actions */
+       /* get currently defined actions */
        if (prefs_common.actions_list != NULL) {
                for (cur = prefs_common.actions_list; cur != NULL; cur = cur->next) {
                        act = (gchar *)cur->data;
                        get_action_name(act, &act_name);
 
-#if !GTK_CHECK_VERSION(2, 24, 0)
-                       gtk_combo_box_append_text(
-                               GTK_COMBO_BOX(prefs_toolbar->item_action_combo),
-#else
                        gtk_combo_box_text_append_text(
                                GTK_COMBO_BOX_TEXT(prefs_toolbar->item_action_combo),
-#endif
                                act_name);
 
                        g_free(act_name);
@@ -534,11 +521,7 @@ static void prefs_toolbar_register(GtkButton *button, ToolbarPage *prefs_toolbar
                }
 
                if (item_type == ITEM_FUNCTION) {
-#if !GTK_CHECK_VERSION(2, 24, 0)
-                       event = gtk_combo_box_get_active_text(GTK_COMBO_BOX(
-#else
                        event = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(
-#endif
                                                prefs_toolbar->item_func_combo));
 
                        if (is_duplicate(prefs_toolbar, event)) {
@@ -624,11 +607,7 @@ static void prefs_toolbar_substitute(GtkButton *button, ToolbarPage *prefs_toolb
                                                  -1);
 
                if (item_type == ITEM_FUNCTION) {
-#if !GTK_CHECK_VERSION(2, 24, 0)
-                       icon_event = gtk_combo_box_get_active_text(GTK_COMBO_BOX(
-#else
                        icon_event = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(
-#endif
                                                prefs_toolbar->item_func_combo));
 
                        if (is_duplicate(prefs_toolbar, icon_event)
@@ -822,11 +801,7 @@ static void item_type_changed(GtkComboBox *item_type_combo,
 static void action_selection_changed(GtkComboBox *action_combo,
                                ToolbarPage *prefs_toolbar)
 {
-#if !GTK_CHECK_VERSION(2, 24, 0)
-       gchar *text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(
-#else
        gchar *text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(
-#endif
                           prefs_toolbar->item_action_combo));
 
        if(text != NULL) { /* action */
@@ -838,11 +813,7 @@ static void action_selection_changed(GtkComboBox *action_combo,
 static void plugin_selection_changed(GtkComboBox *action_combo,
                 ToolbarPage *prefs_toolbar)
 {
-#if !GTK_CHECK_VERSION(2, 24, 0)
-       gchar *text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(prefs_toolbar->item_plugin_combo));
-#else
        gchar *text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(prefs_toolbar->item_plugin_combo));
-#endif
 
        if (text != NULL) { /* action */
                gtk_entry_set_text(GTK_ENTRY(prefs_toolbar->item_text_entry), text);
@@ -853,23 +824,22 @@ static void plugin_selection_changed(GtkComboBox *action_combo,
 static void func_selection_changed(GtkComboBox *action_combo,
                                ToolbarPage *prefs_toolbar)
 {
-#if !GTK_CHECK_VERSION(2, 24, 0)
-       gchar *text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(
-#else
        gchar *text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(
-#endif
                           prefs_toolbar->item_func_combo));
 
        if(text != NULL) { /* action */
-               int action = -1;
+               int action;
+
                action = toolbar_ret_val_from_descr(text);
-               if (action >= 0)
+               g_free(text);
+               if (action > -1) {
+                       gint icon;
+
                        gtk_entry_set_text(GTK_ENTRY(prefs_toolbar->item_text_entry),
                                        toolbar_get_short_text(action));
-               g_free(text);
-               if (action >= 0) {
-                       StockPixmap stockp = toolbar_get_icon(action);
-                       if (stockp >= 0)  {
+                       icon = toolbar_get_icon(action);
+                       if (icon > -1)  {
+                               StockPixmap stockp = (StockPixmap)icon;
                                g_free(prefs_toolbar->item_icon_file);
                                prefs_toolbar->item_icon_file = g_strdup(stock_pixmap_get_name(stockp));
 
@@ -965,33 +935,21 @@ static void prefs_toolbar_create(ToolbarPage *prefs_toolbar)
                          (GtkAttachOptions) (GTK_FILL),
                          (GtkAttachOptions) (0), 0, 0);
 
-#if !GTK_CHECK_VERSION(2, 24, 0)
-       item_action_combo = gtk_combo_box_new_text();
-#else
        item_action_combo = gtk_combo_box_text_new();
-#endif
        gtk_widget_set_size_request(item_action_combo, 200, -1);
        gtk_table_attach (GTK_TABLE (table), item_action_combo, 1, 3, 1, 2,
                          (GtkAttachOptions) (GTK_FILL),
                          (GtkAttachOptions) (0), 0, 0);
 
        /* available internal functions */
-#if !GTK_CHECK_VERSION(2, 24, 0)
-       item_func_combo = gtk_combo_box_new_text();
-#else
        item_func_combo = gtk_combo_box_text_new();
-#endif
        gtk_widget_set_size_request(item_func_combo, 200, -1);
        gtk_table_attach (GTK_TABLE (table), item_func_combo, 1, 3, 1, 2,
                          (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                          (GtkAttachOptions) (0), 0, 0);
 
        /* plugin-registered items */
-#if !GTK_CHECK_VERSION(2, 24, 0)
-       item_plugin_combo = gtk_combo_box_new_text();
-#else
        item_plugin_combo = gtk_combo_box_text_new();
-#endif
        gtk_widget_set_size_request(item_plugin_combo, 200, -1);
        gtk_table_attach(GTK_TABLE(table), item_plugin_combo, 1, 3, 1, 2,
                         (GtkAttachOptions) (GTK_FILL),
@@ -1362,7 +1320,8 @@ static void set_visible_if_not_text(GtkTreeViewColumn *col,
                                   -1);
                /* note getting a pixbuf from a tree model increases
                 * its refcount ... */
-               g_object_unref(pixbuf);
+               if (pixbuf != NULL)
+                       g_object_unref(pixbuf);
 
                g_object_set(renderer, "visible", TRUE, NULL);
                g_object_set(renderer, "pixbuf",  pixbuf, NULL);
@@ -1480,6 +1439,8 @@ static gboolean set_list_selected(GtkTreeSelection *selector,
                                        ITEM_SEPARATOR);
                g_free(icon_text);
                g_free(descr);
+               if (pix != NULL)
+                       g_object_unref(pix);
 
                return TRUE;
        }
@@ -1516,6 +1477,8 @@ static gboolean set_list_selected(GtkTreeSelection *selector,
 
                g_free(icon_text);
                g_free(descr);
+               if (pix != NULL)
+                       g_object_unref(pix);
 
                return TRUE;
        }
@@ -1531,6 +1494,8 @@ static gboolean set_list_selected(GtkTreeSelection *selector,
 
                g_free(descr);
                g_free(icon_text);
+               if (pix != NULL)
+                       g_object_unref(pix);
                return TRUE;
        }
 
@@ -1556,6 +1521,8 @@ static gboolean set_list_selected(GtkTreeSelection *selector,
 
        g_free(icon_text);
        g_free(descr);
+       if (pix != NULL)
+               g_object_unref(pix);
 
        return TRUE;
 }
@@ -1591,6 +1558,8 @@ static void icon_chooser_ok_clicked(GtkButton *button,
        prefs_toolbar->item_icon_file = icon_file;
        gtk_button_set_image(GTK_BUTTON(prefs_toolbar->icon_button),
                             gtk_image_new_from_pixbuf(pix));
+       if (pix != NULL)
+               g_object_unref(pix);
 
        gtk_widget_destroy(prefs_toolbar->icon_chooser_win);
        prefs_toolbar->icon_chooser_win = NULL;
@@ -1730,6 +1699,7 @@ static void icon_chooser_create(GtkButton *button, ToolbarPage *prefs_toolbar)
        x -= 300-50;
        gtk_window_move(GTK_WINDOW(icon_chooser_win), x, y);
        gtk_window_set_resizable(GTK_WINDOW(icon_chooser_win), FALSE);
+       gtk_window_set_type_hint(GTK_WINDOW(icon_chooser_win), GDK_WINDOW_TYPE_HINT_DIALOG);
        gtk_widget_set_size_request(icon_chooser_win, 300, 320);
 
        scrollwin = gtk_scrolled_window_new(NULL, NULL);