[Telepathy-commits] [telepathy-mission-control/master] Implement _mcd_account_set_connection()
Alberto Mardegan
alberto.mardegan at nokia.com
Mon Feb 16 04:54:04 PST 2009
---
src/mcd-account.c | 44 +++++++++++++++++++++++++++++++-------------
src/mcd-account.h | 3 +++
2 files changed, 34 insertions(+), 13 deletions(-)
diff --git a/src/mcd-account.c b/src/mcd-account.c
index baee4cc..390ccd3 100644
--- a/src/mcd-account.c
+++ b/src/mcd-account.c
@@ -426,8 +426,7 @@ on_connection_abort (McdConnection *connection, McdAccount *account)
g_debug ("%s called (%p, account %s)", G_STRFUNC,
connection, priv->unique_name);
- g_object_unref (priv->connection);
- priv->connection = NULL;
+ _mcd_account_set_connection (account, NULL);
}
static gboolean
@@ -479,6 +478,8 @@ _mcd_account_connect (McdAccount *account, GHashTable *params)
if (!priv->connection)
{
+ McdConnection *connection;
+
if (!priv->manager && !load_manager (account))
{
g_warning ("%s: Could not find manager `%s'",
@@ -486,12 +487,8 @@ _mcd_account_connect (McdAccount *account, GHashTable *params)
return;
}
- priv->connection = mcd_manager_create_connection (priv->manager,
- account);
- g_return_if_fail (priv->connection != NULL);
- g_object_ref (priv->connection);
- g_signal_connect (priv->connection, "abort",
- G_CALLBACK (on_connection_abort), account);
+ connection = mcd_manager_create_connection (priv->manager, account);
+ _mcd_account_set_connection (account, connection);
}
mcd_connection_connect (priv->connection, params);
}
@@ -1535,11 +1532,7 @@ _mcd_account_dispose (GObject *object)
priv->manager = NULL;
}
- if (priv->connection)
- {
- g_object_unref (priv->connection);
- priv->connection = NULL;
- }
+ _mcd_account_set_connection (MCD_ACCOUNT (object), NULL);
G_OBJECT_CLASS (mcd_account_parent_class)->dispose (object);
}
@@ -2389,3 +2382,28 @@ _mcd_account_load (McdAccount *account, McdAccountLoadCb callback,
MCD_ACCOUNT_GET_CLASS (account)->load (account, callback, user_data);
}
+void
+_mcd_account_set_connection (McdAccount *account, McdConnection *connection)
+{
+ McdAccountPrivate *priv;
+
+ g_return_if_fail (MCD_IS_ACCOUNT (account));
+ priv = account->priv;
+ if (connection == priv->connection) return;
+
+ if (priv->connection)
+ {
+ g_signal_handlers_disconnect_by_func (priv->connection,
+ on_connection_abort, account);
+ g_object_unref (priv->connection);
+ }
+ priv->connection = connection;
+ if (connection)
+ {
+ g_return_if_fail (MCD_IS_CONNECTION (connection));
+ g_object_ref (connection);
+ g_signal_connect (connection, "abort",
+ G_CALLBACK (on_connection_abort), account);
+ }
+}
+
diff --git a/src/mcd-account.h b/src/mcd-account.h
index e703327..39ff01f 100644
--- a/src/mcd-account.h
+++ b/src/mcd-account.h
@@ -161,5 +161,8 @@ void _mcd_account_tp_connection_changed (McdAccount *account);
G_GNUC_INTERNAL
void _mcd_account_load (McdAccount *account, McdAccountLoadCb callback,
gpointer user_data);
+G_GNUC_INTERNAL
+void _mcd_account_set_connection (McdAccount *account,
+ McdConnection *connection);
#endif
--
1.5.6.5
More information about the telepathy-commits
mailing list