Load/save the file chooser's size

* 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
This commit is contained in:
Federico Mena Quintero 2009-01-14 20:19:10 +00:00 committed by Federico Mena Quintero
parent d133ab3ac0
commit d00b5cd3ee
2 changed files with 48 additions and 0 deletions

View File

@ -36,6 +36,12 @@
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

View 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 &&