X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmaemo%2Feasysetup%2Fmodest-easysetup-wizard.c;h=bb6614317f249459703d079b4cca2c1427529452;hp=dfda1666b99dcd9cd4751a7cd60d4e8c73bbe9db;hb=71e75c214255241242736f2a7528f95417e15e7e;hpb=27dc1b7db4b741b4d7bd0acf233a8c402f172012 diff --git a/src/maemo/easysetup/modest-easysetup-wizard.c b/src/maemo/easysetup/modest-easysetup-wizard.c index dfda166..bb66143 100644 --- a/src/maemo/easysetup/modest-easysetup-wizard.c +++ b/src/maemo/easysetup/modest-easysetup-wizard.c @@ -61,8 +61,6 @@ #include #endif -#define EXAMPLE_EMAIL_ADDRESS "first.last@provider.com" - G_DEFINE_TYPE (ModestEasysetupWizardDialog, modest_easysetup_wizard_dialog, MODEST_TYPE_WIZARD_DIALOG); #define WIZARD_DIALOG_GET_PRIVATE(o) \ @@ -70,6 +68,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 @@ -87,6 +86,15 @@ struct _ModestEasysetupWizardDialogPrivate gboolean dirty; }; +static gboolean +on_delete_event (GtkWidget *widget, + GdkEvent *event, + ModestEasysetupWizardDialog *wizard) +{ + gtk_dialog_response (GTK_DIALOG (wizard), GTK_RESPONSE_CANCEL); + return TRUE; +} + static void on_easysetup_changed(GtkWidget* widget, ModestEasysetupWizardDialog* wizard) { @@ -181,9 +189,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 +206,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 +219,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 +335,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 +352,12 @@ 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 ( - 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); + if (priv->presets != NULL) { + 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, mcc); + } } static void @@ -337,7 +378,7 @@ on_combo_account_serviceprovider (GtkComboBox *widget, gpointer user_data) domain_name = modest_presets_get_domain (priv->presets, provider_id); if(!domain_name) - domain_name = g_strdup (EXAMPLE_EMAIL_ADDRESS); + domain_name = g_strdup (MODEST_EXAMPLE_EMAIL_ADDRESS); if (self->entry_user_email) gtk_entry_set_text (GTK_ENTRY (self->entry_user_email), domain_name); @@ -358,11 +399,17 @@ static void on_entry_invalid_character (ModestValidatingEntry *self, const gchar* character, gpointer user_data) { /* ModestEasysetupWizardDialog *dialog = MODEST_EASYSETUP_WIZARD_DIALOG (user_data); */ - /* We could add a special case for whitespace here - if (character == NULL) ... - */ + + const gchar *show_char = NULL; + if (character) + show_char = character; + else { + /* TODO: We need a logical ID for this: */ + show_char = _("whitespace"); + } + /* TODO: Should this show just this one bad character or all the not-allowed characters? */ - gchar *message = g_strdup_printf (_CS("ckdg_ib_illegal_characters_entered"), character); + gchar *message = g_strdup_printf (_CS("ckdg_ib_illegal_characters_entered"), show_char); show_error (GTK_WIDGET (self), message); } @@ -371,19 +418,11 @@ create_page_account_details (ModestEasysetupWizardDialog *self) { GtkWidget *box = gtk_vbox_new (FALSE, MODEST_MARGIN_NONE); GtkWidget *label = gtk_label_new(_("mcen_ia_accountdetails")); - GtkWidget *scrollwin = gtk_scrolled_window_new(NULL, NULL); - - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), - GTK_POLICY_NEVER, - GTK_POLICY_AUTOMATIC); - - 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); - /* Create a size group to be used by all captions. * Note that HildonCaption does not create a default size group if we do not specify one. * We use GTK_SIZE_GROUP_HORIZONTAL, so that the widths are the same. */ @@ -407,6 +446,7 @@ create_page_account_details (ModestEasysetupWizardDialog *self) /* The service provider widgets: */ self->combo_account_serviceprovider = GTK_WIDGET (easysetup_provider_combo_box_new ()); + gtk_widget_set_size_request (self->combo_account_serviceprovider, 320, -1); caption = create_caption_new_with_asterisk (self, sizegroup, _("mcen_fi_serviceprovider"), self->combo_account_serviceprovider, NULL, HILDON_CAPTION_OPTIONAL); @@ -427,10 +467,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; @@ -443,7 +482,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) @@ -452,7 +491,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); @@ -510,33 +549,25 @@ create_page_account_details (ModestEasysetupWizardDialog *self) on_entry_max, self); gtk_widget_show (GTK_WIDGET (box)); - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollwin), - box); - gtk_widget_show (GTK_WIDGET(scrollwin)); - return GTK_WIDGET (scrollwin); + return GTK_WIDGET (box); } static GtkWidget* create_page_user_details (ModestEasysetupWizardDialog *self) { GtkWidget *box = gtk_vbox_new (FALSE, MODEST_MARGIN_NONE); - GtkWidget *scrollwin = gtk_scrolled_window_new(NULL, NULL); - - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), - GTK_POLICY_NEVER, - GTK_POLICY_AUTOMATIC); - /* Create a size group to be used by all captions. * Note that HildonCaption does not create a default size group if we do not specify one. * We use GTK_SIZE_GROUP_HORIZONTAL, so that the widths are the same. */ GtkSizeGroup* sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); - /* The name widgets: */ + /* The name widgets: (use auto cap) */ self->entry_user_name = GTK_WIDGET (modest_validating_entry_new ()); - /* Auto-capitalization is the default, so let's turn it off: */ - hildon_gtk_entry_set_input_mode (GTK_ENTRY (self->entry_user_name), HILDON_GTK_INPUT_MODE_FULL); + hildon_gtk_entry_set_input_mode (GTK_ENTRY (self->entry_user_name), + HILDON_GTK_INPUT_MODE_FULL | HILDON_GTK_INPUT_MODE_AUTOCAP); + /* Set max length as in the UI spec: * The UI spec seems to want us to show a dialog if we hit the maximum. */ gtk_entry_set_max_length (GTK_ENTRY (self->entry_user_name), 64); @@ -558,7 +589,7 @@ create_page_user_details (ModestEasysetupWizardDialog *self) modest_validating_entry_set_unallowed_characters ( MODEST_VALIDATING_ENTRY (self->entry_user_name), list_prevent); modest_validating_entry_set_func(MODEST_VALIDATING_ENTRY(self->entry_user_name), - on_entry_invalid_character, self); + on_entry_invalid_character, self); g_list_free (list_prevent); /* The username widgets: */ @@ -578,7 +609,7 @@ create_page_user_details (ModestEasysetupWizardDialog *self) modest_validating_entry_set_unallowed_characters_whitespace ( MODEST_VALIDATING_ENTRY (self->entry_user_username)); modest_validating_entry_set_func(MODEST_VALIDATING_ENTRY(self->entry_user_username), - on_entry_invalid_character, self); + on_entry_invalid_character, self); /* Set max length as in the UI spec: * The UI spec seems to want us to show a dialog if we hit the maximum. */ @@ -607,7 +638,7 @@ create_page_user_details (ModestEasysetupWizardDialog *self) hildon_gtk_entry_set_input_mode (GTK_ENTRY (self->entry_user_email), HILDON_GTK_INPUT_MODE_FULL); caption = create_caption_new_with_asterisk (self, sizegroup, _("mcen_li_emailsetup_email_address"), self->entry_user_email, NULL, HILDON_CAPTION_MANDATORY); - gtk_entry_set_text (GTK_ENTRY (self->entry_user_email), EXAMPLE_EMAIL_ADDRESS); /* Default text. */ + gtk_entry_set_text (GTK_ENTRY (self->entry_user_email), MODEST_EXAMPLE_EMAIL_ADDRESS); /* Default text. */ gtk_widget_show (self->entry_user_email); gtk_box_pack_start (GTK_BOX (box), caption, FALSE, FALSE, MODEST_MARGIN_HALF); g_signal_connect(G_OBJECT(self->entry_user_email), "changed", @@ -622,11 +653,8 @@ create_page_user_details (ModestEasysetupWizardDialog *self) gtk_widget_show (GTK_WIDGET (box)); - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollwin), - box); - gtk_widget_show(scrollwin); - return GTK_WIDGET (scrollwin); + return GTK_WIDGET (box); } static GtkWidget* create_page_complete_easysetup (ModestEasysetupWizardDialog *self) @@ -635,26 +663,23 @@ 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); gtk_widget_show (label); gtk_widget_show (GTK_WIDGET (box)); - return GTK_WIDGET (box); } @@ -717,17 +742,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 *scrollwin = gtk_scrolled_window_new(NULL, NULL); + GtkWidget *scrolled_window = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), - GTK_POLICY_NEVER, - GTK_POLICY_AUTOMATIC); + 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); @@ -737,8 +761,7 @@ static GtkWidget* create_page_custom_incoming (ModestEasysetupWizardDialog *self GtkSizeGroup *sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); /* The incoming server widgets: */ - if (!self->combo_incoming_servertype) - self->combo_incoming_servertype = GTK_WIDGET (easysetup_servertype_combo_box_new ()); + self->combo_incoming_servertype = GTK_WIDGET (easysetup_servertype_combo_box_new ()); easysetup_servertype_combo_box_set_active_servertype ( EASYSETUP_SERVERTYPE_COMBO_BOX (self->combo_incoming_servertype), MODEST_PROTOCOL_STORE_POP); GtkWidget *caption = create_caption_new_with_asterisk (self, sizegroup, @@ -747,19 +770,12 @@ static GtkWidget* create_page_custom_incoming (ModestEasysetupWizardDialog *self gtk_box_pack_start (GTK_BOX (box), caption, FALSE, FALSE, MODEST_MARGIN_HALF); gtk_widget_show (caption); - if(!self->entry_incomingserver) - { - self->entry_incomingserver = gtk_entry_new (); - g_signal_connect(G_OBJECT(self->entry_incomingserver), "changed", - G_CALLBACK(on_easysetup_changed), self); - } + self->entry_incomingserver = gtk_entry_new (); + g_signal_connect(G_OBJECT(self->entry_incomingserver), "changed", G_CALLBACK(on_easysetup_changed), self); /* Auto-capitalization is the default, so let's turn it off: */ hildon_gtk_entry_set_input_mode (GTK_ENTRY (self->entry_incomingserver), HILDON_GTK_INPUT_MODE_FULL); set_default_custom_servernames (self); - if (self->caption_incoming) - gtk_widget_destroy (self->caption_incoming); - /* The caption title will be updated in update_incoming_server_title(). * so this default text will never be seen: */ /* (Note: Changing the title seems pointless. murrayc) */ @@ -780,8 +796,7 @@ static GtkWidget* create_page_custom_incoming (ModestEasysetupWizardDialog *self G_CALLBACK (on_entry_incoming_servername_changed), self); /* The secure connection widgets: */ - if (!self->combo_incoming_security) - self->combo_incoming_security = GTK_WIDGET (modest_serversecurity_combo_box_new ()); + self->combo_incoming_security = GTK_WIDGET (modest_serversecurity_combo_box_new ()); update_incoming_server_security_choices (self); modest_serversecurity_combo_box_set_active_serversecurity ( MODEST_SERVERSECURITY_COMBO_BOX (self->combo_incoming_security), MODEST_PROTOCOL_CONNECTION_NORMAL); @@ -793,12 +808,9 @@ static GtkWidget* create_page_custom_incoming (ModestEasysetupWizardDialog *self gtk_box_pack_start (GTK_BOX (box), caption, FALSE, FALSE, MODEST_MARGIN_HALF); gtk_widget_show (caption); - if(!self->checkbox_incoming_auth) - { - self->checkbox_incoming_auth = gtk_check_button_new (); - g_signal_connect (G_OBJECT (self->checkbox_incoming_auth), "toggled", + self->checkbox_incoming_auth = gtk_check_button_new (); + g_signal_connect (G_OBJECT (self->checkbox_incoming_auth), "toggled", G_CALLBACK (on_easysetup_changed), self); - } caption = hildon_caption_new (sizegroup, _("mcen_li_emailsetup_secure_authentication"), self->checkbox_incoming_auth, NULL, HILDON_CAPTION_OPTIONAL); @@ -807,11 +819,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(scrollwin), - box); - gtk_widget_show(scrollwin); + + 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 (scrollwin); + return GTK_WIDGET (scrolled_window); } static void @@ -850,12 +864,12 @@ 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: */ gtk_window_set_transient_for (GTK_WINDOW (self->specific_window), GTK_WINDOW (self)); + gtk_window_set_modal (GTK_WINDOW (self->specific_window), TRUE); gtk_widget_show (self->specific_window); } @@ -869,12 +883,6 @@ static void on_entry_outgoing_servername_changed (GtkEntry *entry, gpointer user static GtkWidget* create_page_custom_outgoing (ModestEasysetupWizardDialog *self) { GtkWidget *box = gtk_vbox_new (FALSE, MODEST_MARGIN_NONE); - GtkWidget *scrollwin = gtk_scrolled_window_new(NULL, NULL); - - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), - GTK_POLICY_NEVER, - GTK_POLICY_AUTOMATIC); - /* Create a size group to be used by all captions. * Note that HildonCaption does not create a default size group if we do not specify one. @@ -882,12 +890,9 @@ static GtkWidget* create_page_custom_outgoing (ModestEasysetupWizardDialog *self GtkSizeGroup *sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); /* The outgoing server widgets: */ - if (!self->entry_outgoingserver) - { - self->entry_outgoingserver = gtk_entry_new (); - g_signal_connect (G_OBJECT (self->entry_outgoingserver), "changed", - G_CALLBACK (on_easysetup_changed), self); - } + self->entry_outgoingserver = gtk_entry_new (); + g_signal_connect (G_OBJECT (self->entry_outgoingserver), "changed", + G_CALLBACK (on_easysetup_changed), self); /* Auto-capitalization is the default, so let's turn it off: */ hildon_gtk_entry_set_input_mode (GTK_ENTRY (self->entry_outgoingserver), HILDON_GTK_INPUT_MODE_FULL); GtkWidget *caption = create_caption_new_with_asterisk (self, sizegroup, @@ -898,12 +903,9 @@ static GtkWidget* create_page_custom_outgoing (ModestEasysetupWizardDialog *self set_default_custom_servernames (self); /* The secure connection widgets: */ - if (!self->combo_outgoing_security) - { - self->combo_outgoing_security = GTK_WIDGET (modest_serversecurity_combo_box_new ()); - g_signal_connect (G_OBJECT (self->combo_outgoing_security), "changed", + self->combo_outgoing_security = GTK_WIDGET (modest_serversecurity_combo_box_new ()); + g_signal_connect (G_OBJECT (self->combo_outgoing_security), "changed", G_CALLBACK (on_easysetup_changed), self); - } modest_serversecurity_combo_box_fill ( MODEST_SERVERSECURITY_COMBO_BOX (self->combo_outgoing_security), MODEST_PROTOCOL_TRANSPORT_SMTP); modest_serversecurity_combo_box_set_active_serversecurity ( @@ -915,12 +917,9 @@ static GtkWidget* create_page_custom_outgoing (ModestEasysetupWizardDialog *self gtk_widget_show (caption); /* The secure authentication widgets: */ - if (!self->combo_outgoing_auth) - { - self->combo_outgoing_auth = GTK_WIDGET (modest_secureauth_combo_box_new ()); - g_signal_connect (G_OBJECT (self->combo_outgoing_auth), "changed", + self->combo_outgoing_auth = GTK_WIDGET (modest_secureauth_combo_box_new ()); + g_signal_connect (G_OBJECT (self->combo_outgoing_auth), "changed", G_CALLBACK (on_easysetup_changed), self); - } caption = hildon_caption_new (sizegroup, _("mcen_li_emailsetup_secure_authentication"), self->combo_outgoing_auth, NULL, HILDON_CAPTION_OPTIONAL); gtk_widget_show (self->combo_outgoing_auth); @@ -932,14 +931,12 @@ static GtkWidget* create_page_custom_outgoing (ModestEasysetupWizardDialog *self gtk_widget_show (separator); /* connection-specific checkbox: */ - if (!self->checkbox_outgoing_smtp_specific) { - self->checkbox_outgoing_smtp_specific = gtk_check_button_new (); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->checkbox_outgoing_smtp_specific), - FALSE); - g_signal_connect (G_OBJECT (self->checkbox_outgoing_smtp_specific), "toggled", - G_CALLBACK (on_easysetup_changed), self); + self->checkbox_outgoing_smtp_specific = gtk_check_button_new (); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->checkbox_outgoing_smtp_specific), + FALSE); + g_signal_connect (G_OBJECT (self->checkbox_outgoing_smtp_specific), "toggled", + G_CALLBACK (on_easysetup_changed), self); - } caption = hildon_caption_new (sizegroup, _("mcen_fi_advsetup_connection_smtp"), self->checkbox_outgoing_smtp_specific, NULL, HILDON_CAPTION_OPTIONAL); gtk_widget_show (self->checkbox_outgoing_smtp_specific); @@ -947,8 +944,7 @@ static GtkWidget* create_page_custom_outgoing (ModestEasysetupWizardDialog *self gtk_widget_show (caption); /* Connection-specific SMTP-Severs Edit button: */ - if (!self->button_outgoing_smtp_servers) - self->button_outgoing_smtp_servers = gtk_button_new_with_label (_("mcen_bd_edit")); + self->button_outgoing_smtp_servers = gtk_button_new_with_label (_("mcen_bd_edit")); caption = hildon_caption_new (sizegroup, _("mcen_fi_advsetup_optional_smtp"), self->button_outgoing_smtp_servers, NULL, HILDON_CAPTION_OPTIONAL); hildon_caption_set_child_expand (HILDON_CAPTION (caption), FALSE); @@ -968,10 +964,8 @@ static GtkWidget* create_page_custom_outgoing (ModestEasysetupWizardDialog *self gtk_widget_show (GTK_WIDGET (box)); - gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(scrollwin), box); - gtk_widget_show(scrollwin); - return GTK_WIDGET (scrollwin); + return GTK_WIDGET (box); } static gboolean @@ -986,7 +980,7 @@ show_advanced_edit(gpointer user_data) ModestAccountSettingsDialog *dialog = modest_account_settings_dialog_new (); modest_account_settings_dialog_set_account_name (dialog, self->saved_account_name); - gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (self)); + modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog)); gtk_dialog_run (GTK_DIALOG (dialog)); @@ -1022,26 +1016,28 @@ 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")); - + GtkWidget *button_edit = gtk_button_new_with_label (_("mcen_bd_edit")); 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); - if (!self->button_edit) - self->button_edit = gtk_button_new_with_label (_("mcen_bd_edit")); GtkWidget *caption = hildon_caption_new (NULL, _("mcen_fi_advanced_settings"), - self->button_edit, NULL, HILDON_CAPTION_OPTIONAL); + button_edit, NULL, HILDON_CAPTION_OPTIONAL); hildon_caption_set_child_expand (HILDON_CAPTION (caption), FALSE); - gtk_widget_show (self->button_edit); + gtk_widget_show (button_edit); gtk_box_pack_start (GTK_BOX (box), caption, FALSE, FALSE, MODEST_MARGIN_HALF); gtk_widget_show (caption); - g_signal_connect (G_OBJECT (self->button_edit), "clicked", + g_signal_connect (G_OBJECT (button_edit), "clicked", G_CALLBACK (on_button_edit_advanced_settings), self); gtk_widget_show (GTK_WIDGET (box)); @@ -1061,7 +1057,7 @@ on_response (ModestWizardDialog *wizard_dialog, /* 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); + self->saved_account_name); } } @@ -1078,18 +1074,17 @@ on_response_before (ModestWizardDialog *wizard_dialog, if (response_id == GTK_RESPONSE_CANCEL) { /* This is mostly copied from * src/maemo/modest-account-settings-dialog.c */ - if (priv->dirty) - { + if (priv->dirty) { 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. */ + /* TODO: These button names will be ambiguous, and not + * specified in the UI specification. */ const gint dialog_response = gtk_dialog_run (dialog); + self->combo_account_country = NULL; gtk_widget_destroy (GTK_WIDGET (dialog)); - if (dialog_response != GTK_RESPONSE_OK) - { - /* This is a nasty hack. murrayc. */ + if (dialog_response != GTK_RESPONSE_OK) { /* Don't let the dialog close */ g_signal_stop_emission_by_name (wizard_dialog, "response"); } @@ -1097,6 +1092,78 @@ on_response_before (ModestWizardDialog *wizard_dialog, } } +typedef struct IdleData { + ModestEasysetupWizardDialog *dialog; + ModestPresets *presets; +} IdleData; + +gboolean +presets_idle (gpointer userdata) +{ + IdleData *idle_data = (IdleData *) userdata; + ModestEasysetupWizardDialog *self = MODEST_EASYSETUP_WIZARD_DIALOG (idle_data->dialog); + ModestEasysetupWizardDialogPrivate *priv = WIZARD_DIALOG_GET_PRIVATE (self); + + g_assert (idle_data->presets); + + gdk_threads_enter (); + + priv->presets = idle_data->presets; + + if (self->combo_account_country) { + 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, mcc); + } + + priv->dirty = FALSE; + + g_object_unref (idle_data->dialog); + g_free (idle_data); + + gdk_threads_leave (); + + return FALSE; +} + +gpointer +presets_loader (gpointer userdata) +{ + ModestEasysetupWizardDialog *self = MODEST_EASYSETUP_WIZARD_DIALOG (userdata); + ModestPresets *presets = NULL; + IdleData *idle_data; + + const gchar* path = NULL; + const gchar* path1 = MODEST_PROVIDER_DATA_FILE; + const gchar* path2 = MODEST_MAEMO_PROVIDER_DATA_FILE; + + if (access(path1, R_OK) == 0) + path = path1; + else if (access(path2, R_OK) == 0) + path = path2; + else { + g_warning ("%s: neither '%s' nor '%s' is a readable provider data file", + __FUNCTION__, path1, path2); + return NULL; + } + + presets = modest_presets_new (path); + if (!presets) { + g_warning ("%s: failed to parse '%s'", __FUNCTION__, path); + return NULL; + } + + idle_data = g_new0 (IdleData, 1); + idle_data->dialog = self; + idle_data->presets = presets; + + g_idle_add (presets_idle, idle_data); + + return NULL; +} + static void modest_easysetup_wizard_dialog_init (ModestEasysetupWizardDialog *self) { @@ -1116,14 +1183,6 @@ modest_easysetup_wizard_dialog_init (ModestEasysetupWizardDialog *self) /* Read in the information about known service providers: */ ModestEasysetupWizardDialogPrivate *priv = WIZARD_DIALOG_GET_PRIVATE (self); - const gchar* filepath = MODEST_PROVIDERS_DATA_PATH; /* Defined in config.h */ - priv->presets = modest_presets_new (filepath); - if (!(priv->presets)) { - g_warning ("Could not locate the official provider data keyfile from %s", filepath); - } - - g_assert(priv->presets); - /* The server fields did not have been manually changed yet */ priv->server_changes = 0; @@ -1143,10 +1202,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: */ @@ -1174,6 +1250,9 @@ modest_easysetup_wizard_dialog_init (ModestEasysetupWizardDialog *self) g_signal_connect (G_OBJECT (self), "response", G_CALLBACK (on_response_before), self); + g_signal_connect (G_OBJECT (self), "delete-event", + G_CALLBACK (on_delete_event), self); + /* Reset dirty, because there was no user input until now */ priv->dirty = FALSE; @@ -1181,11 +1260,19 @@ modest_easysetup_wizard_dialog_init (ModestEasysetupWizardDialog *self) * because there is no sensible way to save the state: */ modest_window_mgr_prevent_hibernation_while_window_is_shown ( modest_runtime_get_window_mgr (), GTK_WINDOW (self)); + + /* Load provider presets */ + g_object_ref (self); + g_thread_create (presets_loader, self, FALSE, NULL); + + hildon_help_dialog_help_enable (GTK_DIALOG(self), "applications_email_wizardwelcome", + modest_maemo_utils_get_osso_context()); } ModestEasysetupWizardDialog* modest_easysetup_wizard_dialog_new (void) -{ +{ + return g_object_new (MODEST_TYPE_EASYSETUP_WIZARD_DIALOG, NULL); } @@ -1216,9 +1303,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)); @@ -1234,9 +1327,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)); @@ -1267,11 +1366,21 @@ static void create_subsequent_pages (ModestEasysetupWizardDialog *self) if(self->page_custom_incoming) { gtk_widget_destroy (self->page_custom_incoming); self->page_custom_incoming = NULL; + self->combo_incoming_servertype = NULL; + self->caption_incoming = NULL; + self->entry_incomingserver = NULL; + self->combo_incoming_security = NULL; + self->checkbox_incoming_auth = NULL; } if(self->page_custom_outgoing) { gtk_widget_destroy (self->page_custom_outgoing); self->page_custom_outgoing = NULL; + self->entry_outgoingserver = NULL; + self->combo_outgoing_security = NULL; + self->combo_outgoing_auth = NULL; + self->checkbox_outgoing_smtp_specific = NULL; + self->button_outgoing_smtp_servers = NULL; } if(self->page_complete_customsetup) { @@ -1361,6 +1470,30 @@ static void set_default_custom_servernames (ModestEasysetupWizardDialog *account } } +static gchar* +get_entered_account_title (ModestEasysetupWizardDialog *account_wizard) +{ + const gchar* account_title = + gtk_entry_get_text (GTK_ENTRY (account_wizard->entry_account_title)); + if (!account_title || (strlen (account_title) == 0)) + return NULL; + else { + /* Strip it of whitespace at the start and end: */ + gchar *result = g_strdup (account_title); + result = g_strstrip (result); + + if (!result) + return NULL; + + if (strlen (result) == 0) { + g_free (result); + return NULL; + } + + return result; + } +} + static gboolean on_before_next (ModestWizardDialog *dialog, GtkWidget *current_page, GtkWidget *next_page) { @@ -1372,8 +1505,8 @@ on_before_next (ModestWizardDialog *dialog, GtkWidget *current_page, GtkWidget * */ if (current_page == account_wizard->page_account_details) { /* Check that the title is not already in use: */ - const gchar* account_title = gtk_entry_get_text (GTK_ENTRY (account_wizard->entry_account_title)); - if ((!account_title) || (strlen(account_title) == 0)) + gchar* account_title = get_entered_account_title (account_wizard); + if (!account_title) return FALSE; /* Aavoid a clash with an existing display name: */ @@ -1417,7 +1550,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 ( @@ -1426,13 +1560,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); } } @@ -1463,8 +1592,19 @@ static gboolean entry_is_empty (GtkWidget *entry) const gchar* text = gtk_entry_get_text (GTK_ENTRY (entry)); if ((!text) || (strlen(text) == 0)) return TRUE; - else - return FALSE; + else { + /* Strip it of whitespace at the start and end: */ + gchar *stripped = g_strdup (text); + stripped = g_strstrip (stripped); + + if (!stripped) + return TRUE; + + const gboolean result = (strlen (stripped) == 0); + + g_free (stripped); + return result; + } } static void @@ -1547,6 +1687,7 @@ modest_easysetup_wizard_dialog_class_init (ModestEasysetupWizardDialogClass *kla static void show_error (GtkWidget *parent_widget, const gchar* text) { + //TODO: Apparently this doesn't show anything in Maemo Bora: hildon_banner_show_information(parent_widget, NULL, text); #if 0 @@ -1567,12 +1708,12 @@ 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); - - const gchar* display_name = gtk_entry_get_text (GTK_ENTRY (self->entry_account_title)); + guint special_port; + gchar* display_name = get_entered_account_title (self); /* Some checks: */ if (!display_name) @@ -1582,8 +1723,10 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled) * and changed that name accordingly, * but let's check again just in case: */ - if (modest_account_mgr_account_with_display_name_exists (self->account_manager, display_name)) + if (modest_account_mgr_account_with_display_name_exists (self->account_manager, display_name)) { + g_free (display_name); return FALSE; + } /* Increment the non-user visible name if necessary, * based on the display name: */ @@ -1619,7 +1762,6 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled) provider_id, TRUE /* incoming */); - g_warning ("security incoming: %x", security_incoming); /* We don't check for SMTP here as that is impossible for an incoming server. */ if (servertype_incoming == MODEST_PRESETS_SERVER_TYPE_IMAP) { @@ -1651,16 +1793,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) - 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. @@ -1671,6 +1809,13 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled) gchar *store_name = modest_account_mgr_get_unused_account_name (self->account_manager, store_name_start, TRUE /* server account */); g_free (store_name_start); + + /* we check if there is a *special* port */ + special_port = modest_presets_get_port (priv->presets, provider_id, + TRUE /* incoming */); + if (special_port != 0) + serverport_incoming = special_port; + gboolean created = modest_account_mgr_add_server_account (self->account_manager, store_name, servername_incoming, @@ -1685,6 +1830,7 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled) if (!created) { /* TODO: Provide a Logical ID for the text: */ show_error (GTK_WIDGET (self), _("An error occurred while creating the incoming account.")); + g_free (display_name); return FALSE; } @@ -1713,10 +1859,6 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled) modest_presets_get_info_server_security (priv->presets, provider_id, FALSE /* incoming */); - /* TODO: The secure-smtp information in the presets data is currently wrong, - * so we choose a reasonable default. Remove this when the presets data is corrected: */ - security_outgoing = security_outgoing & MODEST_PRESETS_SECURITY_SECURE_SMTP; - protocol_security_outgoing = MODEST_PROTOCOL_CONNECTION_NORMAL; if (security_outgoing & MODEST_PRESETS_SECURITY_SECURE_SMTP) { /* printf("DEBUG: %s: using secure SMTP\n", __FUNCTION__); */ @@ -1727,8 +1869,7 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled) /* printf("DEBUG: %s: using non-secure SMTP\n", __FUNCTION__); */ protocol_authentication_outgoing = MODEST_PROTOCOL_AUTH_NONE; } - } - else { + } else { /* Use custom pages because no preset was specified: */ servername_outgoing = g_strdup (gtk_entry_get_text (GTK_ENTRY (self->entry_outgoingserver) )); @@ -1746,6 +1887,13 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled) gchar *transport_name = modest_account_mgr_get_unused_account_name (self->account_manager, transport_name_start, TRUE /* server account */); g_free (transport_name_start); + + /* we check if there is a *special* port */ + special_port = modest_presets_get_port (priv->presets, provider_id, + FALSE /* incoming */); + if (special_port != 0) + serverport_outgoing = special_port; + created = modest_account_mgr_add_server_account (self->account_manager, transport_name, servername_outgoing, @@ -1760,14 +1908,23 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled) if (!created) { /* TODO: Provide a Logical ID for the text: */ show_error (GTK_WIDGET (self), _("An error occurred while creating the outgoing account.")); + g_free (display_name); return FALSE; } + const gchar* user_fullname = gtk_entry_get_text (GTK_ENTRY (self->entry_user_name)); + const gchar* emailaddress = gtk_entry_get_text (GTK_ENTRY (self->entry_user_email)); + const gchar *retrieve = MODEST_ACCOUNT_RETRIEVE_VALUE_HEADERS_ONLY; /* Create the account, which will contain the two "server accounts": */ - created = modest_account_mgr_add_account (self->account_manager, account_name, - store_name, /* The name of our POP/IMAP server account. */ - transport_name, /* The name of our SMTP server account. */ + created = modest_account_mgr_add_account (self->account_manager, + account_name, + display_name, + user_fullname, + emailaddress, + retrieve, + store_name, + transport_name, enabled); g_free (store_name); g_free (transport_name); @@ -1775,6 +1932,7 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled) if (!created) { /* TODO: Provide a Logical ID for the text: */ show_error (GTK_WIDGET (self), _("An error occurred while creating the account.")); + g_free (display_name); return FALSE; } @@ -1785,34 +1943,20 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled) if(!modest_account_mgr_has_accounts (self->account_manager, FALSE)) g_warning ("modest_account_mgr_account_names() returned NULL after adding an account."); - /* 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 */); - - 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 */); - - /* Set the display name: */ - modest_account_mgr_set_string (self->account_manager, account_name, - MODEST_ACCOUNT_DISPLAY_NAME, display_name, FALSE /* not server account */); - - /* 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 */); - /* Save the connection-specific SMTP server accounts. */ + 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); g_free (account_name); - + g_free (display_name); + return result; }