summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJonny Lamb <jonny.lamb@collabora.co.uk>2012-05-29 13:24:09 +0100
committerJonny Lamb <jonny.lamb@collabora.co.uk>2012-05-31 13:52:39 +0100
commit4b1bccbb832805a55722f92d9cdb8ff3aa45d75d (patch)
tree3f4f9fdc1538bda4b435dbaa7d6ff1d2a0a9c053 /src
parentf60a51b46c64e5db8469cd9e89a7107de4454be3 (diff)
downloadtelepathy-salut-4b1bccbb832805a55722f92d9cdb8ff3aa45d75d.tar.gz
muc-channel: do foreach over muc channel tube channels again
These have been stored in the Tubes channel before. No longer! Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
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))