diff --git a/gio/gio.symbols b/gio/gio.symbols index f93b779e3..46af24689 100644 --- a/gio/gio.symbols +++ b/gio/gio.symbols @@ -1441,6 +1441,10 @@ g_keyfile_settings_backend_new #endif #if IN_HEADER(__G_SETTINGS_H__) +#if IN_FILE(__G_SETTINGS_SCHEMA_C__) +g_settings_schema_exists +#endif + #if IN_FILE(__G_SETTINGS_C__) g_settings_apply g_settings_bind diff --git a/gio/gsettings.h b/gio/gsettings.h index f98ecc6d0..9815364c9 100644 --- a/gio/gsettings.h +++ b/gio/gsettings.h @@ -70,6 +70,7 @@ struct _GSettings GType g_settings_get_type (void); +gboolean g_settings_schema_exists (const gchar *schema_name); GSettings * g_settings_new (const gchar *schema); GSettings * g_settings_new_with_path (const gchar *schema, const gchar *path); diff --git a/gio/gsettingsschema.c b/gio/gsettingsschema.c index 275e427e9..67d11644d 100644 --- a/gio/gsettingsschema.c +++ b/gio/gsettingsschema.c @@ -237,3 +237,28 @@ g_settings_schema_list (GSettingsSchema *schema, *n_items = schema->priv->n_items; return schema->priv->items; } + +/** + * g_settings_schema_exists: + * @schema_name: the schema name to query for + * Returns: %TRUE if @schema_name exists + * + * Checks if the named schema is installed. + **/ +gboolean +g_settings_schema_exists (const gchar *schema_name) +{ + GSList *source; + + initialise_schema_sources (); + + for (source = schema_sources; source; source = source->next) + { + GvdbTable *file = source->data; + + if (gvdb_table_get_table (file, schema_name)) + return TRUE; + } + + return FALSE; +}