From cdfd5215dfa3e7dfe1254f76a5eccf4b4356816d Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Wed, 1 Feb 2012 14:26:58 +0000 Subject: Chat: show who changed the subject https://bugzilla.gnome.org/show_bug.cgi?id=669177 --- libempathy/empathy-tp-chat.c | 26 +++++++++++++++++++++++++- libempathy/empathy-tp-chat.h | 1 + 2 files changed, 26 insertions(+), 1 deletion(-) (limited to 'libempathy') diff --git a/libempathy/empathy-tp-chat.c b/libempathy/empathy-tp-chat.c index fcef6e8a7..4e26a769b 100644 --- a/libempathy/empathy-tp-chat.c +++ b/libempathy/empathy-tp-chat.c @@ -51,6 +51,7 @@ struct _EmpathyTpChatPrivate { gboolean supports_subject; gboolean can_set_subject; gchar *subject; + gchar *subject_actor; /* Room config (for now, we only track the title and don't support * setting it) */ @@ -609,12 +610,26 @@ update_subject (EmpathyTpChat *self, subject = tp_asv_get_string (properties, "Subject"); if (subject != NULL) { + const gchar *actor; + g_free (priv->subject); priv->subject = g_strdup (subject); + + /* If the actor is included with this update, use it; + * otherwise, clear it to avoid showing stale information. + * Why might it not be included? When you join an IRC channel, + * you get a pair of messages: first, the current topic; next, + * who set it, and when. Idle reports these in two separate + * signals. + */ + actor = tp_asv_get_string (properties, "Actor"); + g_free (priv->subject_actor); + priv->subject_actor = g_strdup (actor); + g_object_notify (G_OBJECT (self), "subject"); } - /* TODO: track Actor and Timestamp. */ + /* TODO: track Timestamp. */ } static void @@ -733,6 +748,14 @@ empathy_tp_chat_get_subject (EmpathyTpChat *self) return priv->subject; } +const gchar * +empathy_tp_chat_get_subject_actor (EmpathyTpChat *self) +{ + EmpathyTpChatPrivate *priv = self->priv; + + return priv->subject_actor; +} + static void tp_chat_dispose (GObject *object) { @@ -768,6 +791,7 @@ tp_chat_finalize (GObject *object) g_free (self->priv->title); g_free (self->priv->subject); + g_free (self->priv->subject_actor); G_OBJECT_CLASS (empathy_tp_chat_parent_class)->finalize (object); } diff --git a/libempathy/empathy-tp-chat.h b/libempathy/empathy-tp-chat.h index cc1c16aaf..885479cb3 100644 --- a/libempathy/empathy-tp-chat.h +++ b/libempathy/empathy-tp-chat.h @@ -81,6 +81,7 @@ const gchar * empathy_tp_chat_get_title (EmpathyTpChat *self); gboolean empathy_tp_chat_supports_subject (EmpathyTpChat *self); const gchar * empathy_tp_chat_get_subject (EmpathyTpChat *self); +const gchar * empathy_tp_chat_get_subject_actor (EmpathyTpChat *self); gboolean empathy_tp_chat_can_set_subject (EmpathyTpChat *self); void empathy_tp_chat_set_subject (EmpathyTpChat *self, const gchar *subject); -- cgit v1.2.3