aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy/empathy-tp-chat.c
diff options
context:
space:
mode:
authorXavier Claessens <xclaesse@src.gnome.org>2008-04-14 21:00:56 +0800
committerXavier Claessens <xclaesse@src.gnome.org>2008-04-14 21:00:56 +0800
commit68703c3fc1665588318d717539c8cf965e67b57c (patch)
treec7cf7b351e6a126eaa22b94c27fb9444d0779e3b /libempathy/empathy-tp-chat.c
parent942dd6964445de8da53abb416d36ad518354920b (diff)
downloadgsoc2013-empathy-68703c3fc1665588318d717539c8cf965e67b57c.tar
gsoc2013-empathy-68703c3fc1665588318d717539c8cf965e67b57c.tar.gz
gsoc2013-empathy-68703c3fc1665588318d717539c8cf965e67b57c.tar.bz2
gsoc2013-empathy-68703c3fc1665588318d717539c8cf965e67b57c.tar.lz
gsoc2013-empathy-68703c3fc1665588318d717539c8cf965e67b57c.tar.xz
gsoc2013-empathy-68703c3fc1665588318d717539c8cf965e67b57c.tar.zst
gsoc2013-empathy-68703c3fc1665588318d717539c8cf965e67b57c.zip
Set "remote-contact" property even if there is a group interface.
svn path=/trunk/; revision=937
Diffstat (limited to 'libempathy/empathy-tp-chat.c')
-rw-r--r--libempathy/empathy-tp-chat.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/libempathy/empathy-tp-chat.c b/libempathy/empathy-tp-chat.c
index 767aec113..8265339ac 100644
--- a/libempathy/empathy-tp-chat.c
+++ b/libempathy/empathy-tp-chat.c
@@ -54,6 +54,7 @@ struct _EmpathyTpChatPriv {
gboolean had_properties_list;
GPtrArray *properties;
gboolean ready;
+ guint nb_members;
};
typedef struct {
@@ -121,6 +122,27 @@ tp_chat_member_added_cb (EmpathyTpGroup *group,
const gchar *message,
EmpathyTpChat *chat)
{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+
+ priv->nb_members++;
+ if (priv->nb_members > 2 && priv->remote_contact) {
+ /* We now have more than 2 members, this is not a p2p chat
+ * anymore. Remove the remote-contact as it makes no sense, the
+ * EmpathyContactList interface must be used now. */
+ g_object_unref (priv->remote_contact);
+ priv->remote_contact = NULL;
+ g_object_notify (G_OBJECT (chat), "remote-contact");
+ }
+ if (priv->nb_members <= 2 && !priv->remote_contact &&
+ !empathy_contact_is_user (contact)) {
+ /* This is a p2p chat, if it's not ourself that means this is
+ * the remote contact with who we are chatting. This is to
+ * avoid forcing the usage of the EmpathyContactList interface
+ * for p2p chats. */
+ priv->remote_contact = g_object_ref (contact);
+ g_object_notify (G_OBJECT (chat), "remote-contact");
+ }
+
g_signal_emit_by_name (chat, "members-changed",
contact, actor, reason, message,
TRUE);
@@ -134,6 +156,25 @@ tp_chat_member_removed_cb (EmpathyTpGroup *group,
const gchar *message,
EmpathyTpChat *chat)
{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+
+ priv->nb_members--;
+ if (priv->nb_members <= 2 && !priv->remote_contact) {
+ GList *members, *l;
+
+ /* We are not a MUC anymore, get the remote contact back */
+ members = empathy_tp_group_get_members (group);
+ for (l = members; l; l = l->next) {
+ if (!empathy_contact_is_user (l->data)) {
+ priv->remote_contact = g_object_ref (l->data);
+ g_object_notify (G_OBJECT (chat), "remote-contact");
+ break;
+ }
+ }
+ g_list_foreach (members, (GFunc) g_object_unref, NULL);
+ g_list_free (members);
+ }
+
g_signal_emit_by_name (chat, "members-changed",
contact, actor, reason, message,
FALSE);