[telepathy-mission-control/master] McdAccount, McdConnection: push new avatars into the connection via a method call

Simon McVittie simon.mcvittie at collabora.co.uk
Wed Jun 3 03:12:25 PDT 2009


---
 src/mcd-account.c         |   18 ++++++------------
 src/mcd-connection-priv.h |    4 ++++
 src/mcd-connection.c      |   26 +++++++-------------------
 3 files changed, 17 insertions(+), 31 deletions(-)

diff --git a/src/mcd-account.c b/src/mcd-account.c
index c8f2141..bd72eda 100644
--- a/src/mcd-account.c
+++ b/src/mcd-account.c
@@ -160,7 +160,6 @@ enum
 {
     CONNECTION_STATUS_CHANGED,
     VALIDITY_CHANGED,
-    AVATAR_CHANGED,
     LAST_SIGNAL
 };
 
@@ -1888,15 +1887,7 @@ mcd_account_class_init (McdAccountClass * klass)
 		      NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN,
 		      G_TYPE_NONE, 1,
 		      G_TYPE_BOOLEAN);
-    _mcd_account_signals[AVATAR_CHANGED] =
-	g_signal_new ("mcd-avatar-changed",
-		      G_OBJECT_CLASS_TYPE (klass),
-		      G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
-		      0,
-		      NULL, NULL, _mcd_marshal_VOID__BOXED_STRING,
-		      G_TYPE_NONE, 2,
-		      dbus_g_type_get_collection ("GArray", G_TYPE_UCHAR),
-		      G_TYPE_STRING);
+
     _mcd_account_compat_class_init (klass);
     _mcd_account_connection_class_init (klass);
 
@@ -2301,8 +2292,11 @@ _mcd_account_set_avatar (McdAccount *account, const GArray *avatar,
     {
         g_key_file_remove_key (priv->keyfile, priv->unique_name,
                                MC_ACCOUNTS_KEY_AVATAR_TOKEN, NULL);
-        g_signal_emit (account, _mcd_account_signals[AVATAR_CHANGED], 0,
-                       avatar, mime_type);
+        /* this is a no-op if the connection doesn't support avatars */
+        if (priv->connection != NULL)
+        {
+            _mcd_connection_set_avatar (priv->connection, avatar, mime_type);
+        }
     }
 
     mcd_account_manager_write_conf (priv->account_manager);
diff --git a/src/mcd-connection-priv.h b/src/mcd-connection-priv.h
index 694c055..0a89103 100644
--- a/src/mcd-connection-priv.h
+++ b/src/mcd-connection-priv.h
@@ -51,6 +51,10 @@ G_GNUC_INTERNAL gboolean _mcd_connection_is_ready (McdConnection *self);
 G_GNUC_INTERNAL void _mcd_connection_set_nickname (McdConnection *self,
                                                    const gchar *nickname);
 
+G_GNUC_INTERNAL void _mcd_connection_set_avatar (McdConnection *self,
+                                                 const GArray *avatar,
+                                                 const gchar *mime_type);
+
 G_END_DECLS
 
 #endif
diff --git a/src/mcd-connection.c b/src/mcd-connection.c
index 2d7bed2..123ec4c 100644
--- a/src/mcd-connection.c
+++ b/src/mcd-connection.c
@@ -680,12 +680,16 @@ on_avatar_updated (TpConnection *proxy, guint contact_id, const gchar *token,
     g_free (prev_token);
 }
 
-static void
-_mcd_connection_set_avatar (McdConnection *connection, const GArray *avatar,
-			    const gchar *mime_type)
+void
+_mcd_connection_set_avatar (McdConnection *connection,
+                            const GArray *avatar,
+                            const gchar *mime_type)
 {
     McdConnectionPrivate *priv = connection->priv;
 
+    if (!priv->has_avatars_if)
+        return;
+
     DEBUG ("called");
     if (avatar->len > 0 && avatar->len < G_MAXUINT)
     {
@@ -738,16 +742,6 @@ avatars_request_tokens_cb (TpConnection *proxy, GHashTable *tokens,
 }
 
 static void
-on_account_avatar_changed (McdAccount *account, const GArray *avatar,
-			   const gchar *mime_type, McdConnection *connection)
-{
-    McdConnectionPrivate *priv = MCD_CONNECTION_PRIV (connection);
-
-    if (!priv->has_avatars_if) return;
-    _mcd_connection_set_avatar (connection, avatar, mime_type);
-}
-
-static void
 _mcd_connection_setup_avatar (McdConnection *connection)
 {
     McdConnectionPrivate *priv = connection->priv;
@@ -1541,9 +1535,6 @@ _mcd_connection_dispose (GObject * object)
 
     if (priv->account)
     {
-	g_signal_handlers_disconnect_by_func (priv->account,
-					      G_CALLBACK (on_account_avatar_changed),
-					      object);
         g_signal_handlers_disconnect_by_func (priv->account,
                                               G_CALLBACK (on_account_removed),
                                               object);
@@ -1613,9 +1604,6 @@ _mcd_connection_set_property (GObject * obj, guint prop_id,
 	g_return_if_fail (MCD_IS_ACCOUNT (account));
 	g_object_ref (account);
 	priv->account = account;
-	g_signal_connect (priv->account,
-			  "mcd-avatar-changed",
-			  G_CALLBACK (on_account_avatar_changed), obj);
         g_signal_connect (priv->account, "removed",
                           G_CALLBACK (on_account_removed),
                           obj);
-- 
1.5.6.5




More information about the telepathy-commits mailing list