summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Hendrickson <ryan.hendrickson@alum.mit.edu>2017-05-19 15:44:14 -0400
committerPhilip Withnall <withnall@endlessm.com>2017-05-22 09:18:25 +0100
commit151d3b01e68e80f110e561f9336efd609f5a191b (patch)
treeb518292c0cf26d5c41b303cba4bdd68280ca772b
parent3de1fac3925c9bce1e142c813a829521a5052a01 (diff)
downloadglib-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.c16
-rw-r--r--gio/tests/gsettings.c1
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)