diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2012-09-19 12:12:40 +0100 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2012-09-26 14:50:15 +0200 |
commit | 3db2b44439ee7330eaa15ab374ebb033e8296063 (patch) | |
tree | 7fce13bbbfb650ef6b799b66fee265670b448197 /telepathy-glib | |
parent | 9720a304317d43b9ada1555b4542bcece7457c8a (diff) | |
download | telepathy-glib-3db2b44439ee7330eaa15ab374ebb033e8296063.tar.gz |
tp_message_set_variant: add and test
https://bugs.freedesktop.org/show_bug.cgi?id=55096
Diffstat (limited to 'telepathy-glib')
-rw-r--r-- | telepathy-glib/message.c | 41 | ||||
-rw-r--r-- | telepathy-glib/message.h | 3 |
2 files changed, 43 insertions, 1 deletions
diff --git a/telepathy-glib/message.c b/telepathy-glib/message.c index 508e86e33..4b410701e 100644 --- a/telepathy-glib/message.c +++ b/telepathy-glib/message.c @@ -614,13 +614,15 @@ tp_message_set_bytes (TpMessage *self, * @part: a part number, which must be strictly less than the number * returned by tp_message_count_parts() * @key: a key in the mapping representing the part - * @source: a value + * @source: a value, encoded as dbus-glib would * * Set @key in part @part of @self to have a copy of @source as its value. * * If @source represents a data structure containing handles, they should * all be referenced with tp_message_ref_handle() first. * + * In high-level language bindings, use tp_message_set_variant() instead. + * * Since: 0.7.21 */ void @@ -639,6 +641,43 @@ tp_message_set (TpMessage *self, } /** + * tp_message_set_variant: + * @self: a message + * @part: a part number, which must be strictly less than the number + * returned by tp_message_count_parts() + * @key: a key in the mapping representing the part + * @value: a value + * + * Set @key in part @part of @self to have @value as its value. + * + * If @value is a floating reference (see g_variant_ref_sink()), then this + * function will take ownership of it. + * + * Since: 0.UNRELEASED + */ +void +tp_message_set_variant (TpMessage *self, + guint part, + const gchar *key, + GVariant *value) +{ + GValue *gvalue; + + g_return_if_fail (part < self->parts->len); + g_return_if_fail (key != NULL); + g_return_if_fail (value != NULL); + g_return_if_fail (self->priv->mutable); + + g_variant_ref_sink (value); + gvalue = g_slice_new0 (GValue); + dbus_g_value_parse_g_variant (value, gvalue); + g_variant_unref (value); + + g_hash_table_insert (g_ptr_array_index (self->parts, part), + g_strdup (key), gvalue); +} + +/** * tp_message_take_message: * @self: a #TpCMMessage * @part: a part number, which must be strictly less than the number diff --git a/telepathy-glib/message.h b/telepathy-glib/message.h index e4f7c288c..50df7f2d6 100644 --- a/telepathy-glib/message.h +++ b/telepathy-glib/message.h @@ -74,6 +74,9 @@ void tp_message_set_bytes (TpMessage *self, guint part, const gchar *key, guint len, gconstpointer bytes); void tp_message_set (TpMessage *self, guint part, const gchar *key, const GValue *source); +_TP_AVAILABLE_IN_UNRELEASED +void tp_message_set_variant (TpMessage *self, guint part, const gchar *key, + GVariant *value); gchar * tp_message_to_text (TpMessage *message, TpChannelTextMessageFlags *out_flags) G_GNUC_WARN_UNUSED_RESULT; |