diff options
author | Danielle Madeley <danielle.madeley@collabora.co.uk> | 2011-05-05 14:22:23 +0800 |
---|---|---|
committer | Danielle Madeley <danielle.madeley@collabora.co.uk> | 2011-05-05 14:31:51 +0800 |
commit | 0fda59487b536e49bfcec7ab1ee6e9c6d7b6f306 (patch) | |
tree | c742771832d409e1acf3c37236c0d2a84dcada8c | |
parent | 11e8ca993282f16043b821f00e55f5ebd03fb089 (diff) | |
download | gsoc2013-empathy-0fda59487b536e49bfcec7ab1ee6e9c6d7b6f306.tar gsoc2013-empathy-0fda59487b536e49bfcec7ab1ee6e9c6d7b6f306.tar.gz gsoc2013-empathy-0fda59487b536e49bfcec7ab1ee6e9c6d7b6f306.tar.bz2 gsoc2013-empathy-0fda59487b536e49bfcec7ab1ee6e9c6d7b6f306.tar.lz gsoc2013-empathy-0fda59487b536e49bfcec7ab1ee6e9c6d7b6f306.tar.xz gsoc2013-empathy-0fda59487b536e49bfcec7ab1ee6e9c6d7b6f306.tar.zst gsoc2013-empathy-0fda59487b536e49bfcec7ab1ee6e9c6d7b6f306.zip |
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.
-rw-r--r-- | src/empathy-chat-manager.c | 3 | ||||
-rw-r--r-- | src/empathy-chat-window.c | 8 | ||||
-rw-r--r-- | 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 6c92c25cb..544ede69f 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 8fc5d6f3d..ac97601ce 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 5477479ac..2112b6647 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); |