aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanielle Madeley <danielle.madeley@collabora.co.uk>2011-03-07 12:06:29 +0800
committerDanielle Madeley <danielle.madeley@collabora.co.uk>2011-04-06 13:48:32 +0800
commit0b213f4fae18f24fd7b162ca19c63249cd360e43 (patch)
tree426a0650907e74f3ecc20446e2879e4f3999b182
parent73d8a18c6def748d78e91f0dda1145771c620b53 (diff)
downloadgsoc2013-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
-rw-r--r--libempathy/empathy-tp-chat.c12
-rw-r--r--libempathy/empathy-tp-chat.h2
-rw-r--r--src/empathy-chat-manager.c10
-rw-r--r--src/empathy-chat-window.c33
-rw-r--r--src/empathy-chat-window.h1
5 files changed, 52 insertions, 6 deletions
diff --git a/libempathy/empathy-tp-chat.c b/libempathy/empathy-tp-chat.c
index 462f8a77b..e8542a021 100644
--- a/libempathy/empathy-tp-chat.c
+++ b/libempathy/empathy-tp-chat.c
@@ -1960,3 +1960,15 @@ empathy_tp_chat_is_invited (EmpathyTpChat *self,
return tp_channel_group_get_local_pending_info (priv->channel, self_handle,
inviter, NULL, NULL);
}
+
+const char *
+empathy_tp_chat_get_channel_path (EmpathyTpChat *self)
+{
+ EmpathyTpChatPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), NULL);
+
+ priv = GET_PRIV (self);
+
+ return tp_proxy_get_object_path (priv->channel);
+}
diff --git a/libempathy/empathy-tp-chat.h b/libempathy/empathy-tp-chat.h
index 8858f4971..fe3de4ea7 100644
--- a/libempathy/empathy-tp-chat.h
+++ b/libempathy/empathy-tp-chat.h
@@ -106,6 +106,8 @@ void empathy_tp_chat_join (EmpathyTpChat *chat);
gboolean empathy_tp_chat_is_invited (EmpathyTpChat *chat,
TpHandle *inviter);
+const char * empathy_tp_chat_get_channel_path (EmpathyTpChat *chat);
+
G_END_DECLS
#endif /* __EMPATHY_TP_CHAT_H__ */
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);