aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy/empathy-tp-chat.c
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2013-01-08 19:38:01 +0800
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2013-01-08 19:38:01 +0800
commit5dd66017b88e4a0d248ff75e26f12c45a959a7fa (patch)
tree3c615b376a4c3cdda96b86b5b8ff1d15644b51f2 /libempathy/empathy-tp-chat.c
parent7fd0b32b8fb6ad3fe29c46ed2afe2bdd25d6687e (diff)
parentd95a09bded20a2cccf0847f4663fd075536399ca (diff)
downloadgsoc2013-empathy-5dd66017b88e4a0d248ff75e26f12c45a959a7fa.tar
gsoc2013-empathy-5dd66017b88e4a0d248ff75e26f12c45a959a7fa.tar.gz
gsoc2013-empathy-5dd66017b88e4a0d248ff75e26f12c45a959a7fa.tar.bz2
gsoc2013-empathy-5dd66017b88e4a0d248ff75e26f12c45a959a7fa.tar.lz
gsoc2013-empathy-5dd66017b88e4a0d248ff75e26f12c45a959a7fa.tar.xz
gsoc2013-empathy-5dd66017b88e4a0d248ff75e26f12c45a959a7fa.tar.zst
gsoc2013-empathy-5dd66017b88e4a0d248ff75e26f12c45a959a7fa.zip
Merge branch 'gnome-3-6'
Diffstat (limited to 'libempathy/empathy-tp-chat.c')
-rw-r--r--libempathy/empathy-tp-chat.c58
1 files changed, 48 insertions, 10 deletions
diff --git a/libempathy/empathy-tp-chat.c b/libempathy/empathy-tp-chat.c
index 4857243c1..42ab0836e 100644
--- a/libempathy/empathy-tp-chat.c
+++ b/libempathy/empathy-tp-chat.c
@@ -1298,20 +1298,12 @@ password_feature_prepare_cb (GObject *source,
}
static void
-tp_chat_prepare_ready_async (TpProxy *proxy,
- const TpProxyFeature *feature,
- GAsyncReadyCallback callback,
- gpointer user_data)
+continue_preparing (EmpathyTpChat *self)
{
- EmpathyTpChat *self = (EmpathyTpChat *) proxy;
- TpChannel *channel = (TpChannel *) proxy;
+ TpChannel *channel = (TpChannel *) self;
TpConnection *connection;
gboolean listen_for_dbus_properties_changed = FALSE;
- g_assert (self->priv->ready_result == NULL);
- self->priv->ready_result = g_simple_async_result_new (G_OBJECT (self),
- callback, user_data, tp_chat_prepare_ready_async);
-
connection = tp_channel_get_connection (channel);
if (tp_proxy_has_interface_by_id (self,
@@ -1436,3 +1428,49 @@ tp_chat_prepare_ready_async (TpProxy *proxy,
G_OBJECT (self), NULL);
}
}
+
+static void
+conn_connected_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ EmpathyTpChat *self = user_data;
+ GError *error = NULL;
+
+ if (!tp_proxy_prepare_finish (source, result, &error))
+ {
+ DEBUG ("Failed to prepare Connected: %s", error->message);
+ g_simple_async_result_take_error (self->priv->ready_result, error);
+ g_simple_async_result_complete (self->priv->ready_result);
+ tp_clear_object (&self->priv->ready_result);
+ return;
+ }
+
+ continue_preparing (self);
+}
+
+static void
+tp_chat_prepare_ready_async (TpProxy *proxy,
+ const TpProxyFeature *feature,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ EmpathyTpChat *self = (EmpathyTpChat *) proxy;
+ TpChannel *channel = (TpChannel *) proxy;
+ TpConnection *connection;
+ GQuark features[] = { TP_CONNECTION_FEATURE_CONNECTED, 0 };
+
+ g_assert (self->priv->ready_result == NULL);
+
+ self->priv->ready_result = g_simple_async_result_new (G_OBJECT (self),
+ callback, user_data, tp_chat_prepare_ready_async);
+
+ connection = tp_channel_get_connection (channel);
+
+ /* First we have to make sure that TP_CONNECTION_FEATURE_CONNECTED is
+ * prepared as we rely on TpConnection::self-contact
+ * in continue_preparing().
+ *
+ * It would be nice if tp-glib could do this for us: fdo#59126 */
+ tp_proxy_prepare_async (connection, features, conn_connected_cb, proxy);
+}