[empathy: 13/14] Include SMSChannel property in empathy_chat_window_find_chat()



commit 0fda59487b536e49bfcec7ab1ee6e9c6d7b6f306
Author: Danielle Madeley <danielle madeley collabora co uk>
Date:   Thu May 5 16:22:23 2011 +1000

    Include SMSChannel property in empathy_chat_window_find_chat()
    
    The approach in https://bugzilla.gnome.org/show_bug.cgi?id=644085 was wrong
    because channel paths can change across reconnects. This would cause new chat
    windows to be created when they were rerequested.
    
    A more future-proof solution would be to keep a white/black list of comparable
    properties, but I think this is overengineering the problem for the time
    being. Instead we'll just include the SMSChannel property in the comparison.

 src/empathy-chat-manager.c |    3 ++-
 src/empathy-chat-window.c  |    8 +++++---
 src/empathy-chat-window.h  |    3 ++-
 3 files changed, 9 insertions(+), 5 deletions(-)
---
diff --git a/src/empathy-chat-manager.c b/src/empathy-chat-manager.c
index 6c92c25..544ede6 100644
--- a/src/empathy-chat-manager.c
+++ b/src/empathy-chat-manager.c
@@ -111,7 +111,8 @@ process_tp_chat (EmpathyChatManager *self,
   id = empathy_tp_chat_get_id (tp_chat);
   if (!tp_str_empty (id))
     {
-      chat = empathy_chat_window_find_chat (account, id);
+      chat = empathy_chat_window_find_chat (account, id,
+          empathy_tp_chat_is_sms_channel (tp_chat));
     }
 
   if (chat != NULL)
diff --git a/src/empathy-chat-window.c b/src/empathy-chat-window.c
index 8fc5d6f..ac97601 100644
--- a/src/empathy-chat-window.c
+++ b/src/empathy-chat-window.c
@@ -1786,7 +1786,7 @@ chat_window_drag_data_received (GtkWidget        *widget,
 			account =
 				tp_account_manager_ensure_account (account_manager, account_id);
 			if (account != NULL)
-				chat = empathy_chat_window_find_chat (account, contact_id);
+				chat = empathy_chat_window_find_chat (account, contact_id, FALSE);
 		}
 
 		if (account == NULL) {
@@ -2354,7 +2354,8 @@ empathy_chat_window_switch_to_chat (EmpathyChatWindow *window,
 
 EmpathyChat *
 empathy_chat_window_find_chat (TpAccount   *account,
-			       const gchar *id)
+			       const gchar *id,
+			       gboolean     sms_channel)
 {
 	GList *l;
 
@@ -2374,7 +2375,8 @@ empathy_chat_window_find_chat (TpAccount   *account,
 			chat = ll->data;
 
 			if (account == empathy_chat_get_account (chat) &&
-			    !tp_strdiff (id, empathy_chat_get_id (chat))) {
+			    !tp_strdiff (id, empathy_chat_get_id (chat)) &&
+			    sms_channel == empathy_chat_is_sms_channel (chat)) {
 				return chat;
 			}
 		}
diff --git a/src/empathy-chat-window.h b/src/empathy-chat-window.h
index 5477479..2112b66 100644
--- a/src/empathy-chat-window.h
+++ b/src/empathy-chat-window.h
@@ -59,7 +59,8 @@ struct _EmpathyChatWindowClass {
 GType              empathy_chat_window_get_type       (void);
 
 EmpathyChat *      empathy_chat_window_find_chat      (TpAccount        *account,
-						       const gchar      *id);
+						       const gchar      *id,
+						       gboolean          sms_channel);
 void               empathy_chat_window_present_chat   (EmpathyChat      *chat,
 						       gint64 timestamp);
 



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