* The "account-changed" signal is now properly managed in the ModestTnyAccountStore...
[modest] / src / maemo / easysetup / modest-easysetup-wizard.c
index c00ffe3..21165b5 100644 (file)
@@ -70,6 +70,7 @@ G_DEFINE_TYPE (ModestEasysetupWizardDialog, modest_easysetup_wizard_dialog, MODE
 
 typedef struct _ModestEasysetupWizardDialogPrivate ModestEasysetupWizardDialogPrivate;
 
+
 typedef enum {
        MODEST_EASYSETUP_WIZARD_DIALOG_INCOMING_CHANGED = 0x01,
        MODEST_EASYSETUP_WIZARD_DIALOG_OUTGOING_CHANGED = 0x02
@@ -181,9 +182,9 @@ static GList* check_for_supported_auth_methods(ModestEasysetupWizardDialog* acco
        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); 
+                                               MODEST_SERVERSECURITY_COMBO_BOX (
+                                                       account_wizard->combo_incoming_security));
+       const int port_num = get_serverport_incoming(protocol, protocol_security_incoming); 
        GList *list_auth_methods =
           modest_maemo_utils_get_supported_secure_authentication_methods (
                                                                       protocol, 
@@ -198,7 +199,9 @@ static GList* check_for_supported_auth_methods(ModestEasysetupWizardDialog* acco
                                list = g_list_append(list, GINT_TO_POINTER(auth));
                        }
                }
+
                g_list_free(list_auth_methods);
+
                if (list)
                        return list;
        }
@@ -209,10 +212,39 @@ static GList* check_for_supported_auth_methods(ModestEasysetupWizardDialog* acco
                show_error (GTK_WIDGET(account_wizard), _("Could not discover supported secure authentication methods."));
        }
 
-       if(error != NULL) g_error_free(error);
+       if(error != NULL)
+               g_error_free(error);
+
        return NULL;
 }
 
+static gboolean check_has_supported_auth_methods(ModestEasysetupWizardDialog* account_wizard)
+{
+       GList* methods = check_for_supported_auth_methods(account_wizard);
+       if (!methods)
+       {
+               return FALSE;
+       }
+
+       g_list_free(methods);
+       return TRUE;
+}
+
+static ModestAuthProtocol check_first_supported_auth_method(ModestEasysetupWizardDialog* account_wizard)
+{
+       ModestAuthProtocol result = MODEST_PROTOCOL_AUTH_PASSWORD;
+
+       GList* methods = check_for_supported_auth_methods(account_wizard);
+       if (methods)
+       {
+               /* Use the first one: */
+               result = (ModestAuthProtocol) (GPOINTER_TO_INT(methods->data));
+               g_list_free(methods);
+       }
+
+       return result;
+}
+
 static void
 invoke_enable_buttons_vfunc (ModestEasysetupWizardDialog *wizard_dialog)
 {
@@ -296,7 +328,7 @@ create_page_welcome (ModestEasysetupWizardDialog *self)
        GtkWidget *label = gtk_label_new(_("mcen_ia_emailsetup_intro"));
        gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
        /* So that it is not truncated: */
-       gtk_label_set_max_width_chars (GTK_LABEL (label), 40);
+       gtk_widget_set_size_request (label, 600, -1);
        gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
        gtk_widget_show (label);
        gtk_widget_show (GTK_WIDGET (box));
@@ -313,10 +345,10 @@ on_combo_account_country (GtkComboBox *widget, gpointer user_data)
        priv->dirty = TRUE;
        
        /* Fill the providers combo, based on the selected country: */
-       GSList *list_mcc_ids = easysetup_country_combo_box_get_active_country_ids (
+       gint mcc = easysetup_country_combo_box_get_active_country_mcc (
                EASYSETUP_COUNTRY_COMBO_BOX (self->combo_account_country));
        easysetup_provider_combo_box_fill (
-               EASYSETUP_PROVIDER_COMBO_BOX (self->combo_account_serviceprovider), priv->presets, list_mcc_ids);
+               EASYSETUP_PROVIDER_COMBO_BOX (self->combo_account_serviceprovider), priv->presets, mcc);
 }
 
 static void
@@ -378,7 +410,7 @@ create_page_account_details (ModestEasysetupWizardDialog *self)
        GtkWidget *box = gtk_vbox_new (FALSE, MODEST_MARGIN_NONE);
        GtkWidget *label = gtk_label_new(_("mcen_ia_accountdetails"));
        gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
-       gtk_label_set_max_width_chars (GTK_LABEL (label), 40);
+       gtk_widget_set_size_request (label, 600, -1);
        gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, MODEST_MARGIN_HALF);
        gtk_widget_show (label);
        
