summaryrefslogtreecommitdiff
path: root/src/muc-factory.c
diff options
context:
space:
mode:
authorJonny Lamb <jonny.lamb@collabora.co.uk>2012-03-26 17:35:17 -0400
committerJonny Lamb <jonny.lamb@collabora.co.uk>2012-07-20 12:19:13 +0100
commitf5b269b50df5b859fee0c168deafa97b107d9ad7 (patch)
treeb2c95e289dedb1bb2627a02507b6616a400df0e6 /src/muc-factory.c
parent2aea52346a9c1a4adc6e373888298d9a6c50e52a (diff)
downloadtelepathy-gabble-f5b269b50df5b859fee0c168deafa97b107d9ad7.tar.gz
muc-factory: fix listing of channels
Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
Diffstat (limited to 'src/muc-factory.c')
-rw-r--r--src/muc-factory.c53
1 files changed, 15 insertions, 38 deletions
diff --git a/src/muc-factory.c b/src/muc-factory.c
index 9b01244bc..53389379f 100644
--- a/src/muc-factory.c
+++ b/src/muc-factory.c
@@ -951,39 +951,6 @@ gabble_muc_factory_constructor (GType type, guint n_props,
return obj;
}
-
-struct _ForeachData
-{
- TpExportableChannelFunc foreach;
- gpointer user_data;
-};
-
-static void
-_foreach_slave (gpointer key, gpointer value, gpointer user_data)
-{
- struct _ForeachData *data = (struct _ForeachData *) user_data;
- TpExportableChannel *channel = TP_EXPORTABLE_CHANNEL (value);
- GabbleMucChannel *gmuc = GABBLE_MUC_CHANNEL (value);
- GabbleTubesChannel *tube = NULL;
-
- data->foreach (channel, data->user_data);
-
- g_object_get (gmuc, "tube", &tube, NULL);
-
- if (tube != NULL)
- {
- channel = TP_EXPORTABLE_CHANNEL (tube);
- data->foreach (channel, data->user_data);
- gabble_tubes_channel_foreach (tube, data->foreach, data->user_data);
- g_object_unref (tube);
- }
-
-#ifdef ENABLE_VOIP
- g_list_foreach (gabble_muc_channel_get_call_channels (gmuc),
- (GFunc) data->foreach, data->user_data);
-#endif
-}
-
static void
gabble_muc_factory_foreach_channel (TpChannelManager *manager,
TpExportableChannelFunc foreach,
@@ -991,14 +958,24 @@ gabble_muc_factory_foreach_channel (TpChannelManager *manager,
{
GabbleMucFactory *fac = GABBLE_MUC_FACTORY (manager);
GabbleMucFactoryPrivate *priv = fac->priv;
- struct _ForeachData data;
+ GHashTableIter iter;
+ gpointer value;
- data.user_data = user_data;
- data.foreach = foreach;
+ g_hash_table_iter_init (&iter, priv->text_channels);
+ while (g_hash_table_iter_next (&iter, NULL, &value))
+ {
+ GabbleMucChannel *gmuc = GABBLE_MUC_CHANNEL (value);
- g_hash_table_foreach (priv->text_channels, _foreach_slave, &data);
-}
+ foreach (TP_EXPORTABLE_CHANNEL (gmuc), user_data);
+
+ gabble_muc_channel_foreach_tubes (gmuc, foreach, user_data);
+#ifdef ENABLE_VOIP
+ g_list_foreach (gabble_muc_channel_get_call_channels (gmuc),
+ (GFunc) foreach, user_data);
+#endif
+ }
+}
/**
* ensure_muc_channel: