Add g_settings_schema_exists
authorRyan Lortie <desrt@desrt.ca>
Thu, 24 Jun 2010 05:49:27 +0000 (01:49 -0400)
committerRyan Lortie <desrt@desrt.ca>
Thu, 24 Jun 2010 06:17:28 +0000 (02:17 -0400)
Solves half of #622554.

gio/gio.symbols
gio/gsettings.h
gio/gsettingsschema.c

index f93b779..46af246 100644 (file)
@@ -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
index f98ecc6..9815364 100644 (file)
@@ -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);
index 275e427..67d1164 100644 (file)
@@ -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;
+}