[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