diff options
author | Jonny Lamb <jonny.lamb@collabora.co.uk> | 2012-03-26 17:35:17 -0400 |
---|---|---|
committer | Jonny Lamb <jonny.lamb@collabora.co.uk> | 2012-07-20 12:19:13 +0100 |
commit | f5b269b50df5b859fee0c168deafa97b107d9ad7 (patch) | |
tree | b2c95e289dedb1bb2627a02507b6616a400df0e6 /src/muc-factory.c | |
parent | 2aea52346a9c1a4adc6e373888298d9a6c50e52a (diff) | |
download | telepathy-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.c | 53 |
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: |