From 02c70cf6746cd909a873f54dd320772160f9ec13 Mon Sep 17 00:00:00 2001 From: Felix Kaser Date: Tue, 24 Nov 2009 18:45:46 +0100 Subject: update presence when account is enabled the problem was that disabling accounts forced their requested presence to _offline_, when the account was re-enabled the r-s stayed offline and the account did not try to reconnect. this was introduced with TpAccount. fixes bug #602821 --- libempathy-gtk/empathy-account-widget.c | 49 ++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 10 deletions(-) (limited to 'libempathy-gtk/empathy-account-widget.c') diff --git a/libempathy-gtk/empathy-account-widget.c b/libempathy-gtk/empathy-account-widget.c index a5b5b7926..80523f0ce 100644 --- a/libempathy-gtk/empathy-account-widget.c +++ b/libempathy-gtk/empathy-account-widget.c @@ -652,6 +652,11 @@ account_widget_account_enabled_cb (GObject *source_object, { GError *error = NULL; TpAccount *account = TP_ACCOUNT (source_object); + EmpathyAccountWidget *widget = EMPATHY_ACCOUNT_WIDGET (user_data); + EmpathyAccountWidgetPriv *priv = GET_PRIV (widget); + TpConnectionPresenceType presence; + gchar *message = NULL; + gchar *status = NULL; tp_account_set_enabled_finish (account, res, &error); @@ -660,6 +665,28 @@ account_widget_account_enabled_cb (GObject *source_object, DEBUG ("Could not enable the account: %s", error->message); g_error_free (error); } + else + { + /* only force presence if presence was offline, unknown or unset */ + presence = tp_account_get_requested_presence (account, NULL, NULL); + switch (presence) + { + case TP_CONNECTION_PRESENCE_TYPE_OFFLINE: + case TP_CONNECTION_PRESENCE_TYPE_UNKNOWN: + case TP_CONNECTION_PRESENCE_TYPE_UNSET: + presence = tp_account_manager_get_most_available_presence ( + priv->account_manager, &status, &message); + tp_account_request_presence_async (account, presence, + status, NULL, NULL, NULL); + break; + default: + /* do nothing if the presence is not offline */ + break; + } + } + + g_free (message); + g_free (status); } static void @@ -690,7 +717,7 @@ account_widget_applied_cb (GObject *source_object, { /* By default, when an account is created, we enable it. */ tp_account_set_enabled_async (account, TRUE, - account_widget_account_enabled_cb, NULL); + account_widget_account_enabled_cb, widget); priv->account_created = TRUE; g_signal_emit (widget, signals[ACCOUNT_CREATED], 0); } @@ -1167,7 +1194,8 @@ account_widget_switch_flipped_cb (NbtkGtkLightSwitch *sw, account = empathy_account_settings_get_account (priv->settings); /* Enable the account according to the value of the "Enabled" checkbox */ - tp_account_set_enabled_async (account, state, NULL, NULL); + tp_account_set_enabled_async (account, state, + account_widget_account_enabled_cb, user_data); } static void @@ -1369,6 +1397,12 @@ do_constructed (GObject *obj) self); } + /* dup and init the account-manager */ + priv->account_manager = tp_account_manager_dup (); + + tp_account_manager_prepare_async (priv->account_manager, NULL, + account_manager_ready_cb, self); + /* handle apply and cancel button */ if (!priv->simple) { @@ -1378,18 +1412,13 @@ do_constructed (GObject *obj) if (priv->creating_account) { - priv->account_manager = tp_account_manager_dup (); + /* Assumre we are offline, display a Save button. We'll update + * it once the account manager is ready if needed */ + priv->apply_button = gtk_button_new_from_stock (GTK_STOCK_SAVE); empathy_signal_connect_weak (priv->account_manager, "most-available-presence-changed", G_CALLBACK (presence_changed_cb), obj); - - tp_account_manager_prepare_async (priv->account_manager, NULL, - account_manager_ready_cb, self); - - /* Assumre we are offline, display a Save button. We'll update - * it once the account manager is ready if needed */ - priv->apply_button = gtk_button_new_from_stock (GTK_STOCK_SAVE); } else { -- cgit v1.2.3