fix bug 4239, 'Preferences: Text Options Header Display modal is not modal' (sic)
[claws.git] / src / uri_opener.c
index 252872a55614456fb7d4ae73033b3d6143cf8b56..4b2506fff8e96a5074f60ddc0a9ff575a67dffa7 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2009 Colin Leroy <colin@colino.net> and 
+ * Copyright (C) 1999-2012 Colin Leroy <colin@colino.net> and 
  * the Claws Mail team
  *
  * This program is free software; you can redistribute it and/or modify
@@ -19,6 +19,7 @@
  */
 #ifdef HAVE_CONFIG_H
 #  include "config.h"
+#include "claws-features.h"
 #endif
 
 #include <gtk/gtk.h>
@@ -34,7 +35,7 @@
 #include "gtkutils.h"
 #include "alertpanel.h"
 #include "textview.h"
-#include "prefs_common.h"
+#include "mimeview.h"
 #include "prefs_common.h"
 
 enum {
@@ -154,12 +155,20 @@ static GtkWidget *uri_opener_scrolled_win_create(void)
        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
                                       GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
                                       
-       gtk_widget_set_size_request(scrolledwin, 500, 250);
+       gtk_widget_set_size_request(scrolledwin, 200, 250);
        gtk_widget_show(scrolledwin);
        
        return scrolledwin;
 }
 
+static void uri_opener_size_allocate_cb(GtkWidget *widget, GtkAllocation *allocation)
+{
+       cm_return_if_fail(allocation != NULL);
+
+       prefs_common.uriopenerwin_width = allocation->width;
+       prefs_common.uriopenerwin_height = allocation->height;
+}
+
 static void uri_opener_create(void) 
 {
        GtkWidget *window;
@@ -173,16 +182,20 @@ static void uri_opener_create(void)
        GtkWidget *open_btn;
        GtkWidget *close_btn;
        GtkWidget *scrolledwin;
+       static GdkGeometry geometry;
 
        window = gtkut_window_new(GTK_WINDOW_TOPLEVEL, "uri_opener");
        gtk_window_set_title (GTK_WINDOW(window),
-                             Q_("Dialog title|Open URLs"));
+                             C_("Dialog title", "Open URLs"));
 
        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);
        g_signal_connect(G_OBJECT(window), "delete_event",
                         G_CALLBACK(uri_opener_close_cb), NULL);
+       g_signal_connect (G_OBJECT(window), "size_allocate",
+                        G_CALLBACK (uri_opener_size_allocate_cb), NULL);
        g_signal_connect(G_OBJECT(window), "key_press_event",
                         G_CALLBACK(key_pressed), NULL);
        MANAGE_WINDOW_SIGNALS_CONNECT (window);
@@ -225,6 +238,16 @@ static void uri_opener_create(void)
        gtk_widget_show_all(vbox1);
        gtk_container_add(GTK_CONTAINER (window), vbox1);
 
+       if (!geometry.min_height) {
+               geometry.min_width = 450;
+               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.uriopenerwin_width,
+                                   prefs_common.uriopenerwin_height);
+
        opener.window = window;
        opener.hbox_scroll = hbox_scroll;
        opener.hbox1 = hbox1;
@@ -301,7 +324,8 @@ static void uri_opener_load_uris (void)
        g_object_unref(opener.urilist);
        
        model = gtk_tree_view_get_model(GTK_TREE_VIEW(opener.urilist));
-       gtk_tree_model_get_iter_first(model, &iter);
+       if (!gtk_tree_model_get_iter_first(model, &iter))
+               return;
        selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(opener.urilist));
        gtk_tree_selection_select_iter(selection, &iter);
 }
@@ -322,7 +346,7 @@ static void uri_opener_close_cb(GtkWidget *widget,
 
 static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
 {
-       if (event && event->keyval == GDK_Escape)
+       if (event && event->keyval == GDK_KEY_Escape)
                uri_opener_close();
        return FALSE;
 }
@@ -362,8 +386,7 @@ static void uri_opener_open_cb(GtkWidget *widget,
 
        selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(opener.urilist));
        selected  = gtk_tree_selection_get_selected_rows(selection, &model);
-       if(!selected)
-               return;
+       cm_return_if_fail(selected);
                
        for(cur = selected; cur != NULL; cur = g_list_next(cur))
        {