[telepathy-gabble/master] The factory should emit new channels, not the text channel

Sjoerd Simons sjoerd.simons at collabora.co.uk
Tue Jan 5 10:04:04 PST 2010


---
 src/muc-channel.c |   17 ++++++++++++-----
 src/muc-factory.c |   26 ++++++++++++++++++++++++++
 2 files changed, 38 insertions(+), 5 deletions(-)

diff --git a/src/muc-channel.c b/src/muc-channel.c
index 91cea8e..1606620 100644
--- a/src/muc-channel.c
+++ b/src/muc-channel.c
@@ -101,6 +101,7 @@ enum
     PRE_INVITE,
     CONTACT_JOIN,
     PRE_PRESENCE,
+    NEW_TUBE,
     LAST_SIGNAL
 };
 
@@ -1167,6 +1168,14 @@ gabble_muc_channel_class_init (GabbleMucChannelClass *gabble_muc_channel_class)
                   g_cclosure_marshal_VOID__POINTER,
                   G_TYPE_NONE, 1, G_TYPE_POINTER);
 
+  signals[NEW_TUBE] = g_signal_new ("new-tube",
+                  G_OBJECT_CLASS_TYPE (gabble_muc_channel_class),
+                  G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
+                  0,
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__OBJECT,
+                  G_TYPE_NONE, 1, GABBLE_TYPE_TUBES_CHANNEL);
+
   tp_properties_mixin_class_init (object_class,
                                       G_STRUCT_OFFSET (GabbleMucChannelClass,
                                         properties_class),
@@ -1419,6 +1428,8 @@ close_channel (GabbleMucChannel *chan, const gchar *reason,
 
   priv->closed = TRUE;
 
+  gabble_muc_channel_close_tube (chan);
+
   /* Remove us from member list */
   set = tp_intset_new ();
   tp_intset_add (set, TP_GROUP_MIXIN (chan)->self_handle);
@@ -1892,9 +1903,6 @@ tube_closed_cb (GabbleTubesChannel *chan, gpointer user_data)
   GabbleMucChannelPrivate *priv = GABBLE_MUC_CHANNEL_GET_PRIVATE (gmuc);
   TpHandle room;
 
-  tp_channel_manager_emit_channel_closed_for_object (gmuc,
-      TP_EXPORTABLE_CHANNEL (chan));
-
   if (priv->tube != NULL)
     {
       priv->tube = NULL;
@@ -1932,8 +1940,7 @@ new_tube (GabbleMucChannel *gmuc,
 
   g_signal_connect (priv->tube, "closed", (GCallback) tube_closed_cb, gmuc);
 
-  tp_channel_manager_emit_new_channel (gmuc,
-      TP_EXPORTABLE_CHANNEL (priv->tube), NULL);
+  g_signal_emit (gmuc, signals[NEW_TUBE], 0 , priv->tube);
 
   g_free (object_path);
 
diff --git a/src/muc-factory.c b/src/muc-factory.c
index eda7719..93c6e00 100644
--- a/src/muc-factory.c
+++ b/src/muc-factory.c
@@ -383,6 +383,31 @@ muc_join_error_cb (GabbleMucChannel *chan,
     }
 }
 
+static void
+muc_channel_tube_closed_cb (GabbleTubesChannel *chan,
+    gpointer user_data)
+{
+  GabbleMucFactory *fac = GABBLE_MUC_FACTORY (user_data);
+
+  tp_channel_manager_emit_channel_closed_for_object (fac,
+      TP_EXPORTABLE_CHANNEL (chan));
+}
+
+
+static void
+muc_channel_new_tube (GabbleMucChannel *channel,
+    GabbleTubesChannel *tube,
+    gpointer user_data)
+{
+  GabbleMucFactory *fac = GABBLE_MUC_FACTORY (user_data);
+
+  tp_channel_manager_emit_new_channel (fac,
+      TP_EXPORTABLE_CHANNEL (tube), NULL);
+
+  g_signal_connect (tube, "closed",
+    G_CALLBACK (muc_channel_tube_closed_cb), fac);
+}
+
 /**
  * new_muc_channel
  */
@@ -418,6 +443,7 @@ new_muc_channel (GabbleMucFactory *fac,
        NULL);
 
   g_signal_connect (chan, "closed", (GCallback) muc_channel_closed_cb, fac);
+  g_signal_connect (chan, "new-tube", (GCallback) muc_channel_new_tube, fac);
 
   g_hash_table_insert (priv->text_channels, GUINT_TO_POINTER (handle), chan);
 
-- 
1.5.6.5




More information about the telepathy-commits mailing list