diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/muc-channel.c | 15 | ||||
-rw-r--r-- | src/muc-channel.h | 3 | ||||
-rw-r--r-- | src/muc-manager.c | 32 |
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)) |