[Telepathy-commits] [telepathy-glib/master] Emit group-members-changed-detailed in response to MembersChanged

Will Thompson will.thompson at collabora.co.uk
Mon Jan 5 07:16:22 PST 2009


The details dict is synthesised from the message, actor and reason in
the signal.
---
 telepathy-glib/channel-group.c |   33 +++++++++++++++++++++++++++++++--
 1 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/telepathy-glib/channel-group.c b/telepathy-glib/channel-group.c
index f40a9e7..21e77fe 100644
--- a/telepathy-glib/channel-group.c
+++ b/telepathy-glib/channel-group.c
@@ -742,7 +742,8 @@ handle_members_changed (TpChannel *self,
                         const GArray *local_pending,
                         const GArray *remote_pending,
                         guint actor,
-                        guint reason)
+                        guint reason,
+                        GHashTable *details)
 {
   guint i;
 
@@ -828,6 +829,8 @@ handle_members_changed (TpChannel *self,
 
   g_signal_emit_by_name (self, "group-members-changed", message,
       added, removed, local_pending, remote_pending, actor, reason);
+  g_signal_emit_by_name (self, "group-members-changed-detailed", added,
+      removed, local_pending, remote_pending, details);
 }
 
 
@@ -843,14 +846,40 @@ tp_channel_group_members_changed_cb (TpChannel *self,
                                      gpointer unused G_GNUC_UNUSED,
                                      GObject *unused_object G_GNUC_UNUSED)
 {
+  GHashTable *details = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
+      (GDestroyNotify) tp_g_value_slice_free);
+  GValue *v;
 
   DEBUG ("%p MembersChanged: added %u, removed %u, "
       "moved %u to LP and %u to RP, actor %u, reason %u, message %s",
       self, added->len, removed->len, local_pending->len, remote_pending->len,
       actor, reason, message);
 
+  if (actor != 0)
+    {
+      v = tp_g_value_slice_new (G_TYPE_UINT);
+      g_value_set_uint (v, actor);
+      g_hash_table_insert (details, "actor", v);
+    }
+
+  if (reason != TP_CHANNEL_GROUP_CHANGE_REASON_NONE)
+    {
+      v = tp_g_value_slice_new (G_TYPE_UINT);
+      g_value_set_uint (v, reason);
+      g_hash_table_insert (details, "change-reason", v);
+    }
+
+  if (*message != '\0')
+    {
+      v = tp_g_value_slice_new (G_TYPE_STRING);
+      g_value_set_string (v, message);
+      g_hash_table_insert (details, "message", v);
+    }
+
   handle_members_changed (self, message, added, removed, local_pending,
-      remote_pending, actor, reason);
+      remote_pending, actor, reason, details);
+
+  g_hash_table_unref (details);
 }
 
 
-- 
1.5.6.5




More information about the Telepathy-commits mailing list