]> git.0d.be Git - empathy.git/blobdiff - libempathy/empathy-tp-contact-list.c
Merge back from master
[empathy.git] / libempathy / empathy-tp-contact-list.c
index 4bbe46b4f570311c55a40daacec7acfbc95345bb..2bf2ec4161e5b8c4ae8e434cc99da3250830de9f 100644 (file)
@@ -974,10 +974,13 @@ tp_contact_list_add (EmpathyContactList *list,
                tp_cli_channel_interface_group_call_add_members (priv->subscribe,
                        -1, &handles, message, NULL, NULL, NULL, NULL);
        }
-       if (priv->publish &&
-           g_hash_table_lookup (priv->pendings, GUINT_TO_POINTER (handle))) {
-               tp_cli_channel_interface_group_call_add_members (priv->publish,
-                       -1, &handles, message, NULL, NULL, NULL, NULL);
+       if (priv->publish) {
+               TpChannelGroupFlags flags = tp_channel_group_get_flags (priv->subscribe);
+               if (flags & TP_CHANNEL_GROUP_FLAG_CAN_ADD ||
+                   g_hash_table_lookup (priv->pendings, GUINT_TO_POINTER (handle))) {
+                       tp_cli_channel_interface_group_call_add_members (priv->publish,
+                               -1, &handles, message, NULL, NULL, NULL, NULL);
+               }
        }
 }
 
@@ -1166,21 +1169,24 @@ tp_contact_list_get_flags (EmpathyContactList *list)
 {
        EmpathyTpContactListPriv *priv;
        EmpathyContactListFlags flags;
-       TpChannelGroupFlags group_flags;
 
        g_return_val_if_fail (EMPATHY_IS_TP_CONTACT_LIST (list), FALSE);
 
        priv = GET_PRIV (list);
        flags = priv->flags;
 
-       group_flags = tp_channel_group_get_flags (priv->subscribe);
+       if (priv->subscribe != NULL) {
+               TpChannelGroupFlags group_flags;
 
-       if (group_flags & TP_CHANNEL_GROUP_FLAG_CAN_ADD) {
-               flags |= EMPATHY_CONTACT_LIST_CAN_ADD;
-       }
+               group_flags = tp_channel_group_get_flags (priv->subscribe);
+
+               if (group_flags & TP_CHANNEL_GROUP_FLAG_CAN_ADD) {
+                       flags |= EMPATHY_CONTACT_LIST_CAN_ADD;
+               }
 
-       if (group_flags & TP_CHANNEL_GROUP_FLAG_CAN_REMOVE) {
-               flags |= EMPATHY_CONTACT_LIST_CAN_REMOVE;
+               if (group_flags & TP_CHANNEL_GROUP_FLAG_CAN_REMOVE) {
+                       flags |= EMPATHY_CONTACT_LIST_CAN_REMOVE;
+               }
        }
 
        return flags;