]> git.0d.be Git - empathy.git/commitdiff
Merge branch 'master'; commit 'jtellier/set-account-name'
authorCosimo Cecchi <cosimoc@gnome.org>
Thu, 27 Aug 2009 15:08:25 +0000 (17:08 +0200)
committerCosimo Cecchi <cosimoc@gnome.org>
Thu, 27 Aug 2009 15:08:25 +0000 (17:08 +0200)
libempathy-gtk/empathy-account-widget.c
libempathy/empathy-account.c
libempathy/empathy-account.h

index 0927d109c73714c610728348c75ccef762f5820f..5863d498086763b4d60638833edd31879615fec4 100644 (file)
@@ -66,13 +66,6 @@ typedef struct {
    * modify it. When we are creating an account, this member is set to TRUE */
   gboolean creating_account;
 
-  /* After having applied changes to a user account, we automatically
-   * disconnect him. Once he's disconnected, he will be reconnected,
-   * depending on the value of this member which should be set to the checked
-   * state of the "Enabled" checkbox. This is done so the new information
-   * entered by the user is validated on the server. */
-  gboolean re_enable_accound;
-
   gboolean dispose_run;
 } EmpathyAccountWidgetPriv;
 
@@ -623,32 +616,35 @@ account_widget_applied_cb (GObject *source_object,
 
   account = empathy_account_settings_get_account (priv->settings);
 
-  if (priv->creating_account)
-    {
-      /* By default, when an account is created, we enable it. */
-      empathy_account_set_enabled_async (account, TRUE,
-          account_widget_account_enabled_cb, widget);
-    }
-  else if (account != NULL && priv->enabled_checkbox != NULL)
+  if (account != NULL)
     {
-      gboolean enabled_checked;
-
-      enabled_checked = gtk_toggle_button_get_active (
-          GTK_TOGGLE_BUTTON (priv->enabled_checkbox));
-
-      if (empathy_account_is_enabled (account))
+      if (priv->creating_account)
         {
-          /* We want to disable the account (and possibly re-enable it) to make
-           * sure that the new settings are effective */
-          priv->re_enable_accound = enabled_checked;
-          empathy_account_set_enabled_async (account, FALSE, NULL, NULL);
+          /* By default, when an account is created, we enable it. */
+          empathy_account_set_enabled_async (account, TRUE,
+              account_widget_account_enabled_cb, widget);
         }
-      else
+      else if (priv->enabled_checkbox != NULL)
         {
-          /* The account is already disable so we just enable it according
-           * to the value of the "Enabled" checkbox */
-          empathy_account_set_enabled_async (account, enabled_checked,
-              NULL, NULL);
+          gboolean enabled_checked;
+
+          enabled_checked = gtk_toggle_button_get_active (
+              GTK_TOGGLE_BUTTON (priv->enabled_checkbox));
+
+          if (empathy_account_is_enabled (account) && enabled_checked)
+            {
+              /* After having applied changes to a user account, we
+               * automatically reconnect it. This is done so the new
+               * information entered by the user is validated on the server. */
+              empathy_account_reconnect_async (account, NULL, NULL);
+            }
+          else
+            {
+              /* The account is disabled so we enable it according to the value
+               * of the "Enabled" checkbox */
+              empathy_account_set_enabled_async (account, enabled_checked,
+                  NULL, NULL);
+            }
         }
     }
 
@@ -1023,14 +1019,7 @@ empathy_account_widget_enabled_cb (EmpathyAccount *account,
   EmpathyAccountWidgetPriv *priv = GET_PRIV (widget);
   gboolean enabled = empathy_account_is_enabled (account);
 
-  if (!enabled && priv->re_enable_accound)
-    {
-      /* The account has been disabled because we were applying changes.
-       * However, the user wants the account to be enabled so let's re-enable
-       * it */
-      empathy_account_set_enabled_async (account, TRUE, NULL, NULL);
-    }
-  else if (priv->enabled_checkbox != NULL)
+  if (priv->enabled_checkbox != NULL)
     {
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->enabled_checkbox),
           enabled);
index 5527aab68a1620c4814e90685c831d4a52f08436..0e4758baa648cb198f4675a3c771effdef581aa9 100644 (file)
@@ -975,6 +975,49 @@ empathy_account_set_enabled_async (EmpathyAccount *account,
       account_enabled_set_cb, result, NULL, G_OBJECT (account));
 }
 
+static void
+account_reconnected_cb (TpAccount *proxy,
+    const GError *error,
+    gpointer user_data,
+    GObject *weak_object)
+{
+  GSimpleAsyncResult *result = user_data;
+
+  if (error != NULL)
+    g_simple_async_result_set_from_error (result, (GError *) error);
+
+  g_simple_async_result_complete (result);
+  g_object_unref (result);
+}
+
+gboolean
+empathy_account_reconnect_finish (EmpathyAccount *account,
+    GAsyncResult *result,
+    GError **error)
+{
+  if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result),
+          error) ||
+      !g_simple_async_result_is_valid (result, G_OBJECT (account),
+          empathy_account_reconnect_finish))
+    return FALSE;
+
+  return TRUE;
+}
+
+void
+empathy_account_reconnect_async (EmpathyAccount *account,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  EmpathyAccountPriv *priv = GET_PRIV (account);
+
+  GSimpleAsyncResult *result = g_simple_async_result_new (G_OBJECT (account),
+        callback, user_data, empathy_account_reconnect_finish);
+
+  tp_cli_account_call_reconnect (priv->account,
+      -1, account_reconnected_cb, result, NULL, G_OBJECT (account));
+}
+
 static void
 empathy_account_requested_presence_cb (TpProxy *proxy,
   const GError *error,
index d327de60d3eeac0253f6543bb2aeb98a8a425571..e789ca702dbc56632e3105753f2375ef98c20474 100644 (file)
@@ -72,6 +72,13 @@ void empathy_account_set_enabled_async (EmpathyAccount *account,
 gboolean empathy_account_set_enabled_finish (EmpathyAccount *account,
     GAsyncResult *result, GError **error);
 
+void empathy_account_reconnect_async (EmpathyAccount *account,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+gboolean empathy_account_reconnect_finish (EmpathyAccount *account,
+    GAsyncResult *result,
+    GError **error);
+
 gboolean empathy_account_is_enabled (EmpathyAccount *account);
 
 gboolean empathy_account_is_valid (EmpathyAccount *account);