@@ -425,10 +457,9 @@ create_page_account_details (ModestEasysetupWizardDialog *self)
         * set by the osso-operator-wizard package, suggested by Dirk-Jan Binnema.
         *
         */
-       GConfClient *client = gconf_client_get_default ();
        GError *error = NULL;
        const gchar* key = "/apps/osso/operator-wizard/last_mcc";
-       gint mcc_id = gconf_client_get_int(client, key, &error);
+       gint mcc_id = modest_conf_get_int(modest_runtime_get_conf (), key, &error);
        
        if(mcc_id < 0)
                mcc_id = 0;
@@ -441,7 +472,7 @@ create_page_account_details (ModestEasysetupWizardDialog *self)
                mcc_id = 0;
        }
     
-       /* Note that gconf_client_get_int() seems to return 0 without an error if the key is not there
+       /* Note that modest_conf_get_int() seems to return 0 without an error if the key is not there
         * This might just be a Maemo bug.
         */
        if (mcc_id == 0) 
@@ -450,7 +481,7 @@ create_page_account_details (ModestEasysetupWizardDialog *self)
                mcc_id = 244;
        }
    
-       easysetup_country_combo_box_set_active_country_id (
+       easysetup_country_combo_box_set_active_country_mcc (
                EASYSETUP_COUNTRY_COMBO_BOX (self->combo_account_country), mcc_id);
                
        
@@ -622,19 +653,17 @@ static GtkWidget* create_page_complete_easysetup (ModestEasysetupWizardDialog *s
        
        GtkWidget *label = gtk_label_new(_("mcen_ia_emailsetup_setup_complete"));
        gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
-       gtk_label_set_max_width_chars (GTK_LABEL (label), 40);
+       gtk_widget_set_size_request (label, 600, -1);
        gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+       /* The documentation for gtk_label_set_line_wrap() says that we must 
+        * call gtk_widget_set_size_request() with a hard-coded width, 
+        * though I wonder why gtk_label_set_max_width_chars() isn't enough. */
        gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
        gtk_widget_show (label);
        
        label = gtk_label_new (_("mcen_ia_easysetup_complete"));
        gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
-       gtk_label_set_max_width_chars (GTK_LABEL (label), 40);
-       
-       /* The documentation for gtk_label_set_line_wrap() says that we must 
-        * call gtk_widget_set_size_request() with a hard-coded width, 
-        * though I wonder why gtk_label_set_max_width_chars() isn't enough. */
-       gtk_widget_set_size_request (label, 400, -1);
+       gtk_widget_set_size_request (label, 600, -1);
        
        gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
        gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
@@ -703,11 +732,16 @@ static void on_entry_incoming_servername_changed(GtkEntry *entry, gpointer user_
 static GtkWidget* create_page_custom_incoming (ModestEasysetupWizardDialog *self)
 {
        GtkWidget *box = gtk_vbox_new (FALSE, MODEST_MARGIN_NONE);
+       GtkWidget *scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+
+       gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
+                                       GTK_POLICY_NEVER,
+                                       GTK_POLICY_AUTOMATIC);
 
        /* Show note that account type cannot be changed in future: */
        GtkWidget *label = gtk_label_new (_("mcen_ia_emailsetup_account_type"));
        gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
-       gtk_label_set_max_width_chars (GTK_LABEL (label), 40);
+       gtk_widget_set_size_request (label, 600, -1);
        gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
        gtk_widget_show (label);
        
@@ -787,8 +821,13 @@ static GtkWidget* create_page_custom_incoming (ModestEasysetupWizardDialog *self
        gtk_widget_show (caption);
        
        gtk_widget_show (GTK_WIDGET (box));
+
+       gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box);
+       gtk_container_set_focus_vadjustment (GTK_CONTAINER (box),
+                                            gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
+       gtk_widget_show (scrolled_window);
        
-       return GTK_WIDGET (box);
+       return GTK_WIDGET (scrolled_window);
 }
 
 static void
@@ -827,8 +866,7 @@ on_button_outgoing_smtp_servers (GtkButton *button, gpointer user_data)
        if (!(self->specific_window)) {
                self->specific_window = GTK_WIDGET (modest_connection_specific_smtp_window_new ());
                modest_connection_specific_smtp_window_fill_with_connections (
-                       MODEST_CONNECTION_SPECIFIC_SMTP_WINDOW (self->specific_window), self->account_manager, 
-                       NULL /* account_name, not known yet. */);
+                       MODEST_CONNECTION_SPECIFIC_SMTP_WINDOW (self->specific_window), self->account_manager);
        }
 
        /* Show the window: */
@@ -992,11 +1030,15 @@ static GtkWidget* create_page_complete_custom (ModestEasysetupWizardDialog *self
        GtkWidget *box = gtk_vbox_new (FALSE, MODEST_MARGIN_NONE);
        GtkWidget *label = gtk_label_new(_("mcen_ia_emailsetup_setup_complete"));
        gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+       gtk_widget_set_size_request (label, 600, -1);
+       gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
        gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
        gtk_widget_show (label);
        
        label = gtk_label_new (_("mcen_ia_customsetup_complete"));
        gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+       gtk_widget_set_size_request (label, 600, -1);
+       gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
        gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
        gtk_widget_show (label);
        
@@ -1111,10 +1153,27 @@ modest_easysetup_wizard_dialog_init (ModestEasysetupWizardDialog *self)
        /* Add the common pages: */
        gtk_notebook_append_page (notebook, self->page_welcome, 
                                  gtk_label_new (_("mcen_ti_emailsetup_welcome")));
+       gtk_container_child_set (GTK_CONTAINER (notebook), 
+                                self->page_welcome,
+                                "tab-expand", TRUE,
+                                "tab-fill", TRUE,
+                                NULL);
+
        gtk_notebook_append_page (notebook, self->page_account_details, 
                                  gtk_label_new (_("mcen_ti_accountdetails")));
+       gtk_container_child_set (GTK_CONTAINER (notebook), 
+                                self->page_account_details,
+                                "tab-expand", TRUE,
+                                "tab-fill", TRUE,
+                                NULL);
+
        gtk_notebook_append_page (notebook, self->page_user_details, 
                                  gtk_label_new (_("mcen_ti_emailsetup_userdetails")));
+       gtk_container_child_set (GTK_CONTAINER (notebook), 
+                                self->page_user_details,
+                                "tab-expand", TRUE,
+                                "tab-fill", TRUE,
+                                NULL);
                
        /* Create and add the easysetup-specific pages,
         * because we need _some_ final page to enable the Next and Finish buttons: */
@@ -1153,7 +1212,8 @@ modest_easysetup_wizard_dialog_init (ModestEasysetupWizardDialog *self)
 
 ModestEasysetupWizardDialog*
 modest_easysetup_wizard_dialog_new (void)
-{
+{      
+       
        return g_object_new (MODEST_TYPE_EASYSETUP_WIZARD_DIALOG, NULL);
 }
 
@@ -1184,9 +1244,15 @@ static void create_subsequent_customsetup_pages (ModestEasysetupWizardDialog *se
                gtk_notebook_append_page (notebook, self->page_custom_outgoing,
                                          gtk_label_new (_("mcen_ti_emailsetup_outgoingdetails")));
                
-       if (!gtk_widget_get_parent (GTK_WIDGET (self->page_complete_customsetup)))
+       if (!gtk_widget_get_parent (GTK_WIDGET (self->page_complete_customsetup))) {
                gtk_notebook_append_page (notebook, self->page_complete_customsetup,
                                          gtk_label_new (_("mcen_ti_emailsetup_complete")));
+               gtk_container_child_set (GTK_CONTAINER (notebook), 
+                                        self->page_complete_customsetup,
+                                        "tab-expand", TRUE,
+                                        "tab-fill", TRUE,
+                                        NULL);
+       }
                        
        /* This is unnecessary with GTK+ 2.10: */
        modest_wizard_dialog_force_title_update (MODEST_WIZARD_DIALOG(self));
@@ -1202,9 +1268,15 @@ static void create_subsequent_easysetup_pages (ModestEasysetupWizardDialog *self
        if(!self->page_complete_easysetup)
                self->page_complete_easysetup = create_page_complete_easysetup (self);
 
-       if (!gtk_widget_get_parent (GTK_WIDGET (self->page_complete_easysetup)))
+       if (!gtk_widget_get_parent (GTK_WIDGET (self->page_complete_easysetup))) {
                gtk_notebook_append_page (notebook, self->page_complete_easysetup, 
                                          gtk_label_new (_("mcen_ti_emailsetup_complete")));
+               gtk_container_child_set (GTK_CONTAINER (notebook),
+                                        self->page_complete_easysetup,
+                                        "tab-expand", TRUE,
+                                        "tab-fill", TRUE,
+                                        NULL);
+       }
                        
        /* This is unnecessary with GTK+ 2.10: */
        modest_wizard_dialog_force_title_update (MODEST_WIZARD_DIALOG(self));
@@ -1409,7 +1481,8 @@ on_before_next (ModestWizardDialog *dialog, GtkWidget *current_page, GtkWidget *
        }
        else if (next_page == account_wizard->page_custom_outgoing) {
                set_default_custom_servernames (account_wizard);
-    /* Check if the server supports secure authentication */
+
+               /* Check if the server supports secure authentication */
                const ModestConnectionProtocol security_incoming = 
                        modest_serversecurity_combo_box_get_active_serversecurity (
                                                                                                                                                                                                                                                                 MODEST_SERVERSECURITY_COMBO_BOX (
@@ -1418,13 +1491,8 @@ on_before_next (ModestWizardDialog *dialog, GtkWidget *current_page, GtkWidget *
                        GTK_TOGGLE_BUTTON (account_wizard->checkbox_incoming_auth))
                                && !modest_protocol_info_is_secure(security_incoming))
                {
-                               GList* methods = check_for_supported_auth_methods(account_wizard);
-                               if (!methods)
-                               {
-                                       g_list_free(methods);
+                               if (!check_has_supported_auth_methods (account_wizard))
                                        return FALSE;
-                               }
-                               g_list_free(methods);
                }
        }
        
@@ -1571,7 +1639,7 @@ show_error (GtkWidget *parent_widget, const gchar* text)
 /** Attempt to create the account from the information that the user has entered.
  * @result: TRUE if the account was successfully created.
  */
-gboolean
+static gboolean
 create_account (ModestEasysetupWizardDialog *self, gboolean enabled)
 {
        ModestEasysetupWizardDialogPrivate *priv = WIZARD_DIALOG_GET_PRIVATE (self);
@@ -1657,18 +1725,12 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled)
                 */
                
                if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->checkbox_incoming_auth)) &&
-                               !modest_protocol_info_is_secure(protocol_security_incoming))
-               {
-                               GList* methods = check_for_supported_auth_methods(self);
-                               if (!methods) {
-                                       g_free (display_name);
-                                       return FALSE;
-                               }
-                               else
-                                 protocol_authentication_incoming = (ModestAuthProtocol) (GPOINTER_TO_INT(methods->data));
+                               !modest_protocol_info_is_secure(protocol_security_incoming)) {
+                       protocol_authentication_incoming = check_first_supported_auth_method (self);
                }
-               else
+               else {
                        protocol_authentication_incoming = MODEST_PROTOCOL_AUTH_PASSWORD;
+               }
        }
        
        /* First we add the 2 server accounts, and then we add the account that uses them.
@@ -1798,29 +1860,26 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled)
                
        /* The user name and email address must be set additionally: */
        const gchar* user_name = gtk_entry_get_text (GTK_ENTRY (self->entry_user_name));
-       modest_account_mgr_set_string (self->account_manager, account_name,
-                                      MODEST_ACCOUNT_FULLNAME, user_name, FALSE /* not server account */);
+       modest_account_mgr_set_server_account_user_fullname (self->account_manager, account_name, user_name);
 
        const gchar* emailaddress = gtk_entry_get_text (GTK_ENTRY (self->entry_user_email));
-       modest_account_mgr_set_string (self->account_manager, account_name,
-                                      MODEST_ACCOUNT_EMAIL, emailaddress, FALSE /* not server account */);
+       modest_account_mgr_set_server_account_user_email (self->account_manager, account_name, emailaddress); 
 
        /* Set the display name: */
-       modest_account_mgr_set_string (self->account_manager, account_name,
-                                      MODEST_ACCOUNT_DISPLAY_NAME, display_name, FALSE /* not server account */);
+       modest_account_mgr_set_display_name (self->account_manager, account_name, display_name);
 
        /* Set retrieve type */ 
        const gchar *retrieve = MODEST_ACCOUNT_RETRIEVE_VALUE_HEADERS_ONLY;
-       modest_account_mgr_set_string (self->account_manager, account_name,
-               MODEST_ACCOUNT_RETRIEVE, retrieve, FALSE /* not server account */);
+       modest_account_mgr_set_retrieve_type (self->account_manager, account_name, retrieve);
 
        /* Save the connection-specific SMTP server accounts. */
-        modest_account_mgr_set_use_connection_specific_smtp(self->account_manager, account_name,
+        modest_account_mgr_set_use_connection_specific_smtp(self->account_manager, account_name, 
                 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self->checkbox_outgoing_smtp_specific)));
        gboolean result = TRUE;
        if (self->specific_window)
                result = modest_connection_specific_smtp_window_save_server_accounts (
-                       MODEST_CONNECTION_SPECIFIC_SMTP_WINDOW (self->specific_window), account_name);
+                       MODEST_CONNECTION_SPECIFIC_SMTP_WINDOW (self->specific_window));
+
                        
        g_free (self->saved_account_name);
        self->saved_account_name = g_strdup (account_name);