summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Persch <chpe@gnome.org>2010-09-28 22:56:02 +0200
committerChristian Persch <chpe@gnome.org>2010-10-13 14:31:07 +0200
commit803233cc14c02535a78b0000097d812ff42f7e6e (patch)
treef35f8f96ab81212b199403f2ad8026e81386998c
parenta2e88f9b808b48f8d7476938bc4dcc76cc77f7ff (diff)
downloadgtk+-803233cc14c02535a78b0000097d812ff42f7e6e.tar.gz
Use GSettings for the filechooser settings
Bug #630850.
-rw-r--r--configure.ac6
-rw-r--r--gtk/Makefile.am6
-rw-r--r--gtk/gtkfilechooserdefault.c77
-rw-r--r--gtk/gtkfilechooserdialog.c1
-rw-r--r--gtk/gtkfilechooserprivate.h2
-rw-r--r--gtk/gtkfilechoosersettings.c504
-rw-r--r--gtk/gtkfilechoosersettings.h118
-rw-r--r--gtk/org.gtk.Settings.FileChooser.gschema.xml64
8 files changed, 123 insertions, 655 deletions
diff --git a/configure.ac b/configure.ac
index 139040b1d3..36a9de4b8f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1477,6 +1477,12 @@ if test -n "$export_dynamic"; then
GTK_DEP_LIBS=`echo $GTK_DEP_LIBS | sed -e "s/$export_dynamic//"`
fi
+#############
+# GSettings #
+#############
+
+GLIB_GSETTINGS
+
##################################################
# GObject introspection
##################################################
diff --git a/gtk/Makefile.am b/gtk/Makefile.am
index 29df0c90e7..848d20ff89 100644
--- a/gtk/Makefile.am
+++ b/gtk/Makefile.am
@@ -362,7 +362,6 @@ gtk_private_h_sources = \
gtkfilechooserembed.h \
gtkfilechooserentry.h \
gtkfilechooserprivate.h \
- gtkfilechoosersettings.h \
gtkfilechooserutils.h \
gtkfilesystem.h \
gtkfilesystemmodel.h \
@@ -463,7 +462,6 @@ gtk_base_c_sources = \
gtkfilechooserdialog.c \
gtkfilechooserembed.c \
gtkfilechooserentry.c \
- gtkfilechoosersettings.c \
gtkfilechooserutils.c \
gtkfilechooserwidget.c \
gtkfilefilter.c \
@@ -1308,6 +1306,10 @@ EXTRA_DIST += \
gtktypebuiltins.c.template \
gtktypebuiltins.h.template
+gsettings_SCHEMAS = \
+ org.gtk.Settings.FileChooser.gschema.xml
+
+@GSETTINGS_RULES@
install-data-local:
diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c
index 7a47699cdb..24c42f3f0e 100644
--- a/gtk/gtkfilechooserdefault.c
+++ b/gtk/gtkfilechooserdefault.c
@@ -38,7 +38,6 @@
#include "gtkfilechooserdialog.h"
#include "gtkfilechooserembed.h"
#include "gtkfilechooserentry.h"
-#include "gtkfilechoosersettings.h"
#include "gtkfilechooserutils.h"
#include "gtkfilechooser.h"
#include "gtkfilesystem.h"
@@ -250,6 +249,15 @@ typedef enum {
#define NUM_LINES 45
#define NUM_CHARS 60
+#define SETTINGS_KEY_LOCATION_MODE "location-mode"
+#define SETTINGS_KEY_SHOW_HIDDEN "show-hidden"
+#define SETTINGS_KEY_EXPAND_FOLDERS "expand-folders"
+#define SETTINGS_KEY_SHOW_SIZE_COLUMN "show-size-column"
+#define SETTINGS_KEY_SORT_COLUMN "sort-column"
+#define SETTINGS_KEY_SORT_ORDER "sort-order"
+#define SETTINGS_KEY_WINDOW_POSITION "window-position"
+#define SETTINGS_KEY_WINDOW_SIZE "window-size"
+
static void gtk_file_chooser_default_iface_init (GtkFileChooserIface *iface);
static void gtk_file_chooser_embed_default_iface_init (GtkFileChooserEmbedIface *iface);
@@ -5739,9 +5747,19 @@ set_sort_column (GtkFileChooserDefault *impl)
}
static void
+settings_ensure (GtkFileChooserDefault *impl)
+{
+ if (impl->settings != NULL)
+ return;
+
+ impl->settings = g_settings_new_with_path ("org.gtk.Settings.FileChooser",
+ "/org/gtk/settings/file-chooser/");
+ g_settings_delay (impl->settings);
+}
+
+static void
settings_load (GtkFileChooserDefault *impl)
{
- GtkFileChooserSettings *settings;
LocationMode location_mode;
gboolean show_hidden;
gboolean expand_folders;
@@ -5749,16 +5767,14 @@ settings_load (GtkFileChooserDefault *impl)
gint sort_column;
GtkSortType sort_order;
- settings = _gtk_file_chooser_settings_new ();
-
- location_mode = _gtk_file_chooser_settings_get_location_mode (settings);
- show_hidden = _gtk_file_chooser_settings_get_show_hidden (settings);
- expand_folders = _gtk_file_chooser_settings_get_expand_folders (settings);
- show_size_column = _gtk_file_chooser_settings_get_show_size_column (settings);
- sort_column = _gtk_file_chooser_settings_get_sort_column (settings);
- sort_order = _gtk_file_chooser_settings_get_sort_order (settings);
+ settings_ensure (impl);
- g_object_unref (settings);
+ expand_folders = g_settings_get_boolean (impl->settings, SETTINGS_KEY_EXPAND_FOLDERS);
+ location_mode = g_settings_get_enum (impl->settings, SETTINGS_KEY_LOCATION_MODE);
+ show_hidden = g_settings_get_boolean (impl->settings, SETTINGS_KEY_SHOW_HIDDEN);
+ show_size_column = g_settings_get_boolean (impl->settings, SETTINGS_KEY_SHOW_SIZE_COLUMN);
+ sort_column = g_settings_get_enum (impl->settings, SETTINGS_KEY_SORT_COLUMN);
+ sort_order = g_settings_get_enum (impl->settings, SETTINGS_KEY_SORT_ORDER);
location_mode_set (impl, location_mode, TRUE);
@@ -5780,7 +5796,7 @@ settings_load (GtkFileChooserDefault *impl)
}
static void
-save_dialog_geometry (GtkFileChooserDefault *impl, GtkFileChooserSettings *settings)
+save_dialog_geometry (GtkFileChooserDefault *impl)
{
GtkWindow *toplevel;
int x, y, width, height;
@@ -5801,29 +5817,30 @@ save_dialog_geometry (GtkFileChooserDefault *impl, GtkFileChooserSettings *setti
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);
+ g_settings_set (impl->settings, "window-position", "(ii)", x, y);
+ g_settings_set (impl->settings, "window-size", "(ii)", width, height);
}
static void
settings_save (GtkFileChooserDefault *impl)
{
- GtkFileChooserSettings *settings;
+ settings_ensure (impl);
- settings = _gtk_file_chooser_settings_new ();
+ g_settings_set_enum (impl->settings, SETTINGS_KEY_LOCATION_MODE, impl->location_mode);
+ g_settings_set_boolean (impl->settings, SETTINGS_KEY_EXPAND_FOLDERS, impl->expand_folders);
+ g_settings_set_boolean (impl->settings, SETTINGS_KEY_SHOW_HIDDEN,
+ gtk_file_chooser_get_show_hidden (GTK_FILE_CHOOSER (impl)));
+ g_settings_set_boolean (impl->settings, SETTINGS_KEY_SHOW_SIZE_COLUMN, impl->show_size_column);
+ g_settings_set_enum (impl->settings, SETTINGS_KEY_SORT_COLUMN, impl->sort_column);
+ g_settings_set_enum (impl->settings, SETTINGS_KEY_SORT_ORDER, impl->sort_order);
- _gtk_file_chooser_settings_set_location_mode (settings, impl->location_mode);
- _gtk_file_chooser_settings_set_show_hidden (settings, gtk_file_chooser_get_show_hidden (GTK_FILE_CHOOSER (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);
- _gtk_file_chooser_settings_set_sort_column (settings, impl->sort_column);
- _gtk_file_chooser_settings_set_sort_order (settings, impl->sort_order);
+ save_dialog_geometry (impl);
- save_dialog_geometry (impl, settings);
+ /* Now apply the settings */
+ g_settings_apply (impl->settings);
- /* NULL GError */
- _gtk_file_chooser_settings_save (settings, NULL);
-
- g_object_unref (settings);
+ g_object_unref (impl->settings);
+ impl->settings = NULL;
}
/* GtkWidget::realize method */
@@ -7853,12 +7870,12 @@ 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);
+ settings_ensure (impl);
+
+ g_settings_get (impl->settings, SETTINGS_KEY_WINDOW_POSITION, "(ii)", &x, &y);
+ g_settings_get (impl->settings, SETTINGS_KEY_WINDOW_SIZE, "(ii)", &width, &height);
if (x >= 0 && y >= 0 && width > 0 && height > 0)
{
diff --git a/gtk/gtkfilechooserdialog.c b/gtk/gtkfilechooserdialog.c
index 9408fa452f..dd8a9a8aaa 100644
--- a/gtk/gtkfilechooserdialog.c
+++ b/gtk/gtkfilechooserdialog.c
@@ -27,7 +27,6 @@
#include "gtkfilechooserwidget.h"
#include "gtkfilechooserutils.h"
#include "gtkfilechooserembed.h"
-#include "gtkfilechoosersettings.h"
#include "gtkfilesystem.h"
#include "gtksizerequest.h"
#include "gtktypebuiltins.h"
diff --git a/gtk/gtkfilechooserprivate.h b/gtk/gtkfilechooserprivate.h
index a3ccaae89c..7fc8ec7f06 100644
--- a/gtk/gtkfilechooserprivate.h
+++ b/gtk/gtkfilechooserprivate.h
@@ -278,6 +278,8 @@ struct _GtkFileChooserDefault
gint sort_column;
GtkSortType sort_order;
+ GSettings *settings;
+
#if 0
GdkDragContext *shortcuts_drag_context;
GSource *shortcuts_drag_outside_idle;
diff --git a/gtk/gtkfilechoosersettings.c b/gtk/gtkfilechoosersettings.c
deleted file mode 100644
index 1c92eeafae..0000000000
--- a/gtk/gtkfilechoosersettings.c
+++ /dev/null
@@ -1,504 +0,0 @@
-/* GTK - The GIMP Toolkit
- * gtkfilechoosersettings.c: Internal settings for the GtkFileChooser widget
- * Copyright (C) 2006, Novell, Inc.
- *
- * Authors: Federico Mena-Quintero <federico@novell.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/* TODO:
- *
- * - Persist these:
- * - hpaned position
- * - browse_for_other_folders?
- *
- * - Do we want lockdown?
- */
-
-#include "config.h"
-#include <errno.h>
-#include <string.h>
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include "gtkfilechoosersettings.h"
-
-#define SETTINGS_GROUP "Filechooser Settings"
-#define LOCATION_MODE_KEY "LocationMode"
-#define SHOW_HIDDEN_KEY "ShowHidden"
-#define EXPAND_FOLDERS_KEY "ExpandFolders"
-#define SHOW_SIZE_COLUMN_KEY "ShowSizeColumn"
-#define GEOMETRY_X_KEY "GeometryX"
-#define GEOMETRY_Y_KEY "GeometryY"
-#define GEOMETRY_WIDTH_KEY "GeometryWidth"
-#define GEOMETRY_HEIGHT_KEY "GeometryHeight"
-#define SORT_COLUMN_KEY "SortColumn"
-#define SORT_ORDER_KEY "SortOrder"
-
-#define COLUMN_NAME_STRING "name"
-#define COLUMN_MTIME_STRING "modified"
-#define COLUMN_SIZE_STRING "size"
-#define SORT_ASCENDING_STRING "ascending"
-#define SORT_DESCENDING_STRING "descending"
-
-#define MODE_PATH_BAR "path-bar"
-#define MODE_FILENAME_ENTRY "filename-entry"
-
-#define EQ(a, b) (g_ascii_strcasecmp ((a), (b)) == 0)
-
-static char *
-get_config_dirname (void)
-{
- return g_build_filename (g_get_user_config_dir (), "gtk-2.0", NULL);
-}
-
-static char *
-get_config_filename (void)
-{
- return g_build_filename (g_get_user_config_dir (), "gtk-2.0", "gtkfilechooser.ini", NULL);
-}
-
-static void
-warn_if_invalid_key_and_clear_error (const gchar *key,
- GError **error)
-{
- if (error && *error)
- {
- if ((*error)->domain == G_KEY_FILE_ERROR &&
- (*error)->code != G_KEY_FILE_ERROR_KEY_NOT_FOUND)
- g_warning ("Failed to read '%s' setting in filechooser settings: %s",
- key,
- (*error)->message);
-
- g_clear_error (error);
- }
-}
-
-static void
-get_int_key (GKeyFile *key_file, const char *group, const char *key, int *out_value)
-{
- GError *error;
- int val;
-
- error = NULL;
- val = g_key_file_get_integer (key_file, group, key, &error);
-
- if (val == 0 && error != NULL)
- {
- *out_value = -1;
- g_error_free (error);
- }
- else
- *out_value = val;
-}
-
-static void
-ensure_settings_read (GtkFileChooserSettings *settings)
-{
- GError *error;
- GKeyFile *key_file;
- gchar *location_mode_str, *filename;
- gchar *sort_column, *sort_order;
- gboolean value;
-
- if (settings->settings_read)
- return;
-
- key_file = g_key_file_new ();
-
- filename = get_config_filename ();
-
- error = NULL;
- if (!g_key_file_load_from_file (key_file, filename, 0, &error))
- {
- /* Don't warn on non-existent file */
- if (error->domain != G_FILE_ERROR ||
- error->code != G_FILE_ERROR_NOENT)
- g_warning ("Failed to read filechooser settings from \"%s\": %s",
- filename, error->message);
-
- g_error_free (error);
- goto out;
- }
-
- if (!g_key_file_has_group (key_file, SETTINGS_GROUP))
- goto out;
-
- /* Location mode */
-
- location_mode_str = g_key_file_get_string (key_file, SETTINGS_GROUP,
- LOCATION_MODE_KEY, NULL);
- if (location_mode_str)
- {
- if (EQ (location_mode_str, MODE_PATH_BAR))
- settings->location_mode = LOCATION_MODE_PATH_BAR;
- else if (EQ (location_mode_str, MODE_FILENAME_ENTRY))
- settings->location_mode = LOCATION_MODE_FILENAME_ENTRY;
- else
- g_warning ("Unknown location mode '%s' encountered in filechooser settings",
- location_mode_str);
-
- g_free (location_mode_str);
- }
-
- /* Show hidden */
-
- value = g_key_file_get_boolean (key_file, SETTINGS_GROUP,
- SHOW_HIDDEN_KEY, &error);
- if (error)
- warn_if_invalid_key_and_clear_error (SHOW_HIDDEN_KEY, &error);
- else
- settings->show_hidden = value != FALSE;
-
- /* Expand folders */
-
- value = g_key_file_get_boolean (key_file, SETTINGS_GROUP,
- EXPAND_FOLDERS_KEY, &error);
- if (error)
- warn_if_invalid_key_and_clear_error (EXPAND_FOLDERS_KEY, &error);
- else
- settings->expand_folders = value != FALSE;
-
- /* Show size column */
-
- value = g_key_file_get_boolean (key_file, SETTINGS_GROUP,
- SHOW_SIZE_COLUMN_KEY, &error);
- if (error)
- warn_if_invalid_key_and_clear_error (SHOW_SIZE_COLUMN_KEY, &error);
- else
- settings->show_size_column = value != FALSE;
-
- /* Geometry */
-
- get_int_key (key_file, SETTINGS_GROUP, GEOMETRY_X_KEY, &settings->geometry_x);
- get_int_key (key_file, SETTINGS_GROUP, GEOMETRY_Y_KEY, &settings->geometry_y);
- get_int_key (key_file, SETTINGS_GROUP, GEOMETRY_WIDTH_KEY, &settings->geometry_width);
- get_int_key (key_file, SETTINGS_GROUP, GEOMETRY_HEIGHT_KEY, &settings->geometry_height);
-
- /* Sort column */
-
- sort_column = g_key_file_get_string (key_file, SETTINGS_GROUP,
- SORT_COLUMN_KEY, NULL);
- if (sort_column)
- {
- if (EQ (COLUMN_NAME_STRING, sort_column))
- settings->sort_column = FILE_LIST_COL_NAME;
- else if (EQ (COLUMN_MTIME_STRING, sort_column))
- settings->sort_column = FILE_LIST_COL_MTIME;
- else if (EQ (COLUMN_SIZE_STRING, sort_column))
- settings->sort_column = FILE_LIST_COL_SIZE;
- else
- g_warning ("Unknown sort column name '%s' encountered in filechooser settings",
- sort_column);
-
- g_free (sort_column);
- }
-
- /* Sort order */
-
- sort_order = g_key_file_get_string (key_file, SETTINGS_GROUP,
- SORT_ORDER_KEY, NULL);
- if (sort_order)
- {
- if (EQ (SORT_ASCENDING_STRING, sort_order))
- settings->sort_order = GTK_SORT_ASCENDING;
- else if (EQ (SORT_DESCENDING_STRING, sort_order))
- settings->sort_order = GTK_SORT_DESCENDING;
- else
- g_warning ("Unknown sort column order '%s' encountered in filechooser settings",
- sort_order);
-
- g_free (sort_order);
- }
-
- out:
-
- g_key_file_free (key_file);
- g_free (filename);
-
- settings->settings_read = TRUE;
-}
-
-G_DEFINE_TYPE (GtkFileChooserSettings, _gtk_file_chooser_settings, G_TYPE_OBJECT)
-
-static void
-_gtk_file_chooser_settings_class_init (GtkFileChooserSettingsClass *class)
-{
-}
-
-static void
-_gtk_file_chooser_settings_init (GtkFileChooserSettings *settings)
-{
- settings->location_mode = LOCATION_MODE_PATH_BAR;
- settings->sort_order = GTK_SORT_ASCENDING;
- settings->sort_column = FILE_LIST_COL_NAME;
- settings->show_hidden = FALSE;
- settings->expand_folders = FALSE;
- settings->show_size_column = TRUE;
- settings->geometry_x = -1;
- settings->geometry_y = -1;
- settings->geometry_width = -1;
- settings->geometry_height = -1;
-}
-
-GtkFileChooserSettings *
-_gtk_file_chooser_settings_new (void)
-{
- return g_object_new (GTK_FILE_CHOOSER_SETTINGS_TYPE, NULL);
-}
-
-LocationMode
-_gtk_file_chooser_settings_get_location_mode (GtkFileChooserSettings *settings)
-{
- ensure_settings_read (settings);
- return settings->location_mode;
-}
-
-void
-_gtk_file_chooser_settings_set_location_mode (GtkFileChooserSettings *settings,
- LocationMode location_mode)
-{
- settings->location_mode = location_mode;
-}
-
-gboolean
-_gtk_file_chooser_settings_get_show_hidden (GtkFileChooserSettings *settings)
-{
- ensure_settings_read (settings);
- return settings->show_hidden;
-}
-
-void
-_gtk_file_chooser_settings_set_show_hidden (GtkFileChooserSettings *settings,
- gboolean show_hidden)
-{
- settings->show_hidden = show_hidden != FALSE;
-}
-
-gboolean
-_gtk_file_chooser_settings_get_expand_folders (GtkFileChooserSettings *settings)
-{
- ensure_settings_read (settings);
- return settings->expand_folders;
-}
-
-void
-_gtk_file_chooser_settings_set_show_size_column (GtkFileChooserSettings *settings,
- gboolean show_column)
-{
- settings->show_size_column = show_column != FALSE;
-}
-
-gboolean
-_gtk_file_chooser_settings_get_show_size_column (GtkFileChooserSettings *settings)
-{
- ensure_settings_read (settings);
- return settings->show_size_column;
-}
-
-void
-_gtk_file_chooser_settings_set_expand_folders (GtkFileChooserSettings *settings,
- gboolean expand_folders)
-{
- settings->expand_folders = expand_folders != FALSE;
-}
-
-void
-_gtk_file_chooser_settings_get_geometry (GtkFileChooserSettings *settings,
- int *out_x,
- int *out_y,
- int *out_width,
- int *out_height)
-{
- ensure_settings_read (settings);
-
- *out_x = settings->geometry_x;
- *out_y = settings->geometry_y;
- *out_width = settings->geometry_width;
- *out_height = settings->geometry_height;
-}
-
-void
-_gtk_file_chooser_settings_set_geometry (GtkFileChooserSettings *settings,
- int x,
- int y,
- int width,
- int height)
-{
- settings->geometry_x = x;
- settings->geometry_y = y;
- settings->geometry_width = width;
- settings->geometry_height = height;
-}
-
-gint
-_gtk_file_chooser_settings_get_sort_column (GtkFileChooserSettings *settings)
-{
- ensure_settings_read (settings);
- return settings->sort_column;
-}
-
-void
-_gtk_file_chooser_settings_set_sort_column (GtkFileChooserSettings *settings,
- gint sort_column)
-{
- settings->sort_column = sort_column;
-}
-
-GtkSortType
-_gtk_file_chooser_settings_get_sort_order (GtkFileChooserSettings *settings)
-{
- ensure_settings_read (settings);
- return settings->sort_order;
-}
-
-void
-_gtk_file_chooser_settings_set_sort_order (GtkFileChooserSettings *settings,
- GtkSortType sort_order)
-{
- settings->sort_order = sort_order;
-}
-
-gboolean
-_gtk_file_chooser_settings_save (GtkFileChooserSettings *settings,
- GError **error)
-{
- const gchar *location_mode_str;
- gchar *filename;
- gchar *dirname;
- gchar *contents;
- gchar *sort_column;
- gchar *sort_order;
- gsize len;
- gboolean retval;
- GKeyFile *key_file;
-
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
- filename = get_config_filename ();
- dirname = NULL;
-
- retval = FALSE;
-
- if (settings->location_mode == LOCATION_MODE_PATH_BAR)
- location_mode_str = MODE_PATH_BAR;
- else if (settings->location_mode == LOCATION_MODE_FILENAME_ENTRY)
- location_mode_str = MODE_FILENAME_ENTRY;
- else
- {
- g_assert_not_reached ();
- return FALSE;
- }
-
- switch (settings->sort_column)
- {
- case FILE_LIST_COL_NAME:
- sort_column = COLUMN_NAME_STRING;
- break;
-
- case FILE_LIST_COL_MTIME:
- sort_column = COLUMN_MTIME_STRING;
- break;
-
- case FILE_LIST_COL_SIZE:
- sort_column = COLUMN_SIZE_STRING;
- break;
-
- default:
- g_assert_not_reached ();
- sort_column = NULL;
- }
-
- switch (settings->sort_order)
- {
- case GTK_SORT_ASCENDING:
- sort_order = SORT_ASCENDING_STRING;
- break;
-
- case GTK_SORT_DESCENDING:
- sort_order = SORT_DESCENDING_STRING;
- break;
-
- default:
- g_assert_not_reached ();
- sort_order = NULL;
- }
-
- key_file = g_key_file_new ();
-
- /* Initialise with the on-disk keyfile, so we keep unknown options */
- g_key_file_load_from_file (key_file, filename, 0, NULL);
-
- g_key_file_set_string (key_file, SETTINGS_GROUP,
- LOCATION_MODE_KEY, location_mode_str);
- g_key_file_set_boolean (key_file, SETTINGS_GROUP,
- SHOW_HIDDEN_KEY, settings->show_hidden);
- g_key_file_set_boolean (key_file, SETTINGS_GROUP,
- EXPAND_FOLDERS_KEY, settings->expand_folders);
- g_key_file_set_boolean (key_file, SETTINGS_GROUP,
- SHOW_SIZE_COLUMN_KEY, settings->show_size_column);
- g_key_file_set_integer (key_file, SETTINGS_GROUP,
- GEOMETRY_X_KEY, settings->geometry_x);
- g_key_file_set_integer (key_file, SETTINGS_GROUP,
- GEOMETRY_Y_KEY, settings->geometry_y);
- g_key_file_set_integer (key_file, SETTINGS_GROUP,
- GEOMETRY_WIDTH_KEY, settings->geometry_width);
- g_key_file_set_integer (key_file, SETTINGS_GROUP,
- GEOMETRY_HEIGHT_KEY, settings->geometry_height);
- g_key_file_set_string (key_file, SETTINGS_GROUP,
- SORT_COLUMN_KEY, sort_column);
- g_key_file_set_string (key_file, SETTINGS_GROUP,
- SORT_ORDER_KEY, sort_order);
-
- contents = g_key_file_to_data (key_file, &len, error);
- g_key_file_free (key_file);
-
- if (!contents)
- goto out;
-
- if (!g_file_set_contents (filename, contents, len, NULL))
- {
- char *dirname;
- int saved_errno;
-
- /* Directory is not there? */
-
- dirname = get_config_dirname ();
- if (g_mkdir_with_parents (dirname, 0700) != 0) /* 0700 per the XDG basedir spec */
- {
- saved_errno = errno;
- g_set_error (error,
- G_FILE_ERROR,
- g_file_error_from_errno (saved_errno),
- _("Error creating folder '%s': %s"),
- dirname, g_strerror (saved_errno));
- goto out;
- }
-
- if (!g_file_set_contents (filename, contents, len, error))
- goto out;
- }
-
- retval = TRUE;
-
- out:
-
- g_free (contents);
- g_free (dirname);
- g_free (filename);
-
- return retval;
-}
diff --git a/gtk/gtkfilechoosersettings.h b/gtk/gtkfilechoosersettings.h
deleted file mode 100644
index 5fd7ad2e5a..0000000000
--- a/gtk/gtkfilechoosersettings.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/* GTK - The GIMP Toolkit
- * gtkfilechoosersettings.h: Internal settings for the GtkFileChooser widget
- * Copyright (C) 2006, Novell, Inc.
- *
- * Authors: Federico Mena-Quintero <federico@novell.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GTK_FILE_CHOOSER_SETTINGS_H__
-#define __GTK_FILE_CHOOSER_SETTINGS_H__
-
-#include "gtkfilechooserprivate.h"
-
-G_BEGIN_DECLS
-
-#define GTK_FILE_CHOOSER_SETTINGS_TYPE (_gtk_file_chooser_settings_get_type ())
-
-/* Column numbers for the file list */
-enum {
- FILE_LIST_COL_NAME,
- FILE_LIST_COL_SIZE,
- FILE_LIST_COL_MTIME,
- FILE_LIST_COL_NUM_COLUMNS
-};
-
-typedef struct _GtkFileChooserSettings GtkFileChooserSettings;
-typedef struct _GtkFileChooserSettingsClass GtkFileChooserSettingsClass;
-
-struct _GtkFileChooserSettings
-{
- GObject object;
-
- LocationMode location_mode;
-
- GtkSortType sort_order;
- gint sort_column;
-
- int geometry_x;
- int geometry_y;
- int geometry_width;
- int geometry_height;
-
- guint settings_read : 1;
- guint show_hidden : 1;
- guint show_size_column : 1;
- guint expand_folders : 1;
-};
-
-struct _GtkFileChooserSettingsClass
-{
- GObjectClass parent_class;
-};
-
-GType _gtk_file_chooser_settings_get_type (void) G_GNUC_CONST;
-
-GtkFileChooserSettings *_gtk_file_chooser_settings_new (void);
-
-LocationMode _gtk_file_chooser_settings_get_location_mode (GtkFileChooserSettings *settings);
-void _gtk_file_chooser_settings_set_location_mode (GtkFileChooserSettings *settings,
- LocationMode location_mode);
-
-gboolean _gtk_file_chooser_settings_get_show_hidden (GtkFileChooserSettings *settings);
-void _gtk_file_chooser_settings_set_show_hidden (GtkFileChooserSettings *settings,
- gboolean show_hidden);
-
-gboolean _gtk_file_chooser_settings_get_expand_folders (GtkFileChooserSettings *settings);
-void _gtk_file_chooser_settings_set_expand_folders (GtkFileChooserSettings *settings,
- gboolean expand_folders);
-
-gboolean _gtk_file_chooser_settings_get_show_size_column (GtkFileChooserSettings *settings);
-void _gtk_file_chooser_settings_set_show_size_column (GtkFileChooserSettings *settings,
- gboolean show_column);
-
-gint _gtk_file_chooser_settings_get_sort_column (GtkFileChooserSettings *settings);
-void _gtk_file_chooser_settings_set_sort_column (GtkFileChooserSettings *settings,
- gint sort_column);
-
-GtkSortType _gtk_file_chooser_settings_get_sort_order (GtkFileChooserSettings *settings);
-void _gtk_file_chooser_settings_set_sort_order (GtkFileChooserSettings *settings,
- GtkSortType sort_order);
-
-void _gtk_file_chooser_settings_get_geometry (GtkFileChooserSettings *settings,
- int *out_x,
- int *out_y,
- int *out_width,
- int *out_heigth);
-void _gtk_file_chooser_settings_set_geometry (GtkFileChooserSettings *settings,
- int x,
- int y,
- int width,
- int heigth);
-
-gboolean _gtk_file_chooser_settings_save (GtkFileChooserSettings *settings,
- GError **error);
-
-/* FIXME: persist these options:
- *
- * - paned width
- * - show_hidden
- */
-
-G_END_DECLS
-
-#endif
diff --git a/gtk/org.gtk.Settings.FileChooser.gschema.xml b/gtk/org.gtk.Settings.FileChooser.gschema.xml
new file mode 100644
index 0000000000..296d6d3c12
--- /dev/null
+++ b/gtk/org.gtk.Settings.FileChooser.gschema.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright © 2010 Christian Persch
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+-->
+<schemalist>
+
+ <enum id='org.gtk.Settings.FileChooser.LocationMode'>
+ <value nick='path-bar' value='0'/>
+ <value nick='filename-entry' value='1'/>
+ </enum>
+
+ <enum id='org.gtk.Settings.FileChooser.SortColumn'>
+ <value nick='name' value='0'/>
+ <value nick='size' value='1'/>
+ <value nick='modified' value='2'/>
+ </enum>
+
+ <enum id='org.gtk.Settings.FileChooser.SortOrder'>
+ <value nick='ascending' value='0'/>
+ <value nick='descending' value='1'/>
+ </enum>
+
+ <schema id='org.gtk.Settings.FileChooser'>
+ <key name='location-mode' enum='org.gtk.Settings.FileChooser.LocationMode'>
+ <default>'path-bar'</default>
+ </key>
+ <key name='show-hidden' type='b'>
+ <default>false</default>
+ </key>
+ <key name='expand-folders' type='b'>
+ <default>false</default>
+ </key>
+ <key name='show-size-column' type='b'>
+ <default>true</default>
+ </key>
+ <key name='sort-column' enum='org.gtk.Settings.FileChooser.SortColumn'>
+ <default>'name'</default>
+ </key>
+ <key name='sort-order' enum='org.gtk.Settings.FileChooser.SortOrder'>
+ <default>'ascending'</default>
+ </key>
+ <key name='window-position' type='(ii)'>
+ <default>(-1, -1)</default>
+ </key>
+ <key name='window-size' type='(ii)'>
+ <default>(-1, -1)</default>
+ </key>
+ </schema>
+
+</schemalist>