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.
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)
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) {
EmpathyChat *
empathy_chat_window_find_chat (TpAccount *account,
- const gchar *id)
+ const gchar *id,
+ gboolean sms_channel)
{
GList *l;
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;
}
}
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);