summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@openedhand.com>2007-11-13 09:28:57 +0000
committerEmmanuele Bassi <ebassi@openedhand.com>2007-11-13 09:28:57 +0000
commita7c39c910e08093ee0d0723685005623f26b9eae (patch)
tree19a4633a1020bce99750a9e62566592d43d45d89
parent6132d7325c33e26740b4c955d8ccbe53fd817cd8 (diff)
downloadjson-glib-a7c39c910e08093ee0d0723685005623f26b9eae.tar.gz
Add the JsonGenerator:root property
JsonGenerator now has a :root property, so it can be constructed using just g_object_new(): generator = g_object_new (JSON_TYPE_GENERATOR, "pretty", TRUE, "indent", 4, "root", node, NULL); This means that the root node is copied inside the generator, instead of just taking ownership (it was quite confusing). The documentation now clearly states what happens, and that you can safely free the node after feeding it to the JsonGenerator.
-rw-r--r--json-glib/json-generator.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/json-glib/json-generator.c b/json-glib/json-generator.c
index 675bc98..730260e 100644
--- a/json-glib/json-generator.c
+++ b/json-glib/json-generator.c
@@ -50,7 +50,8 @@ enum
PROP_0,
PROP_PRETTY,
- PROP_INDENT
+ PROP_INDENT,
+ PROP_ROOT
};
static gchar *dump_value (JsonGenerator *generator,
@@ -97,6 +98,10 @@ json_generator_set_property (GObject *gobject,
case PROP_INDENT:
priv->indent = g_value_get_uint (value);
break;
+ case PROP_ROOT:
+ json_generator_set_root (JSON_GENERATOR (gobject),
+ g_value_get_boxed (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break;
@@ -119,6 +124,9 @@ json_generator_get_property (GObject *gobject,
case PROP_INDENT:
g_value_set_uint (value, priv->indent);
break;
+ case PROP_ROOT:
+ g_value_set_boxed (value, priv->root);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break;
@@ -163,6 +171,21 @@ json_generator_class_init (JsonGeneratorClass *klass)
0, G_MAXUINT,
2,
G_PARAM_READWRITE));
+ /**
+ * JsonGenerator:root:
+ *
+ * The root #JsonNode to be used when constructing a JSON data
+ * stream.
+ *
+ * Since: 0.4
+ */
+ g_object_class_install_property (gobject_class,
+ PROP_ROOT,
+ g_param_spec_boxed ("root",
+ "Root",
+ "Root of the JSON data tree",
+ JSON_TYPE_NODE,
+ G_PARAM_READWRITE));
}
static void
@@ -517,6 +540,9 @@ json_generator_to_file (JsonGenerator *generator,
*
* Sets @node as the root of the JSON data stream to be serialized by
* the #JsonGenerator.
+ *
+ * Note: the node is copied by the generator object, so it can be safely
+ * freed after calling this function.
*/
void
json_generator_set_root (JsonGenerator *generator,
@@ -531,5 +557,5 @@ json_generator_set_root (JsonGenerator *generator,
}
if (node)
- generator->priv->root = node;
+ generator->priv->root = json_node_copy (node);
}