empathy r937 - trunk/libempathy
- From: xclaesse svn gnome org
- To: svn-commits-list gnome org
- Subject: empathy r937 - trunk/libempathy
- Date: Mon, 14 Apr 2008 14:00:56 +0100 (BST)
Author: xclaesse
Date: Mon Apr 14 14:00:56 2008
New Revision: 937
URL: http://svn.gnome.org/viewvc/empathy?rev=937&view=rev
Log:
Set "remote-contact" property even if there is a group interface.
Modified:
trunk/libempathy/empathy-tp-chat.c
Modified: trunk/libempathy/empathy-tp-chat.c
==============================================================================
--- trunk/libempathy/empathy-tp-chat.c (original)
+++ trunk/libempathy/empathy-tp-chat.c Mon Apr 14 14:00:56 2008
@@ -54,6 +54,7 @@
gboolean had_properties_list;
GPtrArray *properties;
gboolean ready;
+ guint nb_members;
};
typedef struct {
@@ -121,6 +122,27 @@
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 @@
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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]