diff options
author | Danielle Madeley <danielle.madeley@collabora.co.uk> | 2011-03-07 12:06:29 +0800 |
---|---|---|
committer | Danielle Madeley <danielle.madeley@collabora.co.uk> | 2011-04-06 13:48:32 +0800 |
commit | 0b213f4fae18f24fd7b162ca19c63249cd360e43 (patch) | |
tree | 426a0650907e74f3ecc20446e2879e4f3999b182 /src | |
parent | 73d8a18c6def748d78e91f0dda1145771c620b53 (diff) | |
download | gsoc2013-empathy-0b213f4fae18f24fd7b162ca19c63249cd360e43.tar gsoc2013-empathy-0b213f4fae18f24fd7b162ca19c63249cd360e43.tar.gz gsoc2013-empathy-0b213f4fae18f24fd7b162ca19c63249cd360e43.tar.bz2 gsoc2013-empathy-0b213f4fae18f24fd7b162ca19c63249cd360e43.tar.lz gsoc2013-empathy-0b213f4fae18f24fd7b162ca19c63249cd360e43.tar.xz gsoc2013-empathy-0b213f4fae18f24fd7b162ca19c63249cd360e43.tar.zst gsoc2013-empathy-0b213f4fae18f24fd7b162ca19c63249cd360e43.zip |
[ChatroomManager] find windows by channel path, not by TargetID
Otherwise two separate channels with the same TargetID (i.e. SMSChannel = False
and SMSChannel = True) will not result in two separate chat windows in Empathy.
Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=644085
Diffstat (limited to 'src')
-rw-r--r-- | src/empathy-chat-manager.c | 10 | ||||
-rw-r--r-- | src/empathy-chat-window.c | 33 | ||||
-rw-r--r-- | src/empathy-chat-window.h | 1 |
3 files changed, 38 insertions, 6 deletions
diff --git a/src/empathy-chat-manager.c b/src/empathy-chat-manager.c index cfa38ec84..4ff6b7d30 100644 --- a/src/empathy-chat-manager.c +++ b/src/empathy-chat-manager.c @@ -119,18 +119,16 @@ process_tp_chat (EmpathyTpChat *tp_chat, gint64 user_action_time) { EmpathyChat *chat = NULL; - const gchar *id; + const char *channel_path; tell_chatroom_manager_if_needed (account, tp_chat); - id = empathy_tp_chat_get_id (tp_chat); - if (!tp_str_empty (id)) - { - chat = empathy_chat_window_find_chat (account, id); - } + channel_path = empathy_tp_chat_get_channel_path (tp_chat); + chat = empathy_chat_window_find_chat_by_channel (channel_path); if (chat != NULL) { + DEBUG ("found chat %p for path %s", chat, channel_path); empathy_chat_set_tp_chat (chat, tp_chat); } else diff --git a/src/empathy-chat-window.c b/src/empathy-chat-window.c index cb9de9b5b..d44813d54 100644 --- a/src/empathy-chat-window.c +++ b/src/empathy-chat-window.c @@ -2360,6 +2360,39 @@ empathy_chat_window_find_chat (TpAccount *account, return NULL; } +EmpathyChat * +empathy_chat_window_find_chat_by_channel (const char *channel_path) +{ + GList *l; + + g_return_val_if_fail (!EMP_STR_EMPTY (channel_path), NULL); + + for (l = chat_windows; l; l = l->next) { + EmpathyChatWindowPriv *priv; + EmpathyChatWindow *window; + GList *ll; + + window = l->data; + priv = GET_PRIV (window); + + for (ll = priv->chats; ll; ll = ll->next) { + EmpathyChat *chat; + EmpathyTpChat *tp_chat; + const char *path; + + chat = ll->data; + tp_chat = empathy_chat_get_tp_chat (chat); + path = empathy_tp_chat_get_channel_path (tp_chat); + + if (!tp_strdiff (channel_path, path)) { + return chat; + } + } + } + + return NULL; +} + void empathy_chat_window_present_chat (EmpathyChat *chat, gint64 timestamp) diff --git a/src/empathy-chat-window.h b/src/empathy-chat-window.h index 4cbd2094a..963abd725 100644 --- a/src/empathy-chat-window.h +++ b/src/empathy-chat-window.h @@ -72,6 +72,7 @@ void empathy_chat_window_switch_to_chat (EmpathyChatWindow *window gboolean empathy_chat_window_has_focus (EmpathyChatWindow *window); EmpathyChat * empathy_chat_window_find_chat (TpAccount *account, const gchar *id); +EmpathyChat * empathy_chat_window_find_chat_by_channel (const char *path); void empathy_chat_window_present_chat (EmpathyChat *chat, gint64 timestamp); |