fix bug 4239, 'Preferences: Text Options Header Display modal is not modal' (sic)
[claws.git] / src / gtk / foldersort.c
index fe5717d677a639cad25c924ba2216d40f6b38065..d6ff428b0e1de98040a81e7d01687fdf26296aa5 100644 (file)
@@ -26,6 +26,7 @@
 #include "foldersort.h"
 #include "inc.h"
 #include "utils.h"
+#include "prefs_common.h"
 
 enum {
        FOLDERSORT_COL_NAME,
@@ -110,9 +111,7 @@ static void moveup_clicked(GtkWidget *widget, FolderSortDialog *dialog)
        GtkTreeSelection *sel;
        GtkTreeModel *model;
        GtkTreeIter iter, previter;
-#if !GTK_CHECK_VERSION(3, 0, 0)
        GtkTreePath *path;
-#endif
 
        /* Get currently selected iter */
        sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->folderlist));
@@ -120,13 +119,6 @@ static void moveup_clicked(GtkWidget *widget, FolderSortDialog *dialog)
                return;
 
        /* Now get the iter above it, if any */
-#if GTK_CHECK_VERSION(3, 0, 0)
-       previter = iter;
-       if (!gtk_tree_model_iter_previous(model, &previter)) {
-               /* No previous iter, are we already on top? */
-               return;
-       }
-#else
        /* GTK+2 does not have gtk_tree_model_iter_previous(), so
         * we have to get through GtkPath */
        path = gtk_tree_model_get_path(model, &iter);
@@ -143,7 +135,6 @@ static void moveup_clicked(GtkWidget *widget, FolderSortDialog *dialog)
        }
 
        gtk_tree_path_free(path);
-#endif
 
        gtk_list_store_move_before(GTK_LIST_STORE(model), &iter, &previter);
 
@@ -209,6 +200,14 @@ static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, FolderSortDia
        return FALSE;
 }
 
+static void foldersort_size_allocate_cb(GtkWidget *widget, GtkAllocation *allocation)
+{
+       cm_return_if_fail(allocation != NULL);
+
+       prefs_common.foldersortwin_width = allocation->width;
+       prefs_common.foldersortwin_height = allocation->height;
+}
+
 void foldersort_open()
 {
        FolderSortDialog *dialog = g_new0(FolderSortDialog, 1);
@@ -233,6 +232,7 @@ void foldersort_open()
        GtkCellRenderer *rdr;
        GtkTreeSelection *selector;
        GtkTreeIter iter;
+       static GdkGeometry geometry;
 
        window = gtkut_window_new(GTK_WINDOW_TOPLEVEL, "foldersort");
        g_object_set_data(G_OBJECT(window), "window", window);
@@ -240,9 +240,11 @@ void foldersort_open()
        gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
        gtk_window_set_title(GTK_WINDOW(window), _("Set mailbox order"));
        gtk_window_set_modal(GTK_WINDOW(window), TRUE);
-       gtk_window_set_default_size(GTK_WINDOW(window), 400, 300);
+       gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
        g_signal_connect(G_OBJECT(window), "delete_event",
                         G_CALLBACK(delete_event), dialog);
+       g_signal_connect (G_OBJECT(window), "size_allocate",
+                        G_CALLBACK (foldersort_size_allocate_cb), NULL);
        g_signal_connect(G_OBJECT(window), "key_press_event",
                         G_CALLBACK(key_pressed), dialog);
 
@@ -326,6 +328,16 @@ void foldersort_open()
        gtk_widget_show(movedown_btn);
        gtk_box_pack_start(GTK_BOX(btn_vbox), movedown_btn, FALSE, FALSE, 0);
 
+       if (!geometry.min_height) {
+               geometry.min_width = 400;
+               geometry.min_height = 300;
+       }
+
+       gtk_window_set_geometry_hints(GTK_WINDOW(window), NULL, &geometry,
+                                     GDK_HINT_MIN_SIZE);
+       gtk_widget_set_size_request(window, prefs_common.foldersortwin_width,
+                                   prefs_common.foldersortwin_height);
+
        dialog->window = window;
        dialog->moveup_btn = moveup_btn;
        dialog->movedown_btn = movedown_btn;