From 376bd27843d83ee42e3d731f9856fff9d522aa3c Mon Sep 17 00:00:00 2001 From: Danielle Madeley Date: Thu, 5 May 2011 16:22:23 +1000 Subject: 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 6de733983..b31684069 100644 --- a/src/empathy-chat-manager.c +++ b/src/empathy-chat-manager.c @@ -126,7 +126,8 @@ process_tp_chat (EmpathyTpChat *tp_chat, 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 5ae37f660..7dcc996ac 100644 --- a/src/empathy-chat-window.c +++ b/src/empathy-chat-window.c @@ -1817,7 +1817,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) { @@ -2395,7 +2395,8 @@ empathy_chat_window_has_focus (EmpathyChatWindow *window) EmpathyChat * empathy_chat_window_find_chat (TpAccount *account, - const gchar *id) + const gchar *id, + gboolean sms_channel) { GList *l; @@ -2415,7 +2416,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 4cbd2094a..f8425e172 100644 --- a/src/empathy-chat-window.h +++ b/src/empathy-chat-window.h @@ -71,7 +71,8 @@ void empathy_chat_window_switch_to_chat (EmpathyChatWindow *window EmpathyChat *chat); gboolean empathy_chat_window_has_focus (EmpathyChatWindow *window); 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); -- cgit v1.2.3