GSettings: add 'settings-schema' property
authorRyan Lortie <desrt@desrt.ca>
Tue, 15 Nov 2011 12:16:50 +0000 (12:16 +0000)
committerRyan Lortie <desrt@desrt.ca>
Thu, 17 Nov 2011 14:03:39 +0000 (14:03 +0000)
Ideally we'd have called this 'schema', but it is already used.

gio/gsettings.c

index 39503580df6a3acde3f186ab78ec5db4eaed8855..f8be1b4752e587c4a0c891973166bb48a2b0eced 100644 (file)
@@ -238,6 +238,7 @@ struct _GSettingsPrivate
 enum
 {
   PROP_0,
+  PROP_SCHEMA,
   PROP_SCHEMA_ID,
   PROP_BACKEND,
   PROP_PATH,
@@ -426,6 +427,25 @@ g_settings_set_property (GObject      *object,
 
   switch (prop_id)
     {
+    case PROP_SCHEMA:
+      {
+        GSettingsSchema *schema;
+
+        schema = g_value_dup_boxed (value);
+
+        /* we receive a set_property() call for "settings-schema" even
+         * if it was not specified (ie: with NULL value).  ->schema
+         * could already be set at this point (ie: via "schema-id").
+         * check for NULL to avoid clobbering the existing value.
+         */
+        if (schema != NULL)
+          {
+            g_assert (settings->priv->schema == NULL);
+            settings->priv->schema = schema;
+          }
+      }
+      break;
+
     case PROP_SCHEMA_ID:
       {
         const gchar *schema_id;
@@ -477,6 +497,10 @@ g_settings_get_property (GObject    *object,
 
   switch (prop_id)
     {
+    case PROP_SCHEMA:
+      g_value_set_boxed (value, settings->priv->schema);
+      break;
+
      case PROP_SCHEMA_ID:
       g_value_set_string (value, g_settings_schema_get_id (settings->priv->schema));
       break;
@@ -699,13 +723,40 @@ g_settings_class_init (GSettingsClass *class)
                          G_TYPE_SETTINGS_BACKEND, G_PARAM_CONSTRUCT_ONLY |
                          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+  /**
+   * GSettings:settings-schema:
+   *
+   * The #GSettingsSchema describing the types of keys for this
+   * #GSettings object.
+   *
+   * Ideally, this property would be called 'schema'.  #GSettingsSchema
+   * has only existed since version 2.32, however, and before then the
+   * 'schema' property was used to refer to the ID of the schema rather
+   * than the schema itself.  Take care.
+   */
+  g_object_class_install_property (object_class, PROP_SCHEMA,
+    g_param_spec_boxed ("settings-schema",
+                        P_("schema"),
+                        P_("The GSettingsSchema for this settings object"),
+                        G_TYPE_SETTINGS_SCHEMA,
+                        G_PARAM_CONSTRUCT_ONLY |
+                        G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
   /**
    * GSettings:schema:
    *
    * The name of the schema that describes the types of keys
    * for this #GSettings object.
    *
-   * Deprecated:2.32:Use the 'schema-id' property instead.
+   * The type of this property is *not* #GSettingsSchema.
+   * #GSettingsSchema has only existed since version 2.32 and
+   * unfortunately this name was used in previous versions to refer to
+   * the schema ID rather than the schema itself.  Take care to use the
+   * 'settings-schema' property if you wish to pass in a
+   * #GSettingsSchema.
+   *
+   * Deprecated:2.32:Use the 'schema-id' property instead.  In a future
+   * version, this property may instead refer to a #GSettingsSchema.
    */
   g_object_class_install_property (object_class, PROP_SCHEMA_ID,
     g_param_spec_string ("schema",