X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fhildon2%2Fmodest-easysetup-wizard-dialog.c;h=a6ef66f8fb88891c06911d70a9395124739f7aea;hb=ef535327e9df3e859f600bcde67da569f85c1536;hp=d32e8ed6d5615f07ca5efa93aaaf2e2c5a6c3d19;hpb=f21b7614601c08eed2e3ffd68ef870d28f10c832;p=modest diff --git a/src/hildon2/modest-easysetup-wizard-dialog.c b/src/hildon2/modest-easysetup-wizard-dialog.c index d32e8ed..a6ef66f 100644 --- a/src/hildon2/modest-easysetup-wizard-dialog.c +++ b/src/hildon2/modest-easysetup-wizard-dialog.c @@ -36,12 +36,8 @@ #include #include #include -#include #include #include -#include "modest-country-picker.h" -#include "modest-provider-picker.h" -#include "modest-servertype-picker.h" #include "widgets/modest-validating-entry.h" #include "modest-text-utils.h" #include "modest-conf.h" @@ -60,6 +56,8 @@ #include "modest-maemo-security-options-view.h" #include "modest-account-protocol.h" #include "modest-address-book.h" +#include +#include /* Include config.h so that _() works: */ #ifdef HAVE_CONFIG_H @@ -106,12 +104,15 @@ struct _ModestEasysetupWizardDialogPrivate GtkWidget *page_welcome; gboolean check_support_done; guint check_support_show_progress_id; + guint check_support_progress_pulse_id; + GtkWidget *check_support_cancel_note; + GtkWidget *check_support_progress; gint pending_check_support; gboolean destroyed; GtkWidget *page_account_details; - GtkWidget *account_country_picker; - GtkWidget *account_serviceprovider_picker; + GtkWidget *account_country_selector; + GtkWidget *account_serviceprovider_selector; GtkWidget *entry_account_title; GtkWidget *caption_account_title; @@ -124,7 +125,7 @@ struct _ModestEasysetupWizardDialogPrivate GtkWidget *page_complete_easysetup; GtkWidget *page_custom_incoming; - GtkWidget *incoming_servertype_picker; + GtkWidget *incoming_servertype_selector; GtkWidget *caption_incoming; GtkWidget *entry_incomingserver; @@ -154,6 +155,7 @@ static void check_support_callback (ModestAccountProtocol *protocol, gpointer userdata); static void check_support_of_protocols (ModestEasysetupWizardDialog *self); static gboolean check_support_show_progress (gpointer userdata); +static gboolean check_support_progress_pulse (gpointer userdata); static gboolean on_delete_event (GtkWidget *widget, @@ -183,6 +185,11 @@ modest_easysetup_wizard_dialog_dispose (GObject *object) priv->check_support_show_progress_id = 0; } + if (priv->check_support_progress_pulse_id > 0) { + g_source_remove (priv->check_support_progress_pulse_id); + priv->check_support_progress_pulse_id = 0; + } + if (G_OBJECT_CLASS (modest_easysetup_wizard_dialog_parent_class)->dispose) G_OBJECT_CLASS (modest_easysetup_wizard_dialog_parent_class)->dispose (object); } @@ -192,6 +199,26 @@ modest_easysetup_wizard_dialog_finalize (GObject *object) { ModestEasysetupWizardDialog *self = MODEST_EASYSETUP_WIZARD_DIALOG (object); ModestEasysetupWizardDialogPrivate *priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self); + ModestProtocolRegistry *registry; + GSList *provider_protos, *node; + + registry = modest_runtime_get_protocol_registry (); + provider_protos = modest_protocol_registry_get_by_tag (registry, + MODEST_PROTOCOL_REGISTRY_PROVIDER_PROTOCOLS); + + for (node = provider_protos; node != NULL; node = g_slist_next (node)) { + ModestProtocol *proto = MODEST_PROTOCOL (node->data); + + if (!modest_protocol_registry_protocol_type_has_tag (registry, + modest_protocol_get_type_id (proto), + MODEST_PROTOCOL_REGISTRY_STORE_PROTOCOLS)) + continue; + + if (MODEST_ACCOUNT_PROTOCOL (proto)) { + modest_account_protocol_wizard_finished (MODEST_ACCOUNT_PROTOCOL (proto)); + } + } + g_slist_free (provider_protos); if (priv->account_manager) g_object_unref (G_OBJECT (priv->account_manager)); @@ -216,7 +243,9 @@ create_subsequent_easysetup_pages (ModestEasysetupWizardDialog *self); static void set_default_custom_servernames(ModestEasysetupWizardDialog *dialog); +#ifdef HILDON_PICKER_BUTTON static void on_servertype_selector_changed(HildonTouchSelector *selector, gint column, gpointer user_data); +#endif static gint get_port_from_protocol (ModestProtocolType server_type, @@ -277,7 +306,7 @@ on_caption_combobox_changed (GtkComboBox *widget, gpointer user_data) } static void -on_picker_button_value_changed (HildonPickerButton *widget, gpointer user_data) +on_picker_button_value_changed (GtkWidget *widget, gpointer user_data) { ModestEasysetupWizardDialog *self = MODEST_EASYSETUP_WIZARD_DIALOG (user_data); g_assert(self); @@ -285,13 +314,13 @@ on_picker_button_value_changed (HildonPickerButton *widget, gpointer user_data) } static void -on_serviceprovider_picker_button_value_changed (HildonPickerButton *widget, gpointer user_data) +on_serviceprovider_selector_value_changed (GtkWidget *widget, gpointer user_data) { gchar* default_account_name_start; gchar* default_account_name; ModestEasysetupWizardDialog *self; ModestEasysetupWizardDialogPrivate *priv; - ModestProviderPickerIdType provider_id_type; + ModestProviderSelectorIdType provider_id_type; ModestProtocol *protocol; gchar *proto_name; ModestProtocolType proto_type; @@ -300,19 +329,15 @@ on_serviceprovider_picker_button_value_changed (HildonPickerButton *widget, gpoi self = MODEST_EASYSETUP_WIZARD_DIALOG (user_data); priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self); - on_picker_button_value_changed (widget, user_data); + on_picker_button_value_changed (GTK_WIDGET (widget), user_data); - provider_id_type = modest_provider_picker_get_active_id_type ( - MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker)); - if (provider_id_type == MODEST_PROVIDER_PICKER_ID_OTHER) { + provider_id_type = modest_provider_selector_get_active_id_type ( + priv->account_serviceprovider_selector); + if (provider_id_type == MODEST_PROVIDER_SELECTOR_ID_OTHER) { default_account_name_start = g_strdup (_("mcen_ia_emailsetup_defaultname")); } else { - GtkWidget *selector; - - selector = GTK_WIDGET (hildon_picker_button_get_selector (HILDON_PICKER_BUTTON (widget))); - default_account_name_start = - g_strdup (hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector))); - + /* obtain properly the account name! */ + default_account_name_start = modest_provider_selector_get_active_provider_label (widget); } default_account_name = modest_account_mgr_get_unused_account_display_name ( priv->account_manager, default_account_name_start); @@ -320,7 +345,7 @@ on_serviceprovider_picker_button_value_changed (HildonPickerButton *widget, gpoi default_account_name_start = NULL; hide_account_title = FALSE; - proto_name = modest_provider_picker_get_active_provider_id (MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker)); + proto_name = modest_provider_selector_get_active_provider_id (priv->account_serviceprovider_selector); if (proto_name != NULL) { protocol = modest_protocol_registry_get_protocol_by_name (modest_runtime_get_protocol_registry (), MODEST_PROTOCOL_REGISTRY_PROVIDER_PROTOCOLS, @@ -344,7 +369,7 @@ on_serviceprovider_picker_button_value_changed (HildonPickerButton *widget, gpoi else gtk_widget_show (priv->caption_account_title); - hildon_entry_set_text (HILDON_ENTRY (priv->entry_account_title), default_account_name); + modest_entry_set_text (priv->entry_account_title, default_account_name); g_free (default_account_name); } @@ -387,27 +412,41 @@ create_page_welcome (ModestEasysetupWizardDialog *self) GtkWidget *box; GtkWidget *align; GtkWidget *label; + GtkWidget *privacy_note; + GtkWidget *scrollable; ModestEasysetupWizardDialogPrivate *priv; priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self); box = gtk_vbox_new (FALSE, MODEST_MARGIN_NONE); + scrollable = modest_toolkit_factory_create_scrollable (modest_runtime_get_toolkit_factory ()); label = gtk_label_new(_("mcen_ia_emailsetup_intro")); + privacy_note = gtk_label_new (_("mcen_ia_privacy_notice")); align = gtk_alignment_new (0.0, 0.0, 1.0, 1.0); gtk_alignment_set_padding (GTK_ALIGNMENT (align), 0, 0, MODEST_MARGIN_DOUBLE, 0); gtk_widget_set_size_request (label, LABELS_WIDTH, -1); gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); + gtk_widget_set_size_request (privacy_note, LABELS_WIDTH, -1); + gtk_label_set_line_wrap (GTK_LABEL (privacy_note), TRUE); + hildon_helper_set_logical_font (privacy_note, "SmallSystemFont"); /* So that it is not truncated: */ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0); gtk_misc_set_padding (GTK_MISC (label), MODEST_MARGIN_DOUBLE, MODEST_MARGIN_DOUBLE); - gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (box), privacy_note, FALSE, FALSE, 0); gtk_container_add (GTK_CONTAINER (align), box); gtk_widget_show (label); + gtk_widget_show (privacy_note); + + modest_scrollable_add_with_viewport (MODEST_SCROLLABLE (scrollable), align); gtk_widget_show (GTK_WIDGET (box)); - return GTK_WIDGET (align); + gtk_widget_show (GTK_WIDGET (align)); + gtk_widget_show (scrollable); + + return GTK_WIDGET (scrollable); } static void -on_account_country_selector_changed (HildonTouchSelector *widget, gpointer user_data) +on_account_country_selector_changed (GtkWidget *widget, gpointer user_data) { ModestEasysetupWizardDialog *self = MODEST_EASYSETUP_WIZARD_DIALOG (user_data); g_assert(self); @@ -415,12 +454,10 @@ on_account_country_selector_changed (HildonTouchSelector *widget, gpointer user_ priv->dirty = TRUE; - /* Fill the providers picker, based on the selected country: */ + /* Fill the providers selector, based on the selected country: */ if (priv->presets != NULL) { - gint mcc = modest_country_picker_get_active_country_mcc ( - MODEST_COUNTRY_PICKER (priv->account_country_picker)); - modest_provider_picker_fill ( - MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker), priv->presets, mcc); + gint mcc = modest_country_selector_get_active_country_mcc (priv->account_country_selector); + modest_provider_selector_fill (priv->account_serviceprovider_selector, priv->presets, mcc); } } @@ -434,8 +471,8 @@ update_user_email_from_provider (ModestEasysetupWizardDialog *self) priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self); /* Fill the providers combo, based on the selected country: */ - provider_id = modest_provider_picker_get_active_provider_id ( - MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker)); + provider_id = modest_provider_selector_get_active_provider_id ( + priv->account_serviceprovider_selector); if (provider_id) { gchar *domain_name = modest_presets_get_domain (priv->presets, provider_id); @@ -448,14 +485,28 @@ update_user_email_from_provider (ModestEasysetupWizardDialog *self) with_at = g_strdup (MODEST_EXAMPLE_EMAIL_ADDRESS); if (priv->entry_user_email) - hildon_entry_set_text (HILDON_ENTRY (priv->entry_user_email), with_at); + modest_entry_set_text (priv->entry_user_email, with_at); g_free (with_at); g_free (provider_id); } +#ifdef HILDON_PICKER_BUTTON static void -on_account_serviceprovider_selector_changed (HildonTouchSelector *widget, gint column, gpointer user_data) +on_account_serviceprovider_selector_changed (GtkWidget *widget, gint column, gpointer user_data) +{ + ModestEasysetupWizardDialog *self = MODEST_EASYSETUP_WIZARD_DIALOG (user_data); + g_assert(self); + ModestEasysetupWizardDialogPrivate *priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self); + + priv->dirty = TRUE; + + update_user_email_from_provider (self); +} +#endif + +static void +on_account_serviceprovider_selector_combo_box_changed (GtkWidget *widget, gpointer user_data) { ModestEasysetupWizardDialog *self = MODEST_EASYSETUP_WIZARD_DIALOG (user_data); g_assert(self); @@ -494,25 +545,47 @@ create_page_account_details (ModestEasysetupWizardDialog *self) GtkSizeGroup* value_sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); /* The country widgets: */ - priv->account_country_picker = GTK_WIDGET (modest_country_picker_new (MODEST_EDITABLE_SIZE, - HILDON_BUTTON_ARRANGEMENT_HORIZONTAL)); - modest_maemo_utils_set_hbutton_layout (title_sizegroup, value_sizegroup, - _("mcen_fi_country"), priv->account_country_picker); - g_signal_connect (G_OBJECT (priv->account_country_picker), "value-changed", - G_CALLBACK (on_picker_button_value_changed), self); - gtk_box_pack_start (GTK_BOX (box), priv->account_country_picker, FALSE, FALSE, MODEST_MARGIN_HALF); - gtk_widget_show (priv->account_country_picker); + priv->account_country_selector = modest_toolkit_factory_create_country_selector (modest_runtime_get_toolkit_factory ()); + if (GTK_IS_COMBO_BOX (priv->account_country_selector)) { + GtkWidget *captioned; + g_signal_connect (G_OBJECT (priv->account_country_selector), "changed", + G_CALLBACK (on_picker_button_value_changed), self); + captioned = modest_maemo_utils_create_captioned (title_sizegroup, value_sizegroup, + _("mcen_fi_country"), FALSE, + priv->account_country_selector); + + gtk_box_pack_start (GTK_BOX (box), captioned, FALSE, FALSE, MODEST_MARGIN_HALF); + gtk_widget_show (captioned); + } else { + modest_maemo_utils_set_hbutton_layout (title_sizegroup, value_sizegroup, + _("mcen_fi_country"), priv->account_country_selector); + g_signal_connect (G_OBJECT (priv->account_country_selector), "value-changed", + G_CALLBACK (on_picker_button_value_changed), self); + gtk_box_pack_start (GTK_BOX (box), priv->account_country_selector, FALSE, FALSE, MODEST_MARGIN_HALF); + } + gtk_widget_show (priv->account_country_selector); /* The service provider widgets: */ - priv->account_serviceprovider_picker = GTK_WIDGET (modest_provider_picker_new (MODEST_EDITABLE_SIZE, - HILDON_BUTTON_ARRANGEMENT_HORIZONTAL)); - modest_maemo_utils_set_hbutton_layout (title_sizegroup, value_sizegroup, - _("mcen_fi_serviceprovider"), - priv->account_serviceprovider_picker); - g_signal_connect (G_OBJECT (priv->account_serviceprovider_picker), "value-changed", - G_CALLBACK (on_serviceprovider_picker_button_value_changed), self); - gtk_box_pack_start (GTK_BOX (box), priv->account_serviceprovider_picker, FALSE, FALSE, 0); - gtk_widget_show (priv->account_serviceprovider_picker); + priv->account_serviceprovider_selector = modest_toolkit_factory_create_provider_selector (modest_runtime_get_toolkit_factory ()); + if (GTK_IS_COMBO_BOX (priv->account_serviceprovider_selector)) { + GtkWidget *captioned; + g_signal_connect (G_OBJECT (priv->account_serviceprovider_selector), "changed", + G_CALLBACK (on_serviceprovider_selector_value_changed), self); + captioned = modest_maemo_utils_create_captioned (title_sizegroup, value_sizegroup, + _("mcen_fi_serviceprovider"), FALSE, + priv->account_serviceprovider_selector); + + gtk_box_pack_start (GTK_BOX (box), captioned, FALSE, FALSE, MODEST_MARGIN_HALF); + gtk_widget_show (captioned); + } else { + modest_maemo_utils_set_hbutton_layout (title_sizegroup, value_sizegroup, + _("mcen_fi_serviceprovider"), + priv->account_serviceprovider_selector); + g_signal_connect (G_OBJECT (priv->account_serviceprovider_selector), "value-changed", + G_CALLBACK (on_serviceprovider_selector_value_changed), self); + gtk_box_pack_start (GTK_BOX (box), priv->account_serviceprovider_selector, FALSE, FALSE, 0); + } + gtk_widget_show (priv->account_serviceprovider_selector); /* The description widgets: */ priv->entry_account_title = GTK_WIDGET (modest_validating_entry_new ()); @@ -529,7 +602,7 @@ create_page_account_details (ModestEasysetupWizardDialog *self) g_free (default_account_name_start); default_account_name_start = NULL; - hildon_entry_set_text (HILDON_ENTRY (priv->entry_account_title), default_account_name); + modest_entry_set_text (priv->entry_account_title, default_account_name); g_free (default_account_name); default_account_name = NULL; @@ -594,15 +667,15 @@ on_user_username_changed(GtkWidget* widget, ModestEasysetupWizardDialog *self) priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self); /* Work out the user email address */ - provider_id = modest_provider_picker_get_active_provider_id ( - MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker)); + provider_id = modest_provider_selector_get_active_provider_id ( + priv->account_serviceprovider_selector); if (provider_id) { const gchar *current_username; gchar *email_address; gchar *domain_name = modest_presets_get_domain (priv->presets, provider_id); - current_username = hildon_entry_get_text (HILDON_ENTRY (priv->entry_user_username)); + current_username = modest_entry_get_text (priv->entry_user_username); if (current_username && strstr (current_username, "@")) { email_address = g_strdup (current_username); @@ -613,7 +686,7 @@ on_user_username_changed(GtkWidget* widget, ModestEasysetupWizardDialog *self) } /* Update the email address */ - hildon_entry_set_text (HILDON_ENTRY (priv->entry_user_email), email_address); + modest_entry_set_text (priv->entry_user_email, email_address); g_free (email_address); g_free (domain_name); @@ -704,7 +777,7 @@ create_page_user_details (ModestEasysetupWizardDialog *self) on_entry_max, self); /* The password widgets: */ - priv->entry_user_password = hildon_entry_new (MODEST_EDITABLE_SIZE); + priv->entry_user_password = modest_toolkit_factory_create_entry (modest_runtime_get_toolkit_factory ()); /* Auto-capitalization is the default, so let's turn it off: */ hildon_gtk_entry_set_input_mode (GTK_ENTRY (priv->entry_user_password), HILDON_GTK_INPUT_MODE_FULL | HILDON_GTK_INPUT_MODE_INVISIBLE); @@ -797,8 +870,8 @@ update_incoming_server_title (ModestEasysetupWizardDialog *self) priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE(self); protocol_registry = modest_runtime_get_protocol_registry (); - protocol_type = modest_servertype_picker_get_active_servertype ( - MODEST_SERVERTYPE_PICKER (priv->incoming_servertype_picker)); + protocol_type = modest_servertype_selector_get_active_servertype ( + priv->incoming_servertype_selector); /* This could happen when the combo box has still no active iter */ if (protocol_type != MODEST_PROTOCOL_REGISTRY_TYPE_INVALID) { @@ -826,14 +899,12 @@ static void update_incoming_server_security_choices (ModestEasysetupWizardDialog *self) { ModestEasysetupWizardDialogPrivate *priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE(self); - ModestServertypePicker *server_type_picker; + GtkWidget *server_type_selector; ModestProtocolType protocol_type; ModestSecurityOptionsView *view; - server_type_picker = - MODEST_SERVERTYPE_PICKER (priv->incoming_servertype_picker); - protocol_type = - modest_servertype_picker_get_active_servertype (server_type_picker); + server_type_selector = priv->incoming_servertype_selector; + protocol_type = modest_servertype_selector_get_active_servertype (server_type_selector); /* Fill the combo with appropriately titled choices for all those protocols */ @@ -841,6 +912,7 @@ update_incoming_server_security_choices (ModestEasysetupWizardDialog *self) modest_security_options_view_set_server_type (view, protocol_type); } +#ifdef HILDON_PICKER_BUTTON static void on_servertype_selector_changed(HildonTouchSelector *selector, gint column, gpointer user_data) { @@ -858,6 +930,25 @@ on_servertype_selector_changed(HildonTouchSelector *selector, gint column, gpoin set_default_custom_servernames (self); } +#endif + +static void +on_servertype_combo_changed(GtkWidget *selector, gpointer user_data) +{ + ModestEasysetupWizardDialog *self = MODEST_EASYSETUP_WIZARD_DIALOG (user_data); + ModestEasysetupWizardDialogPrivate *priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE(self); + + priv->dirty = TRUE; + + /* Update title */ + update_incoming_server_title (self); + + /* Update security options if needed */ + update_incoming_server_security_choices (self); + gtk_widget_show (priv->incoming_security); + + set_default_custom_servernames (self); +} static void on_entry_incoming_servername_changed(GtkEntry *entry, gpointer user_data) @@ -875,7 +966,7 @@ create_page_custom_incoming (ModestEasysetupWizardDialog *self) ModestEasysetupWizardDialogPrivate* priv; GtkWidget *box; GtkWidget *align; - GtkWidget *pannable; + GtkWidget *scrollable; GtkWidget *label; GtkSizeGroup *title_sizegroup; GtkSizeGroup *value_sizegroup; @@ -884,7 +975,7 @@ create_page_custom_incoming (ModestEasysetupWizardDialog *self) protocol_registry = modest_runtime_get_protocol_registry (); box = gtk_vbox_new (FALSE, MODEST_MARGIN_NONE); - pannable = hildon_pannable_area_new (); + scrollable = modest_toolkit_factory_create_scrollable (modest_runtime_get_toolkit_factory ()); /* Show note that account type cannot be changed in future: */ label = gtk_label_new (_("mcen_ia_emailsetup_account_type")); @@ -902,18 +993,30 @@ create_page_custom_incoming (ModestEasysetupWizardDialog *self) value_sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); /* The incoming server widgets: */ - priv->incoming_servertype_picker = GTK_WIDGET (modest_servertype_picker_new (MODEST_EDITABLE_SIZE, - HILDON_BUTTON_ARRANGEMENT_HORIZONTAL, - TRUE)); - modest_maemo_utils_set_hbutton_layout (title_sizegroup, value_sizegroup, - _("mcen_li_emailsetup_type"), - priv->incoming_servertype_picker); - g_signal_connect (G_OBJECT (priv->incoming_servertype_picker), "value-changed", - G_CALLBACK (on_picker_button_value_changed), self); - gtk_box_pack_start (GTK_BOX (box), priv->incoming_servertype_picker, FALSE, FALSE, 0); - gtk_widget_show (priv->incoming_servertype_picker); - - priv->entry_incomingserver = hildon_entry_new (MODEST_EDITABLE_SIZE); + priv->incoming_servertype_selector = + modest_toolkit_factory_create_servertype_selector (modest_runtime_get_toolkit_factory (), + TRUE); + if (GTK_IS_COMBO_BOX (priv->incoming_servertype_selector)) { + GtkWidget *captioned; + g_signal_connect (G_OBJECT (priv->incoming_servertype_selector), "changed", + G_CALLBACK (on_picker_button_value_changed), self); + captioned = modest_maemo_utils_create_captioned (title_sizegroup, value_sizegroup, + _("mcen_fi_country"), FALSE, + priv->incoming_servertype_selector); + + gtk_box_pack_start (GTK_BOX (box), captioned, FALSE, FALSE, MODEST_MARGIN_HALF); + gtk_widget_show (captioned); + } else { + modest_maemo_utils_set_hbutton_layout (title_sizegroup, value_sizegroup, + _("mcen_li_emailsetup_type"), + priv->incoming_servertype_selector); + g_signal_connect (G_OBJECT (priv->incoming_servertype_selector), "value-changed", + G_CALLBACK (on_picker_button_value_changed), self); + gtk_box_pack_start (GTK_BOX (box), priv->incoming_servertype_selector, FALSE, FALSE, 0); + } + gtk_widget_show (priv->incoming_servertype_selector); + + priv->entry_incomingserver = modest_toolkit_factory_create_entry (modest_runtime_get_toolkit_factory ()); /* Auto-capitalization is the default, so let's turn it off: */ hildon_gtk_entry_set_input_mode (GTK_ENTRY (priv->entry_incomingserver), HILDON_GTK_INPUT_MODE_FULL); @@ -943,27 +1046,34 @@ create_page_custom_incoming (ModestEasysetupWizardDialog *self) gtk_widget_show (priv->incoming_security); /* Set default selection */ - modest_servertype_picker_set_active_servertype ( - MODEST_SERVERTYPE_PICKER (priv->incoming_servertype_picker), - MODEST_PROTOCOLS_STORE_POP); + modest_servertype_selector_set_active_servertype (priv->incoming_servertype_selector, + MODEST_PROTOCOLS_STORE_POP); update_incoming_server_title (self); update_incoming_server_security_choices (self); set_default_custom_servernames (self); /* Change the caption title when the servertype changes, * as in the UI spec: */ - g_signal_connect (G_OBJECT (hildon_picker_button_get_selector (HILDON_PICKER_BUTTON (priv->incoming_servertype_picker))), - "changed", - G_CALLBACK (on_servertype_selector_changed), self); + if (GTK_IS_COMBO_BOX (priv->incoming_servertype_selector)) { + g_signal_connect (priv->incoming_servertype_selector, + "changed", + G_CALLBACK (on_servertype_combo_changed), self); + } else { +#ifdef HILDON_PICKER_BUTTON + g_signal_connect (G_OBJECT (hildon_picker_button_get_selector (HILDON_PICKER_BUTTON (priv->incoming_servertype_selector))), + "changed", + G_CALLBACK (on_servertype_selector_changed), self); +#endif + } align = gtk_alignment_new (0.0, 0.0, 1.0, 1.0); gtk_alignment_set_padding (GTK_ALIGNMENT (align), 0, 0, MODEST_MARGIN_DOUBLE, 0); gtk_widget_show (align); gtk_container_add (GTK_CONTAINER (align), box); - hildon_pannable_area_add_with_viewport (HILDON_PANNABLE_AREA (pannable), align); + modest_scrollable_add_with_viewport (MODEST_SCROLLABLE (scrollable), align); gtk_widget_show (GTK_WIDGET (box)); - gtk_widget_show (pannable); + gtk_widget_show (scrollable); g_object_unref (title_sizegroup); g_object_unref (value_sizegroup); @@ -973,23 +1083,23 @@ create_page_custom_incoming (ModestEasysetupWizardDialog *self) G_CALLBACK(on_easysetup_changed), self); - return GTK_WIDGET (pannable); + return GTK_WIDGET (scrollable); } static void -on_check_button_changed (HildonCheckButton *button, gpointer user_data) +on_check_button_changed (GtkWidget *button, gpointer user_data) { GtkWidget *widget = GTK_WIDGET (user_data); /* Enable the widget only if the check button is active: */ - const gboolean enable = hildon_check_button_get_active (button); + const gboolean enable = modest_togglable_get_active (button); gtk_widget_set_sensitive (widget, enable); } /* Make the sensitivity of a widget depend on a check button. */ static void -enable_widget_for_checkbutton (GtkWidget *widget, HildonCheckButton* button) +enable_widget_for_checkbutton (GtkWidget *widget, GtkWidget* button) { g_signal_connect (G_OBJECT (button), "toggled", G_CALLBACK (on_check_button_changed), widget); @@ -1031,11 +1141,11 @@ create_page_custom_outgoing (ModestEasysetupWizardDialog *self) { ModestEasysetupWizardDialogPrivate *priv; gchar *smtp_caption_label; - GtkWidget *pannable; + GtkWidget *scrollable; GtkWidget *align; GtkWidget *box = gtk_vbox_new (FALSE, MODEST_MARGIN_NONE); - pannable = hildon_pannable_area_new (); + scrollable = modest_toolkit_factory_create_scrollable (modest_runtime_get_toolkit_factory ()); /* 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. @@ -1045,7 +1155,7 @@ create_page_custom_outgoing (ModestEasysetupWizardDialog *self) /* The outgoing server widgets: */ priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self); - priv->entry_outgoingserver = hildon_entry_new (MODEST_EDITABLE_SIZE); + priv->entry_outgoingserver = modest_toolkit_factory_create_entry (modest_runtime_get_toolkit_factory ()); /* Auto-capitalization is the default, so let's turn it off: */ hildon_gtk_entry_set_input_mode (GTK_ENTRY (priv->entry_outgoingserver), HILDON_GTK_INPUT_MODE_FULL); @@ -1072,13 +1182,11 @@ create_page_custom_outgoing (ModestEasysetupWizardDialog *self) gtk_widget_show (separator); /* connection-specific checkbox: */ - priv->checkbox_outgoing_smtp_specific = hildon_check_button_new (HILDON_SIZE_FINGER_HEIGHT); - hildon_check_button_set_active (HILDON_CHECK_BUTTON (priv->checkbox_outgoing_smtp_specific), - FALSE); - gtk_button_set_label (GTK_BUTTON (priv->checkbox_outgoing_smtp_specific), - _("mcen_fi_advsetup_connection_smtp")); - gtk_button_set_alignment (GTK_BUTTON (priv->checkbox_outgoing_smtp_specific), - 0.0, 0.5); + priv->checkbox_outgoing_smtp_specific = modest_toolkit_factory_create_check_button + (modest_runtime_get_toolkit_factory (), + _("mcen_fi_advsetup_connection_smtp")); + modest_togglable_set_active (priv->checkbox_outgoing_smtp_specific, + FALSE); gtk_widget_show (priv->checkbox_outgoing_smtp_specific); gtk_box_pack_start (GTK_BOX (box), priv->checkbox_outgoing_smtp_specific, @@ -1094,7 +1202,7 @@ create_page_custom_outgoing (ModestEasysetupWizardDialog *self) /* Only enable the button when the checkbox is checked: */ enable_widget_for_checkbutton (priv->button_outgoing_smtp_servers, - HILDON_CHECK_BUTTON (priv->checkbox_outgoing_smtp_specific)); + priv->checkbox_outgoing_smtp_specific); g_signal_connect (G_OBJECT (priv->button_outgoing_smtp_servers), "clicked", G_CALLBACK (on_button_outgoing_smtp_servers), self); @@ -1108,9 +1216,9 @@ create_page_custom_outgoing (ModestEasysetupWizardDialog *self) gtk_widget_show (align); gtk_container_add (GTK_CONTAINER (align), box); - hildon_pannable_area_add_with_viewport (HILDON_PANNABLE_AREA (pannable), align); + modest_scrollable_add_with_viewport (MODEST_SCROLLABLE (scrollable), align); gtk_widget_show (GTK_WIDGET (box)); - gtk_widget_show (pannable); + gtk_widget_show (scrollable); g_object_unref (title_sizegroup); g_object_unref (value_sizegroup); @@ -1121,7 +1229,7 @@ create_page_custom_outgoing (ModestEasysetupWizardDialog *self) g_signal_connect (G_OBJECT (priv->checkbox_outgoing_smtp_specific), "toggled", G_CALLBACK (on_easysetup_changed), self); - return GTK_WIDGET (pannable); + return GTK_WIDGET (scrollable); } static gboolean @@ -1246,31 +1354,41 @@ fill_providers (ModestEasysetupWizardDialog *self) { ModestEasysetupWizardDialogPrivate *priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self); - if (MODEST_IS_COUNTRY_PICKER (priv->account_country_picker)) { + if (priv->account_country_selector) { /* gint mcc = get_default_country_code(); */ gint mcc; /* Fill the combo in an idle call, as it takes a lot of time */ - modest_country_picker_load_data( - MODEST_COUNTRY_PICKER (priv->account_country_picker)); + modest_country_selector_load_data(priv->account_country_selector); /* connect to country picker's changed signal, so we can fill the provider picker: */ - g_signal_connect ((GObject *) priv->account_country_picker, - "value-changed", - G_CALLBACK (on_account_country_selector_changed), self); - - modest_country_picker_set_active_country_locale ( - MODEST_COUNTRY_PICKER (priv->account_country_picker)); - mcc = modest_country_picker_get_active_country_mcc ( - MODEST_COUNTRY_PICKER (priv->account_country_picker)); - modest_provider_picker_fill ( - MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker), + if (GTK_IS_COMBO_BOX (priv->account_country_selector)) { + g_signal_connect ((GObject *) priv->account_country_selector, + "changed", + G_CALLBACK (on_account_country_selector_changed), self); + } else { + g_signal_connect ((GObject *) priv->account_country_selector, + "value-changed", + G_CALLBACK (on_account_country_selector_changed), self); + } + + modest_country_selector_set_active_country_locale (priv->account_country_selector); + mcc = modest_country_selector_get_active_country_mcc (priv->account_country_selector); + modest_provider_selector_fill ( + priv->account_serviceprovider_selector, priv->presets, mcc); /* connect to providers picker's changed signal, so we can fill the email address: */ - g_signal_connect (G_OBJECT (hildon_picker_button_get_selector - (HILDON_PICKER_BUTTON (priv->account_serviceprovider_picker))), - "changed", - G_CALLBACK (on_account_serviceprovider_selector_changed), self); - - modest_provider_picker_set_others_provider (MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker)); + if (GTK_IS_COMBO_BOX (priv->account_serviceprovider_selector)) { + g_signal_connect (priv->account_serviceprovider_selector, + "changed", + G_CALLBACK (on_account_serviceprovider_selector_combo_box_changed), self); + } else { +#ifdef HILDON_PICKER_BUTTON + g_signal_connect (G_OBJECT (hildon_picker_button_get_selector + (HILDON_PICKER_BUTTON (priv->account_serviceprovider_selector))), + "changed", + G_CALLBACK (on_account_serviceprovider_selector_changed), self); +#endif + } + modest_provider_selector_set_others_provider (priv->account_serviceprovider_selector); } priv->dirty = FALSE; @@ -1374,7 +1492,7 @@ static void init_incoming_page (ModestEasysetupWizardDialogPrivate *priv) { priv->page_custom_incoming = NULL; - priv->incoming_servertype_picker = NULL; + priv->incoming_servertype_selector = NULL; priv->caption_incoming = NULL; priv->entry_incomingserver = NULL; priv->entry_user_email = NULL; @@ -1424,6 +1542,9 @@ modest_easysetup_wizard_dialog_init (ModestEasysetupWizardDialog *self) /* Initialize fields */ priv->check_support_done = FALSE; priv->check_support_show_progress_id = 0; + priv->check_support_progress_pulse_id = 0; + priv->check_support_cancel_note = NULL; + priv->check_support_progress = NULL; priv->pending_check_support = 0; priv->destroyed = FALSE; priv->page_welcome = create_page_welcome (self); @@ -1484,7 +1605,6 @@ modest_easysetup_wizard_dialog_init (ModestEasysetupWizardDialog *self) priv->settings = modest_account_settings_new (); - check_support_of_protocols (self); } ModestEasysetupWizardDialog* @@ -1610,23 +1730,23 @@ static void create_subsequent_pages (ModestEasysetupWizardDialog *self) { ModestEasysetupWizardDialogPrivate *priv; - ModestProviderPicker *picker; - ModestProviderPickerIdType id_type; + GtkWidget *picker; + ModestProviderSelectorIdType id_type; GtkNotebook *notebook; priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self); - picker = MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker); - id_type = modest_provider_picker_get_active_id_type (picker); + picker = priv->account_serviceprovider_selector; + id_type = modest_provider_selector_get_active_id_type (picker); g_object_get (self, "wizard-notebook", ¬ebook, NULL); /* Remove the response override handler for non-plugin protocols. For plugins it'll be overriden later */ - if (id_type != MODEST_PROVIDER_PICKER_ID_PLUGIN_PROTOCOL) + if (id_type != MODEST_PROVIDER_SELECTOR_ID_PLUGIN_PROTOCOL) modest_wizard_dialog_set_response_override_handler (MODEST_WIZARD_DIALOG (self), NULL); - if (id_type == MODEST_PROVIDER_PICKER_ID_OTHER) { + if (id_type == MODEST_PROVIDER_SELECTOR_ID_OTHER) { /* "Other..." was selected: */ /* If we come from a rollbacked easysetup */ @@ -1656,14 +1776,14 @@ create_subsequent_pages (ModestEasysetupWizardDialog *self) } /* It's a pluggable protocol and not a provider with presets */ - if (id_type == MODEST_PROVIDER_PICKER_ID_PLUGIN_PROTOCOL) { + if (id_type == MODEST_PROVIDER_SELECTOR_ID_PLUGIN_PROTOCOL) { ModestProtocol *protocol; gchar *proto_name; ModestProtocolType proto_type; ModestWizardDialogResponseOverrideFunc response_override; /* Get protocol data */ - proto_name = modest_provider_picker_get_active_provider_id (picker); + proto_name = modest_provider_selector_get_active_provider_id (picker); protocol = modest_protocol_registry_get_protocol_by_name (modest_runtime_get_protocol_registry (), MODEST_PROTOCOL_REGISTRY_PROVIDER_PROTOCOLS, proto_name); @@ -1798,18 +1918,18 @@ set_default_custom_servernames (ModestEasysetupWizardDialog *self) */ if (priv->entry_user_email && ((priv->server_changes & MODEST_EASYSETUP_WIZARD_DIALOG_INCOMING_CHANGED) == 0)) { - const ModestProtocolType protocol_type = modest_servertype_picker_get_active_servertype ( - MODEST_SERVERTYPE_PICKER (priv->incoming_servertype_picker)); + const ModestProtocolType protocol_type = modest_servertype_selector_get_active_servertype ( + priv->incoming_servertype_selector); /* This could happen when the combo box has still no active iter */ if (protocol_type != MODEST_PROTOCOL_REGISTRY_TYPE_INVALID) { - const gchar* email_address = hildon_entry_get_text (HILDON_ENTRY(priv->entry_user_email)); + const gchar* email_address = modest_entry_get_text (priv->entry_user_email); gchar* servername = util_get_default_servername_from_email_address (email_address, protocol_type); /* Do not set the INCOMING_CHANGED flag because of this edit */ g_signal_handlers_block_by_func (G_OBJECT (priv->entry_incomingserver), G_CALLBACK (on_entry_incoming_servername_changed), self); - hildon_entry_set_text (HILDON_ENTRY (priv->entry_incomingserver), servername); + modest_entry_set_text (priv->entry_incomingserver, servername); g_signal_handlers_unblock_by_func (G_OBJECT (priv->entry_incomingserver), G_CALLBACK (on_entry_incoming_servername_changed), self); g_free (servername); @@ -1824,13 +1944,13 @@ set_default_custom_servernames (ModestEasysetupWizardDialog *self) if (priv->entry_user_email && ((priv->server_changes & MODEST_EASYSETUP_WIZARD_DIALOG_OUTGOING_CHANGED) == 0)) { - const gchar* email_address = hildon_entry_get_text (HILDON_ENTRY(priv->entry_user_email)); + const gchar* email_address = modest_entry_get_text (priv->entry_user_email); gchar* servername = util_get_default_servername_from_email_address (email_address, MODEST_PROTOCOLS_TRANSPORT_SMTP); /* Do not set the OUTGOING_CHANGED flag because of this edit */ g_signal_handlers_block_by_func (G_OBJECT (priv->entry_outgoingserver), G_CALLBACK (on_entry_outgoing_servername_changed), self); - hildon_entry_set_text (HILDON_ENTRY (priv->entry_outgoingserver), servername); + modest_entry_set_text (priv->entry_outgoingserver, servername); g_signal_handlers_unblock_by_func (G_OBJECT (priv->entry_outgoingserver), G_CALLBACK (on_entry_outgoing_servername_changed), self); g_free (servername); @@ -1844,7 +1964,7 @@ get_entered_account_title (ModestEasysetupWizardDialog *self) const gchar* account_title; priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE(self); - account_title = hildon_entry_get_text (HILDON_ENTRY (priv->entry_account_title)); + account_title = modest_entry_get_text (priv->entry_account_title); if (!account_title || (g_utf8_strlen (account_title, -1) == 0)) { return NULL; @@ -1883,7 +2003,12 @@ on_before_next (ModestWizardDialog *dialog, GtkWidget *current_page, GtkWidget * * either because it was too slow, * or because it requires interaction: */ - if (current_page == priv->page_account_details) { + if (current_page == priv->page_welcome) { + if (!priv->check_support_done) { + check_support_of_protocols (self); + return priv->check_support_done; + } + } else if (current_page == priv->page_account_details) { /* Check that the title is not already in use: */ gchar* account_title = get_entered_account_title (self); if (!account_title) @@ -1896,7 +2021,7 @@ on_before_next (ModestWizardDialog *dialog, GtkWidget *current_page, GtkWidget * if (name_in_use) { /* Warn the user via a dialog: */ - hildon_banner_show_information(NULL, NULL, _("mail_ib_account_name_already_existing")); + modest_platform_system_banner(NULL, NULL, _("mail_ib_account_name_already_existing")); return FALSE; } @@ -1906,13 +2031,13 @@ on_before_next (ModestWizardDialog *dialog, GtkWidget *current_page, GtkWidget * } else if (current_page == priv->page_user_details) { /* Check that the email address is valud: */ - const gchar* email_address = hildon_entry_get_text (HILDON_ENTRY (priv->entry_user_email)); + const gchar* email_address = modest_entry_get_text (priv->entry_user_email); if ((!email_address) || (g_utf8_strlen (email_address, -1) == 0)) return FALSE; if (!modest_text_utils_validate_email_address (email_address, NULL)) { /* Warn the user via a dialog: */ - hildon_banner_show_information (NULL, NULL, _("mcen_ib_invalid_email")); + modest_platform_system_banner (NULL, NULL, _("mcen_ib_invalid_email")); /* Return focus to the email address entry: */ gtk_widget_grab_focus (priv->entry_user_email); @@ -1981,7 +2106,7 @@ static gboolean entry_is_empty (GtkWidget *entry) if (!entry) return FALSE; - const gchar* text = hildon_entry_get_text (HILDON_ENTRY (entry)); + const gchar* text = modest_entry_get_text (entry); if ((!text) || (g_utf8_strlen (text, -1) == 0)) return TRUE; else { @@ -2030,7 +2155,7 @@ real_enable_buttons (ModestWizardDialog *dialog, gboolean enable_next) /* If the check support is not done then do not enable the wizard to continue */ - enable_next = enable_next && priv->check_support_done; + enable_next = enable_next && priv->pending_check_support == 0; } gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), @@ -2092,6 +2217,35 @@ modest_easysetup_wizard_dialog_class_init (ModestEasysetupWizardDialogClass *kla base_klass->save = on_save; } +static void +check_username_for_provider (const gchar *provider_id, + const gchar *domain, + gchar **username) +{ + gchar *providers_to_check[] = { "ovi.com", "yahoomailplus.com", "hotmail.com" }; + gint i; + gboolean found = FALSE; + gchar *old; + + /* Check if the username contains the @hostname, if not then add it */ + if (strchr (*username, '@')) + return; + + /* Check if it's one of the providers to check */ + for (i = 0; i < G_N_ELEMENTS (providers_to_check) && !found; i++) { + if (!g_ascii_strncasecmp (providers_to_check[i], provider_id, strlen (providers_to_check[i]))) + found = TRUE; + } + + if (!found) + return; + + /* Replace the username */ + old = *username; + *username = g_strconcat (*username, "@", domain, NULL); + g_free (old); +} + /** * save_to_settings: * @self: a #ModestEasysetupWizardDialog @@ -2104,7 +2258,8 @@ save_to_settings (ModestEasysetupWizardDialog *self) ModestEasysetupWizardDialogPrivate *priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self); guint special_port; gchar *provider_id = NULL; - gchar* display_name; + gchar *alternate_username = NULL; + gchar *display_name; const gchar *username, *password; gchar *store_hostname, *transport_hostname; guint store_port, transport_port; @@ -2114,20 +2269,20 @@ save_to_settings (ModestEasysetupWizardDialog *self) ModestProtocolType store_auth_protocol, transport_auth_protocol; ModestServerAccountSettings *store_settings, *transport_settings; const gchar *fullname, *email_address; - ModestProviderPicker *picker; - ModestProviderPickerIdType id_type; + GtkWidget *picker; + ModestProviderSelectorIdType id_type; priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self); - picker = MODEST_PROVIDER_PICKER (priv->account_serviceprovider_picker); + picker = priv->account_serviceprovider_selector; protocol_registry = modest_runtime_get_protocol_registry (); /* Get details from the specified presets: */ - id_type = modest_provider_picker_get_active_id_type (picker); - provider_id = modest_provider_picker_get_active_provider_id (picker); + id_type = modest_provider_selector_get_active_id_type (picker); + provider_id = modest_provider_selector_get_active_provider_id (picker); /* Let the plugin save the settings. We do a return in order to save an indentation level */ - if (id_type == MODEST_PROVIDER_PICKER_ID_PLUGIN_PROTOCOL) { + if (id_type == MODEST_PROVIDER_SELECTOR_ID_PLUGIN_PROTOCOL) { ModestProtocol *protocol; protocol = modest_protocol_registry_get_protocol_by_name ( @@ -2161,8 +2316,8 @@ save_to_settings (ModestEasysetupWizardDialog *self) } /* username and password (for both incoming and outgoing): */ - username = hildon_entry_get_text (HILDON_ENTRY (priv->entry_user_username)); - password = hildon_entry_get_text (HILDON_ENTRY (priv->entry_user_password)); + username = modest_entry_get_text (priv->entry_user_username); + password = modest_entry_get_text (priv->entry_user_password); store_settings = modest_account_settings_get_store_settings (priv->settings); transport_settings = modest_account_settings_get_transport_settings (priv->settings); @@ -2178,6 +2333,8 @@ save_to_settings (ModestEasysetupWizardDialog *self) if (provider_id) { ModestProtocolType store_provider_server_type; gboolean store_provider_use_alternate_port; + gchar *domain = NULL; + /* Use presets: */ store_hostname = modest_presets_get_server (priv->presets, provider_id, TRUE /* store */); @@ -2195,6 +2352,17 @@ save_to_settings (ModestEasysetupWizardDialog *self) provider_id, TRUE /* store */); + + /* This is HORRIBLE, but it seems that somehow it helps users + that do not like to read the user instructions for their + email accounts */ + domain = modest_presets_get_domain (priv->presets, provider_id); + if (domain) { + alternate_username = g_strdup (username); + check_username_for_provider (provider_id, domain, &alternate_username); + g_free (domain); + } + /* We don't check for SMTP here as that is impossible for an incoming server. */ if (store_provider_server_type == MODEST_PROTOCOL_REGISTRY_TYPE_INVALID) store_protocol = MODEST_PROTOCOLS_STORE_POP; @@ -2221,9 +2389,9 @@ save_to_settings (ModestEasysetupWizardDialog *self) modest_server_account_settings_set_port (store_settings, store_port); } else { /* Use custom pages because no preset was specified: */ - store_hostname = g_strdup (hildon_entry_get_text (HILDON_ENTRY (priv->entry_incomingserver) )); - store_protocol = modest_servertype_picker_get_active_servertype ( - MODEST_SERVERTYPE_PICKER (priv->incoming_servertype_picker)); + store_hostname = g_strdup (modest_entry_get_text (priv->entry_incomingserver )); + store_protocol = modest_servertype_selector_get_active_servertype ( + priv->incoming_servertype_selector); modest_security_options_view_save_settings ( MODEST_SECURITY_OPTIONS_VIEW (priv->incoming_security), @@ -2232,7 +2400,7 @@ save_to_settings (ModestEasysetupWizardDialog *self) /* now we store the common store account settings */ modest_server_account_settings_set_hostname (store_settings, store_hostname); - modest_server_account_settings_set_username (store_settings, username); + modest_server_account_settings_set_username (store_settings, (alternate_username) ? alternate_username : username); modest_server_account_settings_set_password (store_settings, password); modest_server_account_settings_set_protocol (store_settings, store_protocol); @@ -2298,7 +2466,7 @@ save_to_settings (ModestEasysetupWizardDialog *self) registry = modest_runtime_get_protocol_registry (); /* Use custom pages because no preset was specified: */ - transport_hostname = g_strdup (hildon_entry_get_text (HILDON_ENTRY (priv->entry_outgoingserver) )); + transport_hostname = g_strdup (modest_entry_get_text (priv->entry_outgoingserver )); store_proto = modest_protocol_registry_get_protocol_by_type (registry, store_protocol); @@ -2318,15 +2486,17 @@ save_to_settings (ModestEasysetupWizardDialog *self) /* now we store the common transport account settings */ modest_server_account_settings_set_hostname (transport_settings, transport_hostname); - modest_server_account_settings_set_username (transport_settings, username); + modest_server_account_settings_set_username (transport_settings, (alternate_username) ? alternate_username : username); modest_server_account_settings_set_password (transport_settings, password); modest_server_account_settings_set_protocol (transport_settings, transport_protocol); g_object_unref (transport_settings); g_free (transport_hostname); + if (alternate_username) + g_free (alternate_username); - fullname = hildon_entry_get_text (HILDON_ENTRY (priv->entry_user_name)); - email_address = hildon_entry_get_text (HILDON_ENTRY (priv->entry_user_email)); + fullname = modest_entry_get_text (priv->entry_user_name); + email_address = modest_entry_get_text (priv->entry_user_email); modest_account_settings_set_fullname (priv->settings, fullname); modest_account_settings_set_email_address (priv->settings, email_address); /* we don't set retrieve type to preserve advanced settings if @@ -2336,7 +2506,7 @@ save_to_settings (ModestEasysetupWizardDialog *self) if (priv->checkbox_outgoing_smtp_specific) { modest_account_settings_set_use_connection_specific_smtp (priv->settings, - hildon_check_button_get_active(HILDON_CHECK_BUTTON(priv->checkbox_outgoing_smtp_specific))); + modest_togglable_get_active(priv->checkbox_outgoing_smtp_specific)); } display_name = get_entered_account_title (self); @@ -2392,8 +2562,8 @@ check_for_supported_auth_methods (ModestEasysetupWizardDialog* self) priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self); registry = modest_runtime_get_protocol_registry (); - protocol_type = modest_servertype_picker_get_active_servertype ( - MODEST_SERVERTYPE_PICKER (priv->incoming_servertype_picker)); + protocol_type = modest_servertype_selector_get_active_servertype ( + priv->incoming_servertype_selector); hostname = gtk_entry_get_text(GTK_ENTRY(priv->entry_incomingserver)); username = gtk_entry_get_text(GTK_ENTRY(priv->entry_user_username)); security_protocol_incoming_type = modest_security_options_view_get_connection_protocol @@ -2462,6 +2632,22 @@ check_support_show_progress (gpointer userdata) return FALSE; } +static gboolean +check_support_progress_pulse (gpointer userdata) +{ + ModestEasysetupWizardDialog *self = (ModestEasysetupWizardDialog *) userdata; + ModestEasysetupWizardDialogPrivate *priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self); + + if (priv->destroyed || priv->check_support_progress == NULL) { + priv->check_support_progress_pulse_id = 0; + return FALSE; + } + + gtk_progress_bar_pulse (GTK_PROGRESS_BAR (priv->check_support_progress)); + + return TRUE; +} + static void check_support_callback (ModestAccountProtocol *protocol, gboolean supported, @@ -2480,28 +2666,77 @@ check_support_callback (ModestAccountProtocol *protocol, if (priv->pending_check_support == 0) { priv->check_support_done = TRUE; + if (priv->check_support_cancel_note) { + gtk_widget_destroy (priv->check_support_cancel_note); + priv->check_support_cancel_note = NULL; + priv->check_support_progress = NULL; + } + if (!priv->destroyed) { if (priv->presets) fill_providers (self); hildon_gtk_window_set_progress_indicator (GTK_WINDOW (self), FALSE); invoke_enable_buttons_vfunc (self); + gtk_dialog_response (GTK_DIALOG (self), MODEST_WIZARD_DIALOG_NEXT); } } g_object_unref (self); } +static void +on_check_support_cancel (GtkDialog *cancel_note, + gint response, + ModestEasysetupWizardDialog *self) +{ + ModestEasysetupWizardDialogPrivate *priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self); + ModestProtocolRegistry *registry; + GSList *provider_protos, *node; + + registry = modest_runtime_get_protocol_registry (); + provider_protos = modest_protocol_registry_get_by_tag (registry, + MODEST_PROTOCOL_REGISTRY_PROVIDER_PROTOCOLS); + + for (node = provider_protos; node != NULL; node = g_slist_next (node)) { + ModestProtocol *proto = MODEST_PROTOCOL (node->data); + + if (!modest_protocol_registry_protocol_type_has_tag (registry, + modest_protocol_get_type_id (proto), + MODEST_PROTOCOL_REGISTRY_STORE_PROTOCOLS)) + continue; + + if (modest_protocol_registry_protocol_type_has_tag + (registry, + modest_protocol_get_type_id (proto), + MODEST_PROTOCOL_REGISTRY_SINGLETON_PROVIDER_PROTOCOLS)) { + /* Check if there's already an account configured with this account type */ + if (modest_account_mgr_singleton_protocol_exists (modest_runtime_get_account_mgr (), + modest_protocol_get_type_id (proto))) + continue; + } + + if (MODEST_ACCOUNT_PROTOCOL (proto)) { + modest_account_protocol_cancel_check_support (MODEST_ACCOUNT_PROTOCOL (proto)); + } + } + g_slist_free (provider_protos); + + gtk_widget_destroy (GTK_WIDGET (cancel_note)); + priv->check_support_cancel_note = NULL; + priv->check_support_progress = NULL; +} static void check_support_of_protocols (ModestEasysetupWizardDialog *self) { ModestProtocolRegistry *registry; - GSList *provider_protos, *node; + GSList *provider_protos, *node, *check_support_providers; ModestEasysetupWizardDialogPrivate *priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self); registry = modest_runtime_get_protocol_registry (); provider_protos = modest_protocol_registry_get_by_tag (registry, MODEST_PROTOCOL_REGISTRY_PROVIDER_PROTOCOLS); + check_support_providers = NULL; for (node = provider_protos; node != NULL; node = g_slist_next (node)) { ModestProtocol *proto = MODEST_PROTOCOL (node->data); @@ -2522,19 +2757,37 @@ check_support_of_protocols (ModestEasysetupWizardDialog *self) if (MODEST_ACCOUNT_PROTOCOL (proto)) { priv->pending_check_support ++; - modest_account_protocol_check_support (MODEST_ACCOUNT_PROTOCOL (proto), - check_support_callback, - g_object_ref (self)); + check_support_providers = g_slist_prepend (check_support_providers, proto); } } g_slist_free (provider_protos); + + for (node = check_support_providers; node != NULL; node = g_slist_next (node)) { + ModestProtocol *proto = MODEST_PROTOCOL (node->data); + + modest_account_protocol_check_support (MODEST_ACCOUNT_PROTOCOL (proto), + check_support_callback, + g_object_ref (self)); + } + g_slist_free (check_support_providers); if (priv->pending_check_support > 0) { priv->check_support_show_progress_id = g_timeout_add_full (G_PRIORITY_DEFAULT, 1000, check_support_show_progress, g_object_ref (self), g_object_unref); + priv->check_support_progress_pulse_id = g_timeout_add_full (G_PRIORITY_DEFAULT, 200, + check_support_progress_pulse, + g_object_ref (self), g_object_unref); + priv->check_support_progress = gtk_progress_bar_new (); + priv->check_support_cancel_note = hildon_note_new_cancel_with_progress_bar (GTK_WINDOW (self), + _("mcen_cn_availability_check"), + GTK_PROGRESS_BAR (priv->check_support_progress)); + gtk_widget_show (priv->check_support_cancel_note); + g_signal_connect (priv->check_support_cancel_note, "response", G_CALLBACK (on_check_support_cancel), self); } else { priv->check_support_done = TRUE; + if (priv->presets) + fill_providers (self); } invoke_enable_buttons_vfunc (self); }