2007-07-02 Armin Burgmeier <armin@openismus.com>
[modest] / src / maemo / easysetup / modest-easysetup-wizard.c
index 39b8046..95b36ae 100644 (file)
@@ -146,7 +146,7 @@ set_default_custom_servernames(ModestEasysetupWizardDialog *dialog);
 static void on_combo_servertype_changed(GtkComboBox *combobox, gpointer user_data);
 
 static gint get_serverport_incoming(ModestPresetsServerType servertype_incoming,
-                                                                                                                                               ModestPresetsSecurity security_incoming)
+                                    ModestPresetsSecurity security_incoming)
 {
        int serverport_incoming = 0;
                /* We don't check for SMTP here as that is impossible for an incoming server. */
@@ -162,41 +162,48 @@ static gint get_serverport_incoming(ModestPresetsServerType servertype_incoming,
 
 static GList* check_for_supported_auth_methods(ModestEasysetupWizardDialog* account_wizard)
 {
-               const ModestTransportStoreProtocol protocol = 
+       GError *error = NULL;
+       const ModestTransportStoreProtocol protocol = 
           easysetup_servertype_combo_box_get_active_servertype (
                                                                 EASYSETUP_SERVERTYPE_COMBO_BOX (account_wizard->combo_incoming_servertype));
-    const gchar* hostname = gtk_entry_get_text(GTK_ENTRY(account_wizard->entry_incomingserver));
-    const gchar* username = gtk_entry_get_text(GTK_ENTRY(account_wizard->entry_user_username));
-         const ModestConnectionProtocol protocol_security_incoming = 
+       const gchar* hostname = gtk_entry_get_text(GTK_ENTRY(account_wizard->entry_incomingserver));
+       const gchar* username = gtk_entry_get_text(GTK_ENTRY(account_wizard->entry_user_username));
+       const ModestConnectionProtocol protocol_security_incoming = 
                                        modest_serversecurity_combo_box_get_active_serversecurity (
-                                                                                                                                                                                                                                                                                MODEST_SERVERSECURITY_COMBO_BOX (
-                                                                                                                                                                                                                                                                                                                                                                                                                       account_wizard->combo_incoming_security));
-     int port_num = get_serverport_incoming(protocol, protocol_security_incoming); 
-     GList *list_auth_methods = 
+                                       MODEST_SERVERSECURITY_COMBO_BOX (
+                                       account_wizard->combo_incoming_security));
+       int port_num = get_serverport_incoming(protocol, protocol_security_incoming); 
+       GList *list_auth_methods =
           modest_maemo_utils_get_supported_secure_authentication_methods (
                                                                       protocol, 
-                                                                      hostname, port_num, username, GTK_WINDOW (account_wizard));      
-     if (list_auth_methods) {
-          /* TODO: Select the correct method */
-                         GList* list = NULL;
-                         GList* method;
-                         for (method = list_auth_methods; method != NULL; method = g_list_next(method)) {
-                                 ModestAuthProtocol auth = (ModestAuthProtocol) (GPOINTER_TO_INT(method->data));
-                                 if (modest_protocol_info_auth_is_secure(auth)) {
-                                        list = g_list_append(list, GINT_TO_POINTER(auth));
-                                }
-                        }
-                        g_list_free(list_auth_methods);
-                        if (list)
-                                return list;
-                }
-                /* no secure methods supported */
-     GtkWidget* error_dialog = gtk_message_dialog_new(GTK_WINDOW(account_wizard),
-                                                     GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR,
-                                                     GTK_BUTTONS_OK, _("Server does not support secure authentication!"));
-     gtk_dialog_run(GTK_DIALOG(error_dialog));
-     gtk_widget_destroy(error_dialog);
-     return NULL;
+                                                                      hostname, port_num, username, GTK_WINDOW (account_wizard), &error);
+       if (list_auth_methods) {
+               /* TODO: Select the correct method */
+               GList* list = NULL;
+               GList* method;
+               for (method = list_auth_methods; method != NULL; method = g_list_next(method)) {
+                       ModestAuthProtocol auth = (ModestAuthProtocol) (GPOINTER_TO_INT(method->data));
+                       if (modest_protocol_info_auth_is_secure(auth)) {
+                               list = g_list_append(list, GINT_TO_POINTER(auth));
+                       }
+               }
+               g_list_free(list_auth_methods);
+               if (list)
+                       return list;
+       }
+
+       if(error == NULL || error->domain != modest_maemo_utils_get_supported_secure_authentication_error_quark() ||
+                       error->code != MODEST_MAEMO_UTILS_GET_SUPPORTED_SECURE_AUTHENTICATION_ERROR_CANCELED)
+       {
+               GtkWidget* error_dialog = gtk_message_dialog_new(GTK_WINDOW(account_wizard),
+                                                                GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR,
+                                                                GTK_BUTTONS_OK, (error != NULL) ? error->message : _("Server does not support secure authentication!"));
+               gtk_dialog_run(GTK_DIALOG(error_dialog));
+               gtk_widget_destroy(error_dialog);
+       }
+
+       if(error != NULL) g_error_free(error);
+       return NULL;
 }
 
 static void
