From 900a3c6db1620fd340f94d3da9e8454ed49283f3 Mon Sep 17 00:00:00 2001 From: Xavier Claessens Date: Mon, 7 May 2012 17:44:57 +0200 Subject: [PATCH] Move TpChannel::group-flags to channel-contacts.c It means TP_CHANNEL_FEATURE_CONTACTS must now be prepared to get it https://bugs.freedesktop.org/show_bug.cgi?id=49371 --- telepathy-glib/channel-contacts.c | 51 ++++++++++++++++++++++++++ telepathy-glib/channel-group.c | 72 ------------------------------------- telepathy-glib/channel.c | 4 +-- telepathy-glib/channel.h | 4 +-- 4 files changed, 55 insertions(+), 76 deletions(-) diff --git a/telepathy-glib/channel-contacts.c b/telepathy-glib/channel-contacts.c index 31f60ad..d214329 100644 --- a/telepathy-glib/channel-contacts.c +++ b/telepathy-glib/channel-contacts.c @@ -946,6 +946,34 @@ self_contact_changed_cb (TpChannel *self, } static void +group_flags_changed_cb (TpChannel *self, + guint added, + guint removed, + gpointer user_data, + GObject *weak_object) +{ + if (!self->priv->group_properties_retrieved) + return; + + DEBUG ("%p GroupFlagsChanged: +%u -%u", self, added, removed); + + added &= ~(self->priv->group_flags); + removed &= self->priv->group_flags; + + DEBUG ("%p GroupFlagsChanged (after filtering): +%u -%u", + self, added, removed); + + self->priv->group_flags |= added; + self->priv->group_flags &= ~removed; + + if (added != 0 || removed != 0) + { + g_object_notify ((GObject *) self, "group-flags"); + g_signal_emit_by_name (self, "group-flags-changed", added, removed); + } +} + +static void contacts_prepared_cb (GObject *object, GAsyncResult *res, gpointer user_data) @@ -1051,6 +1079,8 @@ got_group_properties_cb (TpProxy *proxy, DEBUG ("Received %u group properties", g_hash_table_size (asv)); self->priv->group_properties_retrieved = TRUE; + self->priv->group_flags = tp_asv_get_uint32 (asv, "GroupFlags", NULL); + identifiers = tp_asv_get_boxed (asv, "MemberIdentifiers", TP_HASH_TYPE_HANDLE_IDENTIFIER_MAP); @@ -1120,6 +1150,10 @@ _tp_channel_contacts_prepare_async (TpProxy *proxy, return; } + tp_cli_channel_interface_group_connect_to_group_flags_changed (self, + group_flags_changed_cb, NULL, NULL, NULL, &error); + g_assert_no_error (error); + tp_cli_channel_interface_group_connect_to_self_contact_changed (self, self_contact_changed_cb, NULL, NULL, NULL, &error); g_assert_no_error (error); @@ -1141,6 +1175,23 @@ _tp_channel_contacts_prepare_async (TpProxy *proxy, } /** + * tp_channel_group_get_flags: + * @self: a channel + * + * + * + * Returns: the value of #TpChannel:group-flags + * Since: 0.UNRELEASED + */ +TpChannelGroupFlags +tp_channel_group_get_flags (TpChannel *self) +{ + g_return_val_if_fail (TP_IS_CHANNEL (self), 0); + + return self->priv->group_flags; +} + +/** * tp_channel_group_get_self_contact: * @self: a channel * diff --git a/telepathy-glib/channel-group.c b/telepathy-glib/channel-group.c index e3e2737..dd28426 100644 --- a/telepathy-glib/channel-group.c +++ b/telepathy-glib/channel-group.c @@ -95,26 +95,6 @@ tp_channel_group_get_self_handle (TpChannel *self) return self->priv->group_self_handle; } - -/** - * tp_channel_group_get_flags: - * @self: a channel - * - * Return the #TpChannel:group-flags property (see the description - * of that property for notes on validity). - * - * Returns: the group flags, or 0 - * Since: 0.7.12 - */ -TpChannelGroupFlags -tp_channel_group_get_flags (TpChannel *self) -{ - g_return_val_if_fail (TP_IS_CHANNEL (self), 0); - - return self->priv->group_flags; -} - - /** * tp_channel_group_get_members: * @self: a channel @@ -363,22 +343,6 @@ tp_channel_group_self_handle_changed_cb (TpChannel *self, } static void -_got_initial_group_flags (TpChannel *self, - TpChannelGroupFlags flags) -{ - TpChannelPrivate *priv = self->priv; - - g_assert (priv->group_flags == 0); - - DEBUG ("Initial GroupFlags: %u", flags); - priv->group_flags = flags; - priv->have_group_flags = TRUE; - - if (flags != 0) - g_object_notify ((GObject *) self, "group-flags"); -} - -static void tp_channel_group_self_contact_changed_cb (TpChannel *self, guint self_handle, const gchar *identifier, @@ -554,9 +518,6 @@ tp_channel_got_group_properties_cb (TpProxy *proxy, DEBUG ("Received %u group properties", g_hash_table_size (asv)); - _got_initial_group_flags (self, - tp_asv_get_uint32 (asv, "GroupFlags", NULL)); - tp_channel_group_self_handle_changed_cb (self, tp_asv_get_uint32 (asv, "SelfHandle", NULL), NULL, NULL); @@ -787,33 +748,6 @@ tp_channel_handle_owners_changed_cb (TpChannel *self, } -static void -tp_channel_group_flags_changed_cb (TpChannel *self, - guint added, - guint removed, - gpointer unused G_GNUC_UNUSED, - GObject *unused_object G_GNUC_UNUSED) -{ - if (self->priv->have_group_flags) - { - DEBUG ("%p GroupFlagsChanged: +%u -%u", self, added, removed); - - added &= ~(self->priv->group_flags); - removed &= self->priv->group_flags; - - DEBUG ("%p GroupFlagsChanged (after filtering): +%u -%u", - self, added, removed); - - self->priv->group_flags |= added; - self->priv->group_flags &= ~removed; - - if (added != 0 || removed != 0) - { - g_object_notify ((GObject *) self, "group-flags"); - g_signal_emit_by_name (self, "group-flags-changed", added, removed); - } - } -} void _tp_channel_get_group_properties (TpChannel *self) @@ -851,12 +785,6 @@ _tp_channel_get_group_properties (TpChannel *self) if (sc == NULL) DIE ("MembersChanged"); - sc = tp_cli_channel_interface_group_connect_to_group_flags_changed (self, - tp_channel_group_flags_changed_cb, NULL, NULL, NULL, &error); - - if (sc == NULL) - DIE ("GroupFlagsChanged"); - sc = tp_cli_channel_interface_group_connect_to_self_contact_changed (self, tp_channel_group_self_contact_changed_cb, NULL, NULL, NULL, &error); diff --git a/telepathy-glib/channel.c b/telepathy-glib/channel.c index bd8fe87..1589eb1 100644 --- a/telepathy-glib/channel.c +++ b/telepathy-glib/channel.c @@ -1411,7 +1411,7 @@ tp_channel_class_init (TpChannelClass *klass) /** * TpChannel:group-flags: * - * If the %TP_CHANNEL_FEATURE_GROUP feature has been prepared successfully, + * If the %TP_CHANNEL_FEATURE_CONTACTS feature has been prepared successfully, * #TpChannelGroupFlags indicating the capabilities and behaviour of that * group. * @@ -1420,7 +1420,7 @@ tp_channel_class_init (TpChannelClass *klass) * Change notification is via notify::group-flags or * TpChannel::group-flags-changed. * - * Since: 0.7.12 + * Since: 0.UNRELEASED */ param_spec = g_param_spec_uint ("group-flags", "Group.GroupFlags", "0 if not a group", 0, G_MAXUINT32, 0, diff --git a/telepathy-glib/channel.h b/telepathy-glib/channel.h index 73da1ab..cdc90ee 100644 --- a/telepathy-glib/channel.h +++ b/telepathy-glib/channel.h @@ -136,8 +136,6 @@ TpContact *tp_channel_get_initiator_contact (TpChannel *self); tp_channel_get_feature_quark_group () GQuark tp_channel_get_feature_quark_group (void) G_GNUC_CONST; -TpChannelGroupFlags tp_channel_group_get_flags (TpChannel *self); - #ifndef TP_DISABLE_DEPRECATED _TP_DEPRECATED_IN_0_20_FOR (tp_channel_group_get_self_contact) TpHandle tp_channel_group_get_self_handle (TpChannel *self); @@ -176,6 +174,8 @@ gboolean tp_channel_join_finish (TpChannel *self, _TP_AVAILABLE_IN_0_16 GQuark tp_channel_get_feature_quark_contacts (void) G_GNUC_CONST; +TpChannelGroupFlags tp_channel_group_get_flags (TpChannel *self); + _TP_AVAILABLE_IN_0_16 TpContact *tp_channel_group_get_self_contact (TpChannel *self); _TP_AVAILABLE_IN_0_16 -- 1.7.9.5