[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