empathy r793 - trunk/libempathy
- From: xclaesse svn gnome org
- To: svn-commits-list gnome org
- Subject: empathy r793 - trunk/libempathy
- Date: Fri, 14 Mar 2008 13:05:46 +0000 (GMT)
Author: xclaesse
Date: Fri Mar 14 13:05:46 2008
New Revision: 793
URL: http://svn.gnome.org/viewvc/empathy?rev=793&view=rev
Log:
Wait for the factory to be ready before getting members
Modified:
trunk/libempathy/empathy-tp-group.c
Modified: trunk/libempathy/empathy-tp-group.c
==============================================================================
--- trunk/libempathy/empathy-tp-group.c (original)
+++ trunk/libempathy/empathy-tp-group.c Fri Mar 14 13:05:46 2008
@@ -457,14 +457,44 @@
}
static void
+tp_group_ready_cb (EmpathyTpGroup *group)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+ EmpathyTpContactFactory *tp_factory;
+
+ empathy_debug (DEBUG_DOMAIN, "Factory ready, we can get members %p %p", group, priv);
+
+ tp_factory = empathy_contact_factory_get_tp_factory (priv->factory, priv->account);
+ g_signal_handlers_disconnect_by_func (tp_factory, tp_group_ready_cb, group);
+
+ dbus_g_proxy_connect_signal (priv->group_iface, "MembersChanged",
+ G_CALLBACK (tp_group_members_changed_cb),
+ group, NULL);
+
+ tp_chan_iface_group_get_members_async (priv->group_iface,
+ tp_group_get_members_cb,
+ g_object_ref (group));
+ tp_chan_iface_group_get_local_pending_members_with_info_async (priv->group_iface,
+ tp_group_get_local_pending_cb,
+ g_object_ref (group));
+ tp_chan_iface_group_get_remote_pending_members_async (priv->group_iface,
+ tp_group_get_remote_pending_cb,
+ g_object_ref (group));
+}
+
+static void
tp_group_finalize (GObject *object)
{
- EmpathyTpGroupPriv *priv = GET_PRIV (object);
+ EmpathyTpGroupPriv *priv = GET_PRIV (object);
+ EmpathyTpContactFactory *tp_factory;
- empathy_debug (DEBUG_DOMAIN, "finalize: %p");
+ empathy_debug (DEBUG_DOMAIN, "finalize: %p", object);
tp_group_disconnect (EMPATHY_TP_GROUP (object));
+ tp_factory = empathy_contact_factory_get_tp_factory (priv->factory, priv->account);
+ g_signal_handlers_disconnect_by_func (tp_factory, tp_group_ready_cb, object);
+
if (priv->tp_chan) {
g_object_unref (priv->tp_chan);
}
@@ -557,10 +587,11 @@
empathy_tp_group_new (McAccount *account,
TpChan *tp_chan)
{
- EmpathyTpGroup *group;
- EmpathyTpGroupPriv *priv;
- DBusGProxy *group_iface;
- GError *error = NULL;
+ EmpathyTpGroup *group;
+ EmpathyTpGroupPriv *priv;
+ EmpathyTpContactFactory *tp_factory;
+ DBusGProxy *group_iface;
+ GError *error = NULL;
g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
g_return_val_if_fail (TELEPATHY_IS_CHAN (tp_chan), NULL);
@@ -586,9 +617,16 @@
g_clear_error (&error);
}
- dbus_g_proxy_connect_signal (priv->group_iface, "MembersChanged",
- G_CALLBACK (tp_group_members_changed_cb),
- group, NULL);
+ tp_factory = empathy_contact_factory_get_tp_factory (priv->factory,
+ priv->account);
+ if (empathy_tp_contact_factory_is_ready (tp_factory)) {
+ tp_group_ready_cb (group);
+ } else {
+ g_signal_connect_swapped (tp_factory, "notify::ready",
+ G_CALLBACK (tp_group_ready_cb),
+ group);
+ }
+
dbus_g_proxy_connect_signal (DBUS_G_PROXY (priv->tp_chan), "Closed",
G_CALLBACK (tp_group_closed_cb),
group, NULL);
@@ -596,16 +634,6 @@
G_CALLBACK (tp_group_destroy_cb),
group);
- tp_chan_iface_group_get_members_async (priv->group_iface,
- tp_group_get_members_cb,
- g_object_ref (group));
- tp_chan_iface_group_get_local_pending_members_with_info_async (priv->group_iface,
- tp_group_get_local_pending_cb,
- g_object_ref (group));
- tp_chan_iface_group_get_remote_pending_members_async (priv->group_iface,
- tp_group_get_remote_pending_cb,
- g_object_ref (group));
-
return group;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]