summaryrefslogtreecommitdiff
path: root/json-glib/json-generator.c
diff options
context:
space:
mode:
Diffstat (limited to 'json-glib/json-generator.c')
-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);
}