[glib/wip/gsettings-work: 2/10] Clean up GSettingsSchema logic
- From: Ryan Lortie <desrt src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib/wip/gsettings-work: 2/10] Clean up GSettingsSchema logic
- Date: Sun, 27 Oct 2013 16:16:59 +0000 (UTC)
commit a057ecbe52902f838deccb3559292a94736be03a
Author: Ryan Lortie <desrt desrt ca>
Date: Sat Oct 26 18:49:58 2013 -0400
Clean up GSettingsSchema logic
The way we created the global schema list predates
g_settings_schema_source_new_from_directory() and therefore doesn't use
it.
Update it to use that function, removing some code.
gio/gsettingsschema.c | 55 +++++++++++++++++-------------------------------
1 files changed, 20 insertions(+), 35 deletions(-)
---
diff --git a/gio/gsettingsschema.c b/gio/gsettingsschema.c
index fe43b89..26b6d48 100644
--- a/gio/gsettingsschema.c
+++ b/gio/gsettingsschema.c
@@ -176,6 +176,7 @@ G_DEFINE_BOXED_TYPE (GSettingsSchema, g_settings_schema, g_settings_schema_ref,
struct _GSettingsSchemaSource
{
GSettingsSchemaSource *parent;
+ gchar *directory;
GvdbTable *table;
gint ref_count;
@@ -183,20 +184,6 @@ struct _GSettingsSchemaSource
static GSettingsSchemaSource *schema_sources;
-static void
-prepend_schema_table (GvdbTable *table)
-{
- GSettingsSchemaSource *source;
-
- /* we steal the reference from 'schema_sources' for our ->parent */
- source = g_slice_new (GSettingsSchemaSource);
- source->parent = schema_sources;
- source->table = table;
- source->ref_count = 1;
-
- schema_sources = source;
-}
-
/**
* g_settings_schema_source_ref:
* @source: a #GSettingsSchemaSource
@@ -234,6 +221,7 @@ g_settings_schema_source_unref (GSettingsSchemaSource *source)
if (source->parent)
g_settings_schema_source_unref (source->parent);
gvdb_table_unref (source->table);
+ g_free (source->directory);
g_slice_free (GSettingsSchemaSource, source);
}
@@ -297,6 +285,7 @@ g_settings_schema_source_new_from_directory (const gchar *directory,
return NULL;
source = g_slice_new (GSettingsSchemaSource);
+ source->directory = g_strdup (directory);
source->parent = parent ? g_settings_schema_source_ref (parent) : NULL;
source->table = table;
source->ref_count = 1;
@@ -305,6 +294,18 @@ g_settings_schema_source_new_from_directory (const gchar *directory,
}
static void
+try_prepend_dir (const gchar *directory)
+{
+ GSettingsSchemaSource *source;
+
+ source = g_settings_schema_source_new_from_directory (directory, schema_sources, TRUE, NULL);
+
+ /* If we successfully created it then prepend it to the global list */
+ if (source != NULL)
+ schema_sources = source;
+}
+
+static void
initialise_schema_sources (void)
{
static gsize initialised;
@@ -324,31 +325,15 @@ initialise_schema_sources (void)
while (i--)
{
- gchar *filename;
- GvdbTable *table;
-
- filename = g_build_filename (dirs[i], "glib-2.0", "schemas", "gschemas.compiled", NULL);
- table = gvdb_table_new (filename, TRUE, NULL);
+ gchar *dirname;
- if (table != NULL)
- prepend_schema_table (table);
-
- g_free (filename);
+ dirname = g_build_filename (dirs[i], "glib-2.0", "schemas", NULL);
+ try_prepend_dir (dirname);
+ g_free (dirname);
}
if ((path = g_getenv ("GSETTINGS_SCHEMA_DIR")) != NULL)
- {
- gchar *filename;
- GvdbTable *table;
-
- filename = g_build_filename (path, "gschemas.compiled", NULL);
- table = gvdb_table_new (filename, TRUE, NULL);
-
- if (table != NULL)
- prepend_schema_table (table);
-
- g_free (filename);
- }
+ try_prepend_dir (path);
g_once_init_leave (&initialised, TRUE);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]