diff options
author | Dan Winship <danw@gnome.org> | 2009-06-17 20:02:35 -0400 |
---|---|---|
committer | Dan Winship <danw@gnome.org> | 2009-06-23 14:15:32 -0400 |
commit | 7baf4c6b33a6dd0697a8bdb81bd86c72d58ebdc6 (patch) | |
tree | 67ca650de009e069b75b2556b0e520d6db696547 | |
parent | 1693e30e5074fc2bdcb3600a052c66f2eb4cbe92 (diff) | |
download | gconf-7baf4c6b33a6dd0697a8bdb81bd86c72d58ebdc6.tar.gz |
Allow overriding the default config via $GCONF_DEFAULT_SOURCE_PATH
This can point to a file to be used instead of
${sysconfdir}/gconf/2/path to determine the config sources used by
gconf_engine_get_default()/gconf_client_get_default(). In particular,
this will allow jhbuild to set up an environment in which jhbuilt
applications can see their own schemas, rather than only seeing the
schemas of system packages.
http://bugzilla.gnome.org/show_bug.cgi?id=586183
-rw-r--r-- | gconf/gconf.c | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/gconf/gconf.c b/gconf/gconf.c index b39c33fc..964d0968 100644 --- a/gconf/gconf.c +++ b/gconf/gconf.c @@ -122,9 +122,8 @@ struct _GConfEngine { local engines don't do notification! */ GConfSources* local_sources; - /* A list of addresses that make up this db - * if this is not the default engine; - * NULL if it's the default + /* A list of addresses that make up this db; + * NULL if it uses the default db */ GSList *addresses; @@ -137,8 +136,6 @@ struct _GConfEngine { gpointer owner; int owner_use_count; - - guint is_default : 1; /* If TRUE, this is a local engine (and therefore * has no ctable and no notifications) @@ -247,7 +244,6 @@ gconf_engine_blank (gboolean remote) conf->ctable = ctable_new(); conf->local_sources = NULL; conf->is_local = FALSE; - conf->is_default = TRUE; } else { @@ -255,7 +251,6 @@ gconf_engine_blank (gboolean remote) conf->ctable = NULL; conf->local_sources = NULL; conf->is_local = TRUE; - conf->is_default = FALSE; } return conf; @@ -366,7 +361,7 @@ gconf_engine_connect (GConfEngine *conf, if (cs == CORBA_OBJECT_NIL) return FALSE; /* Error should already be set */ - if (conf->is_default) + if (conf->addresses == NULL) { db = ConfigServer_get_default_database (cs, &ev); } @@ -556,6 +551,8 @@ GConfEngine* gconf_engine_get_default (void) { GConfEngine* conf = NULL; + const gchar* source_path; + GError* err = NULL; if (default_engine) conf = default_engine; @@ -564,10 +561,22 @@ gconf_engine_get_default (void) { conf = gconf_engine_blank(TRUE); - conf->is_default = TRUE; - default_engine = conf; - + + source_path = g_getenv ("GCONF_DEFAULT_SOURCE_PATH"); + if (source_path != NULL) + { + conf->addresses = gconf_load_source_path (source_path, &err); + if (err) + { + g_warning ("Could not parse GCONF_DEFAULT_SOURCE_PATH: %s", + err->message); + g_error_free (err); + } + } + else + conf->addresses = NULL; + /* Ignore errors, we never return a NULL default database, and * since we aren't starting if it isn't found, we'll probably * get errors half the time anyway. @@ -595,7 +604,6 @@ gconf_engine_get_for_address (const char *address, { conf = gconf_engine_blank (TRUE); - conf->is_default = FALSE; conf->addresses = addresses; if (!gconf_engine_connect (conf, TRUE, err)) @@ -629,7 +637,6 @@ gconf_engine_get_for_addresses (GSList *addresses, GError** err) conf = gconf_engine_blank (TRUE); - conf->is_default = FALSE; conf->addresses = NULL; tmp = addresses; |