diff options
author | Ryan Hendrickson <ryan.hendrickson@alum.mit.edu> | 2017-05-19 15:44:14 -0400 |
---|---|---|
committer | Philip Withnall <withnall@endlessm.com> | 2017-05-22 09:18:25 +0100 |
commit | 151d3b01e68e80f110e561f9336efd609f5a191b (patch) | |
tree | b518292c0cf26d5c41b303cba4bdd68280ca772b | |
parent | 3de1fac3925c9bce1e142c813a829521a5052a01 (diff) | |
download | glib-151d3b01e68e80f110e561f9336efd609f5a191b.tar.gz |
gsettings: check $XDG_DATA_HOME for schemas
Add $XDG_DATA_HOME/glib-2.0/schemas as a schema source, after (higher
priority than) $XDG_DATA_DIRS/glib-2.0/schemas but before
$GSETTINGS_SCHEMA_DIR. This is per the XDG Base Directory Specification,
which states that user specific versions of data in $XDG_DATA_DIRS can
be created in $XDG_DATA_HOME.
https://bugzilla.gnome.org/show_bug.cgi?id=741335
-rw-r--r-- | gio/gsettingsschema.c | 16 | ||||
-rw-r--r-- | gio/tests/gsettings.c | 1 |
2 files changed, 11 insertions, 6 deletions
diff --git a/gio/gsettingsschema.c b/gio/gsettingsschema.c index 15941f778..84c6962bc 100644 --- a/gio/gsettingsschema.c +++ b/gio/gsettingsschema.c @@ -322,6 +322,14 @@ try_prepend_dir (const gchar *directory) } static void +try_prepend_data_dir (const gchar *directory) +{ + const gchar *dirname = g_build_filename (directory, "glib-2.0", "schemas", NULL); + try_prepend_dir (dirname); + g_free (dirname); +} + +static void initialise_schema_sources (void) { static gsize initialised; @@ -340,13 +348,9 @@ initialise_schema_sources (void) for (i = 0; dirs[i]; i++); while (i--) - { - gchar *dirname; + try_prepend_data_dir (dirs[i]); - dirname = g_build_filename (dirs[i], "glib-2.0", "schemas", NULL); - try_prepend_dir (dirname); - g_free (dirname); - } + try_prepend_data_dir (g_get_user_data_dir ()); if ((path = g_getenv ("GSETTINGS_SCHEMA_DIR")) != NULL) try_prepend_dir (path); diff --git a/gio/tests/gsettings.c b/gio/tests/gsettings.c index b1bbd4ed1..18db38805 100644 --- a/gio/tests/gsettings.c +++ b/gio/tests/gsettings.c @@ -2613,6 +2613,7 @@ main (int argc, char *argv[]) backend_set = g_getenv ("GSETTINGS_BACKEND") != NULL; g_setenv ("XDG_DATA_DIRS", ".", TRUE); + g_setenv ("XDG_DATA_HOME", ".", TRUE); g_setenv ("GSETTINGS_SCHEMA_DIR", ".", TRUE); if (!backend_set) |