[empathy] Introduce empathy_contact_equal, adapt themes
- From: Patryk Zawadzki <pzawadzki src gnome org>
- To: svn-commits-list gnome org
- Subject: [empathy] Introduce empathy_contact_equal, adapt themes
- Date: Tue, 16 Jun 2009 09:37:31 -0400 (EDT)
commit 40d33622db46952e016cc8e540403cccb7ba6103
Author: Patryk Zawadzki <patrys pld-linux org>
Date: Tue Jun 16 15:37:08 2009 +0200
Introduce empathy_contact_equal, adapt themes
Fixed adium and boxes theme engines to check if contacts refer to
the same id instead of comparing pointers. This fixes bug #585885.
libempathy-gtk/empathy-theme-adium.c | 4 +-
libempathy-gtk/empathy-theme-boxes.c | 2 +-
libempathy/empathy-contact.c | 37 ++++++++++++++++++++++++++++++++++
libempathy/empathy-contact.h | 4 ++-
4 files changed, 43 insertions(+), 4 deletions(-)
---
diff --git a/libempathy-gtk/empathy-theme-adium.c b/libempathy-gtk/empathy-theme-adium.c
index 82384ac..321d199 100644
--- a/libempathy-gtk/empathy-theme-adium.c
+++ b/libempathy-gtk/empathy-theme-adium.c
@@ -500,7 +500,8 @@ theme_adium_append_message (EmpathyChatView *view,
}
/* Get the right html/func to add the message */
- if (priv->last_contact == sender) {
+ func = "appendMessage";
+ if (empathy_contact_equal (priv->last_contact, sender)) {
func = "appendNextMessage";
if (empathy_contact_is_user (sender)) {
html = priv->out_nextcontent_html;
@@ -512,7 +513,6 @@ theme_adium_append_message (EmpathyChatView *view,
}
}
if (!html) {
- func = "appendMessage";
if (empathy_contact_is_user (sender)) {
html = priv->out_content_html;
len = priv->out_content_len;
diff --git a/libempathy-gtk/empathy-theme-boxes.c b/libempathy-gtk/empathy-theme-boxes.c
index 1991329..64d95d4 100644
--- a/libempathy-gtk/empathy-theme-boxes.c
+++ b/libempathy-gtk/empathy-theme-boxes.c
@@ -210,7 +210,7 @@ theme_boxes_maybe_append_header (EmpathyThemeBoxes *theme,
/* Only insert a header if the previously inserted block is not the same
* as this one.
*/
- if (last_contact == contact) {
+ if (empathy_contact_equal (last_contact, contact)) {
return;
}
diff --git a/libempathy/empathy-contact.c b/libempathy/empathy-contact.c
index 8e07fb9..bad6ef4 100644
--- a/libempathy/empathy-contact.c
+++ b/libempathy/empathy-contact.c
@@ -1082,3 +1082,40 @@ empathy_contact_set_location (EmpathyContact *contact,
priv->location = g_hash_table_ref (location);
g_object_notify (G_OBJECT (contact), "location");
}
+
+/**
+ * empathy_contact_equal:
+ * @contact1: an #EmpathyContact
+ * @contact2: an #EmpathyContact
+ *
+ * Returns FALSE if one of the contacts is NULL but the other is not.
+ * Otherwise returns TRUE if both pointer are equal or if they bith
+ * refer to the same id.
+ * It's only necessary to call this function if your contact objects
+ * come from logs where contacts are created dynamically and comparing
+ * pointers is not enough.
+ */
+gboolean
+empathy_contact_equal (gconstpointer contact1,
+ gconstpointer contact2)
+{
+ EmpathyContact *c1;
+ EmpathyContact *c2;
+ const gchar *id1;
+ const gchar *id2;
+
+ if ((contact1 == NULL) != (contact2 == NULL)) {
+ return FALSE;
+ }
+ if (contact1 == contact2) {
+ return TRUE;
+ }
+ c1 = EMPATHY_CONTACT (contact1);
+ c2 = EMPATHY_CONTACT (contact2);
+ id1 = empathy_contact_get_id (c1);
+ id2 = empathy_contact_get_id (c2);
+ if (!tp_strdiff (id1, id2)) {
+ return TRUE;
+ }
+ return FALSE;
+}
diff --git a/libempathy/empathy-contact.h b/libempathy/empathy-contact.h
index f441876..f888313 100644
--- a/libempathy/empathy-contact.h
+++ b/libempathy/empathy-contact.h
@@ -125,7 +125,9 @@ gboolean empathy_avatar_save_to_file (EmpathyAvatar *avatar,
GHashTable * empathy_contact_get_location (EmpathyContact *contact);
void empathy_contact_set_location (EmpathyContact *contact,
- GHashTable *location);
+ GHashTable *location);
+gboolean empathy_contact_equal (gconstpointer contact1,
+ gconstpointer contact2);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]