[telepathy-gabble/master] Handle the fill-presence signal

Sjoerd Simons sjoerd.simons at collabora.co.uk
Mon Jan 4 04:09:40 PST 2010


---
 src/muc-channel.c |   23 ++++++++++++++++++++---
 1 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/src/muc-channel.c b/src/muc-channel.c
index fbb6541..91cea8e 100644
--- a/src/muc-channel.c
+++ b/src/muc-channel.c
@@ -275,6 +275,10 @@ static TpHandle create_room_identity (GabbleMucChannel *)
 
 /*  signatures for presence handlers */
 
+static void handle_fill_presence (WockyMuc *muc,
+    WockyXmppStanza *stanza,
+    gpointer user_data);
+
 static void handle_renamed (GObject *source,
     WockyXmppStanza *stanza,
     GHashTable *code,
@@ -416,6 +420,9 @@ gabble_muc_channel_constructor (GType type, guint n_props,
     g_signal_connect (wmuc, "left",        (GCallback) handle_left,     self);
     g_signal_connect (wmuc, "error",       (GCallback) handle_error,    self);
 
+    g_signal_connect (wmuc, "fill-presence", G_CALLBACK (handle_fill_presence),
+        self);
+
     /* message handler(s) (just one needed so far) */
     g_signal_connect (wmuc, "message",      (GCallback) handle_message, self);
     g_signal_connect (wmuc, "message-error",(GCallback) handle_errmsg,  self);
@@ -2134,6 +2141,19 @@ handle_perms (GObject *source,
   handle_tube_presence (gmuc, myself, stanza);
 }
 
+static void
+handle_fill_presence (WockyMuc *muc,
+    WockyXmppStanza *stanza,
+    gpointer user_data)
+{
+  GabbleMucChannel *self = GABBLE_MUC_CHANNEL (user_data);
+  GabbleMucChannelPrivate *priv = GABBLE_MUC_CHANNEL_GET_PRIVATE (self);
+
+  gabble_presence_add_status_and_vcard (priv->conn->self_presence, stanza);
+
+  g_signal_emit (self, signals[PRE_PRESENCE], 0, (LmMessage *) stanza);
+}
+
 /* connect to wocky-muc:SIG_NICK_CHANGE, which we will receive when the *
  * MUC informs us our nick has been changed for some reason             */
 static void
@@ -3621,9 +3641,6 @@ gabble_muc_channel_send_presence (GabbleMucChannel *self,
 
   stanza = wocky_muc_create_presence (priv->wmuc,
       WOCKY_STANZA_SUB_TYPE_NONE, NULL, NULL);
-  gabble_presence_add_status_and_vcard (priv->conn->self_presence, stanza);
-
-  g_signal_emit (self, signals[PRE_PRESENCE], 0, (LmMessage *) stanza);
   result = _gabble_connection_send (priv->conn, (LmMessage *) stanza, error);
 
   g_object_unref (stanza);
-- 
1.5.6.5




More information about the telepathy-commits mailing list