]> Pileus Git - ~andy/gtk/commitdiff
Load/save the file chooser's size
authorFederico Mena Quintero <federico@novell.com>
Wed, 14 Jan 2009 20:19:10 +0000 (20:19 +0000)
committerFederico Mena Quintero <federico@src.gnome.org>
Wed, 14 Jan 2009 20:19:10 +0000 (20:19 +0000)
* gtk/gtkfilechooserdefault.c (save_dialog_geometry): New function.
(settings_save): Save the dialog's geometry.
(gtk_file_chooser_default_get_default_size): Load the geometry
from the settings.  If it was already saved, return that instead
of computing an ad-hoc size.

Signed-off-by: Federico Mena Quintero <federico@novell.com>
svn path=/trunk/; revision=22119

ChangeLog
gtk/gtkfilechooserdefault.c

index 3aef585a69a17e42a2bc57509f0696e2bdd26b66..c5fec0e3d563a34b8a31fe3e08c107199fa3a377 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
        position doesn't quite work yet, but we'll leave it in as a
        reference.
 
+       * gtk/gtkfilechooserdefault.c (save_dialog_geometry): New function.
+       (settings_save): Save the dialog's geometry.
+       (gtk_file_chooser_default_get_default_size): Load the geometry
+       from the settings.  If it was already saved, return that instead
+       of computing an ad-hoc size.
+
 2009-01-13  Matthias Clasen  <mclasen@redhat.com>
 
        Bug 450716 – New API to change global IM
index 9b5c5977495e948522777a503ce24cacd8b42243..e9ee8e1fdd35082ff82a56104a500bc24d7f7aa7 100644 (file)
@@ -34,6 +34,7 @@
 #include "gtkexpander.h"
 #include "gtkfilechooserprivate.h"
 #include "gtkfilechooserdefault.h"
+#include "gtkfilechooserdialog.h"
 #include "gtkfilechooserembed.h"
 #include "gtkfilechooserentry.h"
 #include "gtkfilechoosersettings.h"
@@ -6024,6 +6025,31 @@ settings_load (GtkFileChooserDefault *impl)
     gtk_tree_view_column_set_visible (impl->list_size_column, show_size_column);
 }
 
+static void
+save_dialog_geometry (GtkFileChooserDefault *impl, GtkFileChooserSettings *settings)
+{
+  GtkWindow *toplevel;
+  int x, y, width, height;
+
+  /* We don't save the geometry in non-expanded "save" mode, so that the "little
+   * dialog" won't make future Open dialogs too small.
+   */
+  if (!(impl->action == GTK_FILE_CHOOSER_ACTION_OPEN
+       || impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER
+       || impl->expand_folders))
+    return;
+
+  toplevel = get_toplevel (GTK_WIDGET (impl));
+
+  if (!(toplevel && GTK_IS_FILE_CHOOSER_DIALOG (toplevel)))
+    return;
+
+  gtk_window_get_position (toplevel, &x, &y);
+  gtk_window_get_size (toplevel, &width, &height);
+
+  _gtk_file_chooser_settings_set_geometry (settings, x, y, width, height);
+}
+
 static void
 settings_save (GtkFileChooserDefault *impl)
 {
@@ -6036,6 +6062,8 @@ settings_save (GtkFileChooserDefault *impl)
   _gtk_file_chooser_settings_set_expand_folders (settings, impl->expand_folders);
   _gtk_file_chooser_settings_set_show_size_column (settings, impl->show_size_column);
 
+  save_dialog_geometry (impl, settings);
+
   /* NULL GError */
   _gtk_file_chooser_settings_save (settings, NULL);
 
@@ -7938,6 +7966,20 @@ gtk_file_chooser_default_get_default_size (GtkFileChooserEmbed *chooser_embed,
       || impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER
       || impl->expand_folders)
     {
+      GtkFileChooserSettings *settings;
+      int x, y, width, height;
+
+      settings = _gtk_file_chooser_settings_new ();
+      _gtk_file_chooser_settings_get_geometry (settings, &x, &y, &width, &height);
+      g_object_unref (settings);
+
+      if (x >= 0 && y >= 0 && width > 0 && height > 0)
+       {
+         *default_width = width;
+         *default_height = height;
+         return;
+       }
+
       find_good_size_from_style (GTK_WIDGET (chooser_embed), default_width, default_height);
 
       if (impl->preview_widget_active &&