@@ -929,18 +936,42 @@ on_response (ModestWizardDialog *wizard_dialog,
             gpointer user_data)
 {
        ModestEasysetupWizardDialog *self = MODEST_EASYSETUP_WIZARD_DIALOG (wizard_dialog);
-       
        if (response_id == GTK_RESPONSE_CANCEL) {
                /* Remove any temporarily-saved account that will not actually be needed: */
                if (self->saved_account_name) {
                        modest_account_mgr_remove_account (self->account_manager,
                                                           self->saved_account_name, FALSE);
-               }       
+               }
        }
-       
+
        invoke_enable_buttons_vfunc (self);
 }
 
+static void 
+on_response_before (ModestWizardDialog *wizard_dialog,
+                    gint response_id,
+                    gpointer user_data)
+{
+       ModestEasysetupWizardDialog *self = MODEST_EASYSETUP_WIZARD_DIALOG (wizard_dialog);
+       if (response_id == GTK_RESPONSE_CANCEL) {
+               /* This is mostly copied from
+                * src/maemo/modest-account-settings-dialog.c */
+               GtkDialog *dialog = GTK_DIALOG (hildon_note_new_confirmation (GTK_WINDOW (self), 
+                       _("imum_nc_wizard_confirm_lose_changes")));
+               /* TODO: These button names will be ambiguous, and not specified in the UI specification. */
+
+               const gint dialog_response = gtk_dialog_run (dialog);
+               gtk_widget_destroy (GTK_WIDGET (dialog));
+
+               if (dialog_response != GTK_RESPONSE_OK)
+               {
+                       /* This is a nasty hack. murrayc. */
+                       /* Don't let the dialog close */
+                       g_signal_stop_emission_by_name (wizard_dialog, "response");
+               }
+       }
+}
+
 static void
 modest_easysetup_wizard_dialog_init (ModestEasysetupWizardDialog *self)
 {
@@ -1014,6 +1045,10 @@ modest_easysetup_wizard_dialog_init (ModestEasysetupWizardDialog *self)
        g_signal_connect_after (G_OBJECT (self), "response",
                                G_CALLBACK (on_response), self);
 
+       /* This is to show a confirmation dialog when the user hits cancel */
+       g_signal_connect (G_OBJECT (self), "response",
+                         G_CALLBACK (on_response_before), self);
+
        /* When this window is shown, hibernation should not be possible, 
         * because there is no sensible way to save the state: */
        modest_window_mgr_prevent_hibernation_while_window_is_shown (
@@ -1219,7 +1254,7 @@ on_before_next (ModestWizardDialog *dialog, GtkWidget *current_page, GtkWidget *
 
                if (name_in_use) {
                        /* Warn the user via a dialog: */
-                       show_error (GTK_WINDOW (account_wizard), _("mail_ib_account_name_already_existing"));
+                       hildon_banner_show_information(NULL, NULL, _("mail_ib_account_name_already_existing"));
             
                        return FALSE;
                }