empathy r635 - trunk/libempathy



Author: xclaesse
Date: Fri Feb 15 21:29:18 2008
New Revision: 635
URL: http://svn.gnome.org/viewvc/empathy?rev=635&view=rev

Log:
Merge commit 'sjoerd/master'


Modified:
   trunk/libempathy/empathy-tp-call.c
   trunk/libempathy/empathy-utils.c

Modified: trunk/libempathy/empathy-tp-call.c
==============================================================================
--- trunk/libempathy/empathy-tp-call.c	(original)
+++ trunk/libempathy/empathy-tp-call.c	Fri Feb 15 21:29:18 2008
@@ -542,6 +542,13 @@
   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 @@
   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 @@
   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",

Modified: trunk/libempathy/empathy-utils.c
==============================================================================
--- trunk/libempathy/empathy-utils.c	(original)
+++ trunk/libempathy/empathy-utils.c	Fri Feb 15 21:29:18 2008
@@ -463,6 +463,28 @@
 #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 @@
 
 	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
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]