[glib] gsettings: check $XDG_DATA_HOME for schemas



commit 151d3b01e68e80f110e561f9336efd609f5a191b
Author: Ryan Hendrickson <ryan hendrickson alum mit edu>
Date:   Fri May 19 15:44:14 2017 -0400

    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

 gio/gsettingsschema.c |   16 ++++++++++------
 gio/tests/gsettings.c |    1 +
 2 files changed, 11 insertions(+), 6 deletions(-)
---
diff --git a/gio/gsettingsschema.c b/gio/gsettingsschema.c
index 15941f7..84c6962 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 b1bbd4e..18db388 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)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]