[telepathy-gabble/master] Search channels should only appear on the bus when ready

Will Thompson will.thompson at collabora.co.uk
Wed Aug 26 09:21:49 PDT 2009


---
 src/base-channel.c   |   35 ++++++++++++++++++-----------------
 src/base-channel.h   |    2 ++
 src/search-channel.c |    1 +
 3 files changed, 21 insertions(+), 17 deletions(-)

diff --git a/src/base-channel.c b/src/base-channel.c
index fb2dd4a..280b486 100644
--- a/src/base-channel.c
+++ b/src/base-channel.c
@@ -94,6 +94,24 @@ G_DEFINE_TYPE_WITH_CODE (GabbleBaseChannel, gabble_base_channel,
     G_IMPLEMENT_INTERFACE (TP_TYPE_EXPORTABLE_CHANNEL, NULL);
     )
 
+/**
+ * gabble_base_channel_register:
+ * @chan: a channel
+ *
+ * Make the channel appear on the bus.  @chan->object_path must have been set
+ * to a valid path, which must not already be in use as another object's path.
+ */
+void
+gabble_base_channel_register (GabbleBaseChannel *chan)
+{
+  DBusGConnection *bus = tp_get_bus ();
+
+  g_assert (chan->object_path != NULL);
+
+  dbus_g_connection_register_g_object (bus, chan->object_path,
+      (GObject *) chan);
+}
+
 static void
 gabble_base_channel_init (GabbleBaseChannel *self)
 {
@@ -137,22 +155,6 @@ gabble_base_channel_constructor (GType type,
 }
 
 static void
-gabble_base_channel_constructed (GObject *obj)
-{
-  GabbleBaseChannel *chan = GABBLE_BASE_CHANNEL (obj);
-  GObjectClass *object_class = G_OBJECT_CLASS (gabble_base_channel_parent_class);
-  DBusGConnection *bus;
-
-  if (object_class->constructed != NULL)
-    object_class->constructed (obj);
-
-  g_assert (chan->object_path != NULL);
-
-  bus = tp_get_bus ();
-  dbus_g_connection_register_g_object (bus, chan->object_path, obj);
-}
-
-static void
 gabble_base_channel_get_property (GObject *object,
                                   guint property_id,
                                   GValue *value,
@@ -347,7 +349,6 @@ gabble_base_channel_class_init (GabbleBaseChannelClass *gabble_base_channel_clas
       sizeof (GabbleBaseChannelPrivate));
 
   object_class->constructor = gabble_base_channel_constructor;
-  object_class->constructed = gabble_base_channel_constructed;
 
   object_class->get_property = gabble_base_channel_get_property;
   object_class->set_property = gabble_base_channel_set_property;
diff --git a/src/base-channel.h b/src/base-channel.h
index a6f9ab1..c5b6c40 100644
--- a/src/base-channel.h
+++ b/src/base-channel.h
@@ -58,6 +58,8 @@ struct _GabbleBaseChannel {
     GabbleBaseChannelPrivate *priv;
 };
 
+void gabble_base_channel_register (GabbleBaseChannel *chan);
+
 GType gabble_base_channel_get_type (void);
 
 /* TYPE MACROS */
diff --git a/src/search-channel.c b/src/search-channel.c
index 64e0a4f..42a8383 100644
--- a/src/search-channel.c
+++ b/src/search-channel.c
@@ -103,6 +103,7 @@ become_ready (GabbleSearchChannel *chan)
   g_assert (chan->base.closed);
 
   chan->base.closed = FALSE;
+  gabble_base_channel_register ((GabbleBaseChannel *) chan);
   g_signal_emit (chan, signals[READY_OR_NOT], 0, 0, 0, NULL);
 }
 
-- 
1.5.6.5




More information about the telepathy-commits mailing list