diff options
author | Danielle Madeley <danielle.madeley@collabora.co.uk> | 2011-03-15 17:47:20 +0800 |
---|---|---|
committer | Danielle Madeley <danielle.madeley@collabora.co.uk> | 2011-03-18 07:30:31 +0800 |
commit | ca830f84306dc6ec626107857b2a770c3faa2401 (patch) | |
tree | 31f6c3da2dee053fa2b1345296d528b1819fd030 /libempathy-gtk/empathy-account-widget.c | |
parent | ed2a37c2c6f41bb1f5704d2a2f748157fb054fc3 (diff) | |
download | gsoc2013-empathy-ca830f84306dc6ec626107857b2a770c3faa2401.tar gsoc2013-empathy-ca830f84306dc6ec626107857b2a770c3faa2401.tar.gz gsoc2013-empathy-ca830f84306dc6ec626107857b2a770c3faa2401.tar.bz2 gsoc2013-empathy-ca830f84306dc6ec626107857b2a770c3faa2401.tar.lz gsoc2013-empathy-ca830f84306dc6ec626107857b2a770c3faa2401.tar.xz gsoc2013-empathy-ca830f84306dc6ec626107857b2a770c3faa2401.tar.zst gsoc2013-empathy-ca830f84306dc6ec626107857b2a770c3faa2401.zip |
Optionally call a callback on Apply to do additional things
Diffstat (limited to 'libempathy-gtk/empathy-account-widget.c')
-rw-r--r-- | libempathy-gtk/empathy-account-widget.c | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/libempathy-gtk/empathy-account-widget.c b/libempathy-gtk/empathy-account-widget.c index c1d625c91..95d998eef 100644 --- a/libempathy-gtk/empathy-account-widget.c +++ b/libempathy-gtk/empathy-account-widget.c @@ -756,16 +756,19 @@ account_widget_account_enabled_cb (GObject *source_object, g_object_unref (widget); } +static void account_widget_applied_continue (EmpathyAccountWidget *widget, + gboolean reconnect_required); +static void account_widget_applied_additional_cb (GObject *widget, + GAsyncResult *result, gpointer user_data); + static void account_widget_applied_cb (GObject *source_object, GAsyncResult *res, gpointer user_data) { GError *error = NULL; - TpAccount *account; EmpathyAccountSettings *settings = EMPATHY_ACCOUNT_SETTINGS (source_object); EmpathyAccountWidget *widget = EMPATHY_ACCOUNT_WIDGET (user_data); - EmpathyAccountWidgetPriv *priv = GET_PRIV (widget); gboolean reconnect_required; empathy_account_settings_apply_finish (settings, res, &reconnect_required, @@ -778,6 +781,44 @@ account_widget_applied_cb (GObject *source_object, return; } + DEBUG ("First stage apply complete: reconnect_required = %s", + reconnect_required ? "yes" : "no"); + + /* if there is additional work for this widget, do that now */ + if (widget->ui_details->additional_apply_async != NULL) + widget->ui_details->additional_apply_async (widget, + account_widget_applied_additional_cb, + GUINT_TO_POINTER (reconnect_required)); + else + account_widget_applied_continue (widget, reconnect_required); +} + +static void +account_widget_applied_additional_cb (GObject *obj, + GAsyncResult *result, + gpointer user_data) +{ + EmpathyAccountWidget *widget = EMPATHY_ACCOUNT_WIDGET (obj); + GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result); + gboolean reconnect_required = GPOINTER_TO_UINT (user_data); + + /* we don't care about the error status, the async method can report it, + * just get the result */ + reconnect_required |= g_simple_async_result_get_op_res_gboolean (simple); + + DEBUG ("Second stage apply complete: reconnect_required = %s", + reconnect_required ? "yes" : "no"); + + account_widget_applied_continue (widget, reconnect_required); +} + +static void +account_widget_applied_continue (EmpathyAccountWidget *widget, + gboolean reconnect_required) +{ + EmpathyAccountWidgetPriv *priv = GET_PRIV (widget); + TpAccount *account; + account = empathy_account_settings_get_account (priv->settings); if (account != NULL) |