diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2010-11-10 15:14:51 +0100 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2010-12-09 13:56:28 +0100 |
commit | bb8488db6d0a7a232eda7dc66a97e61194b13bc1 (patch) | |
tree | 447ce8862a786c1823a8939e1674a6600efc99ed /telepathy-glib/signalled-message.c | |
parent | 76f41858f44d7b0b9a8d5e83ac00ef01e7da662e (diff) | |
download | telepathy-glib-bb8488db6d0a7a232eda7dc66a97e61194b13bc1.tar.gz |
TpSignalledMessage: takes the sender during construction
Diffstat (limited to 'telepathy-glib/signalled-message.c')
-rw-r--r-- | telepathy-glib/signalled-message.c | 78 |
1 files changed, 67 insertions, 11 deletions
diff --git a/telepathy-glib/signalled-message.c b/telepathy-glib/signalled-message.c index 0eb52df1e..1279f1742 100644 --- a/telepathy-glib/signalled-message.c +++ b/telepathy-glib/signalled-message.c @@ -47,6 +47,11 @@ * messages interface */ +enum +{ + PROP_SENDER = 1 +}; + G_DEFINE_TYPE (TpSignalledMessage, tp_signalled_message, TP_TYPE_MESSAGE) struct _TpSignalledMessagePrivate @@ -55,6 +60,47 @@ struct _TpSignalledMessagePrivate }; static void +tp_signalled_message_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + TpSignalledMessage *self = (TpSignalledMessage *) object; + + switch (property_id) + { + case PROP_SENDER: + g_value_set_object (value, self->priv->sender); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +tp_signalled_message_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + TpSignalledMessage *self = (TpSignalledMessage *) object; + + switch (property_id) + { + case PROP_SENDER: + g_assert (self->priv->sender == NULL); /* construct only */ + self->priv->sender = g_value_dup_object (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void tp_signalled_message_dispose (GObject *object) { TpSignalledMessage *self = TP_SIGNALLED_MESSAGE (object); @@ -71,9 +117,27 @@ static void tp_signalled_message_class_init (TpSignalledMessageClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GParamSpec *param_spec; + gobject_class->get_property = tp_signalled_message_get_property; + gobject_class->set_property = tp_signalled_message_set_property; gobject_class->dispose = tp_signalled_message_dispose; + /** + * TpSignalledMessage:sender: + * + * A #TpContat representing the sender of the message if known, + * otherwise %NULL. + * + * Since: 0.13.UNRELEASED + */ + param_spec = g_param_spec_object ("sender", "TpContact", + "The sender of the message", + TP_TYPE_CONTACT, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); + g_object_class_install_property (gobject_class, PROP_SENDER, + param_spec); + g_type_class_add_private (gobject_class, sizeof (TpSignalledMessagePrivate)); } @@ -87,7 +151,8 @@ tp_signalled_message_init (TpSignalledMessage *self) } TpMessage * -_tp_signalled_message_new (const GPtrArray *parts) +_tp_signalled_message_new (const GPtrArray *parts, + TpContact *sender) { TpMessage *self; guint i; @@ -97,6 +162,7 @@ _tp_signalled_message_new (const GPtrArray *parts) /* FIXME: remove message-sender? */ self = g_object_new (TP_TYPE_SIGNALLED_MESSAGE, + "sender", sender, NULL); for (i = 0; i < parts->len; i++) @@ -114,16 +180,6 @@ _tp_signalled_message_new (const GPtrArray *parts) return self; } -void -_tp_signalled_message_set_sender (TpMessage *message, - TpContact *contact) -{ - TpSignalledMessage *self = TP_SIGNALLED_MESSAGE (message); - - g_assert (self->priv->sender == NULL); - self->priv->sender = g_object_ref (contact); -} - /** * tp_signalled_message_get_sender: * @message: a #TpSignalledMessage |