diff options
author | Xavier Claessens <xclaesse@src.gnome.org> | 2008-02-16 05:29:18 +0800 |
---|---|---|
committer | Xavier Claessens <xclaesse@src.gnome.org> | 2008-02-16 05:29:18 +0800 |
commit | fefd48ada4f353f364ff7ea1d1bf661a7e84180d (patch) | |
tree | 5bb1a9607d6dd7465007e1c586ed257f45197ce8 | |
parent | 4a1cece4951911afba0456ee23730328f635d1b3 (diff) | |
download | gsoc2013-empathy-fefd48ada4f353f364ff7ea1d1bf661a7e84180d.tar gsoc2013-empathy-fefd48ada4f353f364ff7ea1d1bf661a7e84180d.tar.gz gsoc2013-empathy-fefd48ada4f353f364ff7ea1d1bf661a7e84180d.tar.bz2 gsoc2013-empathy-fefd48ada4f353f364ff7ea1d1bf661a7e84180d.tar.lz gsoc2013-empathy-fefd48ada4f353f364ff7ea1d1bf661a7e84180d.tar.xz gsoc2013-empathy-fefd48ada4f353f364ff7ea1d1bf661a7e84180d.tar.zst gsoc2013-empathy-fefd48ada4f353f364ff7ea1d1bf661a7e84180d.zip |
Merge commit 'sjoerd/master'
svn path=/trunk/; revision=635
-rw-r--r-- | libempathy/empathy-tp-call.c | 19 | ||||
-rw-r--r-- | libempathy/empathy-utils.c | 38 |
2 files changed, 49 insertions, 8 deletions
diff --git a/libempathy/empathy-tp-call.c b/libempathy/empathy-tp-call.c index c9da17491..b72e3877e 100644 --- a/libempathy/empathy-tp-call.c +++ b/libempathy/empathy-tp-call.c @@ -542,6 +542,13 @@ tp_call_finalize (GObject *object) g_slice_free (EmpathyTpCallStream, priv->audio); g_slice_free (EmpathyTpCallStream, priv->video); g_object_unref (priv->group); + + if (priv->connection != NULL) + g_object_unref (priv->connection); + + if (priv->channel != NULL) + g_object_unref (priv->channel); + if (priv->contact) { g_object_unref (priv->contact); @@ -561,13 +568,15 @@ tp_call_set_property (GObject *object, switch (prop_id) { case PROP_CONNECTION: - priv->connection = g_value_get_object (value); + priv->connection = g_value_dup_object (value); break; case PROP_CHANNEL: - priv->channel = g_value_get_object (value); + priv->channel = g_value_dup_object (value); break; case PROP_CONTACT: - priv->contact = g_value_get_object (value); + /* FIXME should this one be writable in the first place ? */ + g_assert (priv->contact == NULL); + priv->contact = g_value_dup_object (value); break; case PROP_IS_INCOMING: priv->is_incoming = g_value_get_boolean (value); @@ -653,12 +662,12 @@ empathy_tp_call_class_init (EmpathyTpCallClass *klass) g_object_class_install_property (object_class, PROP_CONNECTION, g_param_spec_object ("connection", "connection", "connection", TELEPATHY_CONN_TYPE, - G_PARAM_CONSTRUCT | G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); g_object_class_install_property (object_class, PROP_CHANNEL, g_param_spec_object ("channel", "channel", "channel", TELEPATHY_CHAN_TYPE, - G_PARAM_CONSTRUCT | G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); g_object_class_install_property (object_class, PROP_CONTACT, g_param_spec_object ("contact", "Call contact", "Call contact", diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c index 070e45a0e..7548c58fb 100644 --- a/libempathy/empathy-utils.c +++ b/libempathy/empathy-utils.c @@ -463,6 +463,28 @@ empathy_call_with_contact (EmpathyContact *contact) #endif } +#ifdef HAVE_VOIP +struct empathy_call_cb_user_data { + guint handler; + GObject *factory; +}; + +static void +empathy_call_with_contact_id_got_handle_cb (EmpathyContact *contact, + GParamSpec *property, gpointer user_data) { + + struct empathy_call_cb_user_data *ud = + (struct empathy_call_cb_user_data *) user_data; + + g_signal_handler_disconnect (contact, ud->handler); + + empathy_call_with_contact (contact); + g_object_unref (ud->factory); + g_object_unref (contact); + g_free (ud); +} +#endif + void empathy_call_with_contact_id (McAccount *account, const gchar *contact_id) { @@ -472,9 +494,19 @@ empathy_call_with_contact_id (McAccount *account, const gchar *contact_id) factory = empathy_contact_factory_new (); contact = empathy_contact_factory_get_from_id (factory, account, contact_id); - empathy_call_with_contact (contact); - g_object_unref (contact); - g_object_unref (factory); + + if (empathy_contact_get_handle (contact) != 0) { + empathy_call_with_contact (contact); + g_object_unref (contact); + g_object_unref (factory); + } else { + struct empathy_call_cb_user_data *ud; + ud = g_malloc0 (sizeof (struct empathy_call_cb_user_data)); + ud->factory = G_OBJECT (factory); + ud->handler = g_signal_connect (G_OBJECT (contact), "notify::handle", + G_CALLBACK (empathy_call_with_contact_id_got_handle_cb), ud); + } + #endif } |