]> git.0d.be Git - empathy.git/commitdiff
account-widget: delay 'close' signal if enabling the account
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Tue, 8 May 2012 11:46:48 +0000 (13:46 +0200)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Wed, 9 May 2012 07:34:18 +0000 (09:34 +0200)
The whole point of this signal is to tell to user when it can be destroyed, so
we shouldn't fire it if we are still pending on an async call.

https://bugzilla.gnome.org/show_bug.cgi?id=675667

libempathy-gtk/empathy-account-widget.c

index 6848c87edeb3b17ad4c50516fa1fe7aa506b1888..96e6a88685689ea2502137695cfeae69fe1c8c5d 100644 (file)
@@ -903,6 +903,8 @@ account_widget_account_enabled_cb (GObject *source_object,
       empathy_connect_new_account (account, self->priv->account_manager);
     }
 
+  g_signal_emit (self, signals[CLOSE], 0, GTK_RESPONSE_APPLY);
+
   /* unref self - part of the workaround */
   g_object_unref (self);
 }
@@ -917,6 +919,7 @@ account_widget_applied_cb (GObject *source_object,
   EmpathyAccountSettings *settings = EMPATHY_ACCOUNT_SETTINGS (source_object);
   EmpathyAccountWidget *self = EMPATHY_ACCOUNT_WIDGET (user_data);
   gboolean reconnect_required;
+  gboolean fire_close = TRUE;
 
   empathy_account_settings_apply_finish (settings, res, &reconnect_required,
       &error);
@@ -942,6 +945,9 @@ account_widget_applied_cb (GObject *source_object,
           tp_account_set_enabled_async (account, TRUE,
               account_widget_account_enabled_cb, self);
           g_signal_emit (self, signals[ACCOUNT_CREATED], 0, account);
+
+          /* Will be fired in account_widget_account_enabled_cb */
+          fire_close = FALSE;
         }
       else
         {
@@ -969,8 +975,11 @@ account_widget_applied_cb (GObject *source_object,
 
   self->priv->contains_pending_changes = FALSE;
 
-  /* announce the widget can be closed */
-  g_signal_emit (self, signals[CLOSE], 0, GTK_RESPONSE_APPLY);
+  if (fire_close)
+    {
+      /* announce the widget can be closed */
+      g_signal_emit (self, signals[CLOSE], 0, GTK_RESPONSE_APPLY);
+    }
 
   /* unref the widget - part of the workaround */
   g_object_unref (self);