gsettings: add g_settings_schema_list_children
authorLars Uebernickel <lars.uebernickel@canonical.com>
Mon, 26 Jan 2015 10:13:26 +0000 (10:13 +0000)
committerLars Uebernickel <lars.uebernickel@canonical.com>
Wed, 28 Jan 2015 18:09:28 +0000 (18:09 +0000)
https://bugzilla.gnome.org/show_bug.cgi?id=743517

docs/reference/gio/gio-sections.txt
gio/gsettings.c
gio/gsettingsschema.c
gio/gsettingsschema.h

index f9b690c..9c4e36d 100644 (file)
@@ -2439,6 +2439,7 @@ g_settings_schema_has_key
 g_settings_schema_get_key
 g_settings_schema_key_ref
 g_settings_schema_key_unref
+g_settings_schema_list_children
 
 <SUBSECTION>
 g_settings_schema_key_get_value_type
index 825d97a..1a5fd22 100644 (file)
@@ -2325,29 +2325,7 @@ g_settings_list_keys (GSettings *settings)
 gchar **
 g_settings_list_children (GSettings *settings)
 {
-  const GQuark *keys;
-  gchar **strv;
-  gint n_keys;
-  gint i, j;
-
-  keys = g_settings_schema_list (settings->priv->schema, &n_keys);
-  strv = g_new (gchar *, n_keys + 1);
-  for (i = j = 0; i < n_keys; i++)
-    {
-      const gchar *key = g_quark_to_string (keys[i]);
-
-      if (g_str_has_suffix (key, "/"))
-        {
-          gint length = strlen (key);
-
-          strv[j] = g_memdup (key, length);
-          strv[j][length - 1] = '\0';
-          j++;
-        }
-    }
-  strv[j] = NULL;
-
-  return strv;
+  return g_settings_schema_list_children (settings->priv->schema);
 }
 
 /**
index b3e0c8d..f515924 100644 (file)
@@ -1004,6 +1004,47 @@ g_settings_schema_has_key (GSettingsSchema *schema,
   return gvdb_table_has_value (schema->table, key);
 }
 
+/**
+ * g_settings_schema_list_children:
+ * @schema: a #GSettingsSchema
+ *
+ * Gets the list of children in @schema.
+ *
+ * You should free the return value with g_strfreev() when you are done
+ * with it.
+ *
+ * Returns: (transfer full) (element-type utf8): a list of the children on @settings
+ *
+ * Since: 2.44
+ */
+gchar **
+g_settings_schema_list_children (GSettingsSchema *schema)
+{
+  const GQuark *keys;
+  gchar **strv;
+  gint n_keys;
+  gint i, j;
+
+  keys = g_settings_schema_list (schema, &n_keys);
+  strv = g_new (gchar *, n_keys + 1);
+  for (i = j = 0; i < n_keys; i++)
+    {
+      const gchar *key = g_quark_to_string (keys[i]);
+
+      if (g_str_has_suffix (key, "/"))
+        {
+          gint length = strlen (key);
+
+          strv[j] = g_memdup (key, length);
+          strv[j][length - 1] = '\0';
+          j++;
+        }
+    }
+  strv[j] = NULL;
+
+  return strv;
+}
+
 const GQuark *
 g_settings_schema_list (GSettingsSchema *schema,
                         gint            *n_items)
index cd7cfe4..d16d78a 100644 (file)
@@ -75,6 +75,9 @@ GLIB_AVAILABLE_IN_2_40
 gboolean                g_settings_schema_has_key                       (GSettingsSchema        *schema,
                                                                          const gchar            *name);
 
+GLIB_AVAILABLE_IN_2_44
+gchar **                g_settings_schema_list_children                 (GSettingsSchema        *schema);
+
 #define                 G_TYPE_SETTINGS_SCHEMA_KEY                      (g_settings_schema_key_get_type ())
 GLIB_AVAILABLE_IN_2_40
 GType                   g_settings_schema_key_get_type                  (void) G_GNUC_CONST;