From 858a4d27abd2f040d44eaeda17f618a1a63b1631 Mon Sep 17 00:00:00 2001 From: Emilio Pozuelo Monfort Date: Tue, 21 Jun 2011 17:53:07 +0100 Subject: empathy_contact_from_tpl_contact: don't override the alias Add a logged-alias property instead, which can be used by those who need the old alias. And use it in chat themes for the backlog. --- libempathy/empathy-contact.c | 45 +++++++++++++++++++++++++++++++++----------- libempathy/empathy-contact.h | 1 + 2 files changed, 35 insertions(+), 11 deletions(-) (limited to 'libempathy') diff --git a/libempathy/empathy-contact.c b/libempathy/empathy-contact.c index c766857ee..ed7af6c38 100644 --- a/libempathy/empathy-contact.c +++ b/libempathy/empathy-contact.c @@ -56,6 +56,7 @@ typedef struct { FolksPersona *persona; gchar *id; gchar *alias; + gchar *logged_alias; EmpathyAvatar *avatar; TpConnectionPresenceType presence; guint handle; @@ -109,6 +110,7 @@ enum PROP_PERSONA, PROP_ID, PROP_ALIAS, + PROP_LOGGED_ALIAS, PROP_AVATAR, PROP_PRESENCE, PROP_PRESENCE_MESSAGE, @@ -317,6 +319,15 @@ empathy_contact_class_init (EmpathyContactClass *class) NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, + PROP_LOGGED_ALIAS, + g_param_spec_string ("logged-alias", + "Logged alias", + "The alias the user had when a message was logged, " + "only set when using empathy_contact_from_tpl_contact()", + NULL, + G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, PROP_AVATAR, g_param_spec_boxed ("avatar", @@ -557,6 +568,9 @@ contact_get_property (GObject *object, case PROP_ALIAS: g_value_set_string (value, empathy_contact_get_alias (contact)); break; + case PROP_LOGGED_ALIAS: + g_value_set_string (value, empathy_contact_get_logged_alias (contact)); + break; case PROP_AVATAR: g_value_set_boxed (value, empathy_contact_get_avatar (contact)); break; @@ -608,6 +622,10 @@ contact_set_property (GObject *object, case PROP_ALIAS: empathy_contact_set_alias (contact, g_value_get_string (value)); break; + case PROP_LOGGED_ALIAS: + g_assert (priv->logged_alias == NULL); + priv->logged_alias = g_value_dup_string (value); + break; case PROP_PRESENCE: empathy_contact_set_presence (contact, g_value_get_uint (value)); break; @@ -696,20 +714,10 @@ empathy_contact_from_tpl_contact (TpAccount *account, if (existing_contact != NULL) { - EmpathyContactPriv *priv; - retval = g_object_new (EMPATHY_TYPE_CONTACT, "tp-contact", empathy_contact_get_tp_contact (existing_contact), + "logged-alias", tpl_entity_get_alias (tpl_entity), NULL); - - priv = GET_PRIV (retval); - - /* contact_set_property() calls empathy_contact_set_alias(), which - * tries to set the alias on the FolksPersona, but we don't want to - * do that when creating an EmpathyContact from a TplEntity. So just - * set priv->alias instead of passing it to g_object_new() instead. */ - g_free (priv->alias); - priv->alias = g_strdup (tpl_entity_get_alias (tpl_entity)); } else { @@ -778,6 +786,21 @@ empathy_contact_get_alias (EmpathyContact *contact) return empathy_contact_get_id (contact); } +const gchar * +empathy_contact_get_logged_alias (EmpathyContact *contact) +{ + EmpathyContactPriv *priv; + + g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL); + + priv = GET_PRIV (contact); + + if (priv->logged_alias != NULL) + return priv->logged_alias; + else + return empathy_contact_get_alias (contact); +} + void empathy_contact_set_alias (EmpathyContact *contact, const gchar *alias) diff --git a/libempathy/empathy-contact.h b/libempathy/empathy-contact.h index b32971a3f..cb8f5a660 100644 --- a/libempathy/empathy-contact.h +++ b/libempathy/empathy-contact.h @@ -77,6 +77,7 @@ EmpathyContact * empathy_contact_from_tpl_contact (TpAccount *account, TpContact * empathy_contact_get_tp_contact (EmpathyContact *contact); const gchar * empathy_contact_get_id (EmpathyContact *contact); const gchar * empathy_contact_get_alias (EmpathyContact *contact); +const gchar * empathy_contact_get_logged_alias (EmpathyContact *contact); void empathy_contact_set_alias (EmpathyContact *contact, const gchar *alias); void empathy_contact_change_group (EmpathyContact *contact, const gchar *group, gboolean is_member); -- cgit v1.2.3