[empathy] update presence when account is enabled
- From: Felix Kaser <kaserf src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [empathy] update presence when account is enabled
- Date: Tue, 1 Dec 2009 16:22:47 +0000 (UTC)
commit 02c70cf6746cd909a873f54dd320772160f9ec13
Author: Felix Kaser <f kaser gmx net>
Date: Tue Nov 24 18:45:46 2009 +0100
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 files changed, 39 insertions(+), 10 deletions(-)
---
diff --git a/libempathy-gtk/empathy-account-widget.c b/libempathy-gtk/empathy-account-widget.c
index a5b5b79..80523f0 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
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]