summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/muc-channel.c15
-rw-r--r--src/muc-channel.h3
-rw-r--r--src/muc-manager.c32
3 files changed, 29 insertions, 21 deletions
diff --git a/src/muc-channel.c b/src/muc-channel.c
index d403a851..6af58488 100644
--- a/src/muc-channel.c
+++ b/src/muc-channel.c
@@ -1298,3 +1298,18 @@ salut_muc_channel_tube_request (SalutMucChannel *self,
return tube;
}
+void
+salut_muc_channel_foreach (SalutMucChannel *self,
+ TpExportableChannelFunc func,
+ gpointer user_data)
+{
+ SalutMucChannelPrivate *priv = self->priv;
+ GHashTableIter iter;
+ gpointer value;
+
+ g_hash_table_iter_init (&iter, priv->tubes);
+ while (g_hash_table_iter_next (&iter, NULL, &value))
+ {
+ func (TP_EXPORTABLE_CHANNEL (value), user_data);
+ }
+}
diff --git a/src/muc-channel.h b/src/muc-channel.h
index 79787af4..47abcb5f 100644
--- a/src/muc-channel.h
+++ b/src/muc-channel.h
@@ -93,6 +93,9 @@ gboolean salut_muc_channel_add_member (GObject *iface, TpHandle handle,
SalutTubeIface * salut_muc_channel_tube_request (SalutMucChannel *self,
GHashTable *request_properties);
+void salut_muc_channel_foreach (SalutMucChannel *self,
+ TpExportableChannelFunc func, gpointer user_data);
+
G_END_DECLS
#endif /* #ifndef __SALUT_MUC_CHANNEL_H__*/
diff --git a/src/muc-manager.c b/src/muc-manager.c
index 6e0b4b43..c6be2140 100644
--- a/src/muc-manager.c
+++ b/src/muc-manager.c
@@ -271,23 +271,6 @@ salut_muc_manager_dispose (GObject *object)
/* Channel Manager interface */
-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);
-
- data->foreach (channel, data->user_data);
-}
-
static void
salut_muc_manager_foreach_channel (TpChannelManager *iface,
TpExportableChannelFunc foreach,
@@ -295,14 +278,21 @@ salut_muc_manager_foreach_channel (TpChannelManager *iface,
{
SalutMucManager *fac = SALUT_MUC_MANAGER (iface);
SalutMucManagerPrivate *priv = SALUT_MUC_MANAGER_GET_PRIVATE (fac);
- 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))
+ {
+ TpExportableChannel *chan = TP_EXPORTABLE_CHANNEL (value);
- g_hash_table_foreach (priv->text_channels, _foreach_slave, &data);
+ /* do the text channel */
+ foreach (chan, user_data);
+
+ /* now its tube channels */
+ salut_muc_channel_foreach (SALUT_MUC_CHANNEL (chan),
+ foreach, user_data);
+ }
g_hash_table_iter_init (&iter, priv->tubes_channels);
while (g_hash_table_iter_next (&iter, NULL, &value))