2007-07-27 Murray Cumming <murrayc@murrayc.com>
authorMurray Cumming <murrayc@murrayc.com>
Fri, 27 Jul 2007 09:12:10 +0000 (09:12 +0000)
committerMurray Cumming <murrayc@murrayc.com>
Fri, 27 Jul 2007 09:12:10 +0000 (09:12 +0000)
* src/maemo/modest-account-view-window.c:
(on_new_button_clicked): Remember the wizard dialog instance,
so we can just present it again if necessary. This prevents
multiple windows from appearing if you click again quickly on the
New button before the dialog appears, fixing projects.maemo.org
bug NB#64169.

pmo-trunk-r2817

ChangeLog2
src/maemo/modest-account-view-window.c

index 80ce63a..2f8bb8f 100644 (file)
@@ -1,5 +1,14 @@
 2007-07-27  Murray Cumming  <murrayc@murrayc.com>
 
+       * src/maemo/modest-account-view-window.c:
+       (on_new_button_clicked): Remember the wizard dialog instance, 
+       so we can just present it again if necessary. This prevents 
+       multiple windows from appearing if you click again quickly on the 
+       New button before the dialog appears, fixing projects.maemo.org 
+       bug NB#64169.
+
+2007-07-27  Murray Cumming  <murrayc@murrayc.com>
+
        * src/maemo/modest-main-window.c: (modest_main_window_on_show):
        Offer a connection dialog if there is no connection when 
        starting modest. This should fix projects.maemo.org bug NB#61134.
index a22c47b..e77b335 100644 (file)
@@ -61,6 +61,9 @@ struct _ModestAccountViewWindowPrivate {
        GtkWidget           *delete_button;
        GtkWidget           *close_button;
        ModestAccountView   *account_view;
+       
+       /* We remember this so that we only open one at a time: */
+       ModestEasysetupWizardDialog *wizard;
 };
 #define MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
                                                         MODEST_TYPE_ACCOUNT_VIEW_WINDOW, \
@@ -117,6 +120,13 @@ modest_account_view_window_class_init (ModestAccountViewWindowClass *klass)
 static void
 modest_account_view_window_finalize (GObject *obj)
 {
+       ModestAccountViewWindowPrivate *priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE(obj);
+       
+       if (priv->wizard) {
+               gtk_widget_destroy (GTK_WIDGET (priv->wizard));
+               priv->wizard = NULL;
+       }
+
        G_OBJECT_CLASS(parent_class)->finalize (obj);
 }
 
@@ -239,11 +249,42 @@ on_edit_button_clicked (GtkWidget *button, ModestAccountViewWindow *self)
 }
 
 static void
+on_wizard_response (GtkDialog *dialog, gint response, gpointer user_data)
+{
+       ModestAccountViewWindow *self = MODEST_ACCOUNT_VIEW_WINDOW (user_data);
+       ModestAccountViewWindowPrivate *priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE(self);
+       
+       /* The response has already been handled by the wizard dialog itself,
+        * creating the new account.
+        */
+        
+       /* Destroy the dialog: */
+       if (priv->wizard) {
+               gtk_widget_destroy (GTK_WIDGET (priv->wizard));
+               priv->wizard = NULL;
+       }
+}
+
+static void
 on_new_button_clicked (GtkWidget *button, ModestAccountViewWindow *self)
 {
+       ModestAccountViewWindowPrivate *priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE(self);
+       
        /* Show the easy-setup wizard: */
-       ModestEasysetupWizardDialog *wizard = modest_easysetup_wizard_dialog_new ();
-       modest_maemo_show_dialog_and_forget (GTK_WINDOW (self), GTK_DIALOG (wizard));
+       
+       if (priv->wizard) {
+               /* Just show the existing window: */
+               gtk_window_present (GTK_WINDOW (priv->wizard));
+       } else {
+               /* Create and show the dialog: */
+               priv->wizard = modest_easysetup_wizard_dialog_new ();
+               
+               gtk_window_set_transient_for (GTK_WINDOW (priv->wizard), GTK_WINDOW (self));
+               
+               /* Destroy the dialog when it is closed: */
+               g_signal_connect (G_OBJECT (priv->wizard), "response", G_CALLBACK (on_wizard_response), self);
+               gtk_widget_show (GTK_WIDGET (priv->wizard));
+       }
 }