[empathy: 8/10] EmpathyChat: track self contact.



commit 4280d01cb8eca11f4b076076f112d0b28560a402
Author: Will Thompson <will willthompson co uk>
Date:   Wed Jan 18 17:26:15 2012 +0000

    EmpathyChat: track self contact.

 libempathy-gtk/empathy-chat.c |   35 +++++++++++++++++++++++++++--------
 1 files changed, 27 insertions(+), 8 deletions(-)
---
diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c
index b1fb93d..cef4597 100644
--- a/libempathy-gtk/empathy-chat.c
+++ b/libempathy-gtk/empathy-chat.c
@@ -73,6 +73,7 @@ struct _EmpathyChatPriv {
 	gchar             *id;
 	gchar             *name;
 	gchar             *subject;
+	EmpathyContact    *self_contact;
 	EmpathyContact    *remote_contact;
 	gboolean           show_contacts;
 
@@ -896,14 +897,12 @@ chat_command_me (EmpathyChat *chat,
 	if (!tp_text_channel_supports_message_type (channel,
 			TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION)) {
 		/* Action message are not supported, 'simulate' the action */
-		EmpathyContact *self_contact;
 		gchar *tmp;
 
-		self_contact = empathy_tp_chat_get_self_contact (priv->tp_chat);
 		/* The TpChat can't be ready if it doesn't have the self contact */
-		g_assert (self_contact != NULL);
+		g_assert (priv->self_contact != NULL);
 
-		tmp = g_strdup_printf ("%s %s", empathy_contact_get_alias (self_contact),
+		tmp = g_strdup_printf ("%s %s", empathy_contact_get_alias (priv->self_contact),
 			strv[1]);
 		message = tp_client_message_new_text (TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL,
 			tmp);
@@ -1412,7 +1411,6 @@ static gboolean
 chat_should_highlight (EmpathyChat *chat,
 	EmpathyMessage *message)
 {
-	EmpathyContact *contact;
 	const gchar   *msg, *to;
 	gboolean       ret_val = FALSE;
 	TpChannelTextMessageFlags flags;
@@ -1433,12 +1431,11 @@ chat_should_highlight (EmpathyChat *chat,
 		return FALSE;
 	}
 
-	contact = empathy_tp_chat_get_self_contact (chat->priv->tp_chat);
-	if (!contact) {
+	if (!chat->priv->self_contact) {
 		return FALSE;
 	}
 
-	to = empathy_contact_get_alias (contact);
+	to = empathy_contact_get_alias (chat->priv->self_contact);
 	if (!to) {
 		return FALSE;
 	}
@@ -2876,6 +2873,19 @@ empathy_chat_set_show_contacts (EmpathyChat *chat,
 }
 
 static void
+chat_self_contact_changed_cb (EmpathyChat *chat)
+{
+	EmpathyChatPriv *priv = GET_PRIV (chat);
+
+	g_clear_object (&priv->self_contact);
+
+	priv->self_contact = empathy_tp_chat_get_self_contact (priv->tp_chat);
+	if (priv->self_contact != NULL) {
+		g_object_ref (priv->self_contact);
+	}
+}
+
+static void
 chat_remote_contact_changed_cb (EmpathyChat *chat)
 {
 	EmpathyChatPriv *priv = GET_PRIV (chat);
@@ -3230,6 +3240,8 @@ chat_finalize (GObject *object)
 		g_signal_handlers_disconnect_by_func (priv->tp_chat,
 			chat_members_changed_cb, chat);
 		g_signal_handlers_disconnect_by_func (priv->tp_chat,
+			chat_self_contact_changed_cb, chat);
+		g_signal_handlers_disconnect_by_func (priv->tp_chat,
 			chat_remote_contact_changed_cb, chat);
 		g_signal_handlers_disconnect_by_func (priv->tp_chat,
 			chat_title_changed_cb, chat);
@@ -3241,6 +3253,9 @@ chat_finalize (GObject *object)
 	if (priv->account) {
 		g_object_unref (priv->account);
 	}
+	if (priv->self_contact) {
+		g_object_unref (priv->self_contact);
+	}
 	if (priv->remote_contact) {
 		g_object_unref (priv->remote_contact);
 	}
@@ -3958,6 +3973,9 @@ empathy_chat_set_tp_chat (EmpathyChat   *chat,
 	g_signal_connect (tp_chat, "member-renamed",
 			  G_CALLBACK (chat_member_renamed_cb),
 			  chat);
+	g_signal_connect_swapped (tp_chat, "notify::self-contact",
+				  G_CALLBACK (chat_self_contact_changed_cb),
+				  chat);
 	g_signal_connect_swapped (tp_chat, "notify::remote-contact",
 				  G_CALLBACK (chat_remote_contact_changed_cb),
 				  chat);
@@ -3979,6 +3997,7 @@ empathy_chat_set_tp_chat (EmpathyChat   *chat,
 
 	/* Get initial value of properties */
 	chat_sms_channel_changed_cb (chat);
+	chat_self_contact_changed_cb (chat);
 	chat_remote_contact_changed_cb (chat);
 	chat_title_changed_cb (chat);
 	chat_subject_changed_cb (chat);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]