X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmaemo%2Fmodest-connection-specific-smtp-edit-window.c;h=72d2f166c40b54dc9afac356cb58ec1678c39497;hb=dcd7b63c3e21a0be8959b84eb012c2994e779249;hp=520a27e367f5034b571e912cf557179097d5d8c5;hpb=7eff5ee43be3f5cefc0d4e810069c8d348d3bba7;p=modest diff --git a/src/maemo/modest-connection-specific-smtp-edit-window.c b/src/maemo/modest-connection-specific-smtp-edit-window.c index 520a27e..72d2f16 100644 --- a/src/maemo/modest-connection-specific-smtp-edit-window.c +++ b/src/maemo/modest-connection-specific-smtp-edit-window.c @@ -35,15 +35,18 @@ #include "widgets/modest-serversecurity-combo-box.h" #include "widgets/modest-secureauth-combo-box.h" #include "widgets/modest-validating-entry.h" -#include #include #include #include #include #include "modest-text-utils.h" +#include "modest-maemo-utils.h" #include +#define PORT_RANGE_MIN 1 +#define PORT_RANGE_MAX 65535 + G_DEFINE_TYPE (ModestConnectionSpecificSmtpEditWindow, modest_connection_specific_smtp_edit_window, GTK_TYPE_DIALOG); #define CONNECTION_SPECIFIC_SMTP_EDIT_WINDOW_GET_PRIVATE(o) \ @@ -62,9 +65,12 @@ struct _ModestConnectionSpecificSmtpEditWindowPrivate GtkWidget *button_ok; GtkWidget *button_cancel; + + gchar *account_name; gboolean is_dirty; gboolean range_error_occured; + guint range_error_banner_timeout; }; static void @@ -90,6 +96,8 @@ modest_connection_specific_smtp_edit_window_set_property (GObject *object, guint static void modest_connection_specific_smtp_edit_window_dispose (GObject *object) { + + if (G_OBJECT_CLASS (modest_connection_specific_smtp_edit_window_parent_class)->dispose) G_OBJECT_CLASS (modest_connection_specific_smtp_edit_window_parent_class)->dispose (object); } @@ -97,6 +105,18 @@ modest_connection_specific_smtp_edit_window_dispose (GObject *object) static void modest_connection_specific_smtp_edit_window_finalize (GObject *object) { + ModestConnectionSpecificSmtpEditWindow *self = (ModestConnectionSpecificSmtpEditWindow *) object; + ModestConnectionSpecificSmtpEditWindowPrivate *priv = + CONNECTION_SPECIFIC_SMTP_EDIT_WINDOW_GET_PRIVATE (self); + + if (priv->range_error_banner_timeout > 0) { + g_source_remove (priv->range_error_banner_timeout); + priv->range_error_banner_timeout = 0; + } + if (priv->account_name) { + g_free (priv->account_name); + priv->account_name = NULL; + } G_OBJECT_CLASS (modest_connection_specific_smtp_edit_window_parent_class)->finalize (object); } @@ -137,6 +157,23 @@ on_value_changed(GtkWidget* widget, GValue* value, ModestConnectionSpecificSmtpE on_change(widget, self); } +gboolean +show_banner_handler (gpointer userdata) +{ + ModestConnectionSpecificSmtpEditWindow *self = userdata; + ModestConnectionSpecificSmtpEditWindowPrivate *priv = + CONNECTION_SPECIFIC_SMTP_EDIT_WINDOW_GET_PRIVATE (self); + gchar *msg; + + msg = g_strdup_printf (dgettext("hildon-libs", "ckct_ib_set_a_value_within_range"), PORT_RANGE_MIN, PORT_RANGE_MAX); + + hildon_banner_show_information (NULL, NULL, msg); + g_free (msg); + + priv->range_error_banner_timeout = 0; + return FALSE; +} + static gboolean on_range_error (GtkWidget *widget, HildonNumberEditorErrorType type, gpointer user_data) { @@ -148,9 +185,11 @@ on_range_error (GtkWidget *widget, HildonNumberEditorErrorType type, gpointer us * the hildon number editor already resets the value to the default value, so we have to * remember that such an error occured. */ priv->range_error_occured = TRUE; + if (priv->range_error_banner_timeout == 0) + priv->range_error_banner_timeout = g_timeout_add (200, show_banner_handler, self); /* Show error message by not returning TRUE */ - return FALSE; + return TRUE; } static void @@ -163,8 +202,14 @@ on_response (GtkDialog *dialog, int response_id, gpointer user_data) hostname = gtk_entry_get_text (GTK_ENTRY (priv->entry_outgoingserver)); + if ((response_id == GTK_RESPONSE_CANCEL) && + (priv->range_error_banner_timeout > 0)) { + g_source_remove (priv->range_error_banner_timeout); + priv->range_error_banner_timeout = 0; + } + /* Don't close the dialog if a range error occured */ - if(priv->range_error_occured) + if(response_id == GTK_RESPONSE_OK && priv->range_error_occured) { priv->range_error_occured = FALSE; g_signal_stop_emission_by_name (dialog, "response"); @@ -174,7 +219,8 @@ on_response (GtkDialog *dialog, int response_id, gpointer user_data) /* Don't close the dialog if a range error occured */ if(response_id == GTK_RESPONSE_OK) { - if (!modest_text_utils_validate_domain_name (hostname)) { + if (hostname && (hostname[0] != '\0') && + (!modest_text_utils_validate_domain_name (hostname))) { g_signal_stop_emission_by_name (dialog, "response"); hildon_banner_show_information (NULL, NULL, _("mcen_ib_invalid_servername")); gtk_widget_grab_focus (priv->entry_outgoingserver); @@ -304,7 +350,7 @@ modest_connection_specific_smtp_edit_window_init (ModestConnectionSpecificSmtpEd /* The port number widgets: */ if (!priv->entry_port) - priv->entry_port = GTK_WIDGET (hildon_number_editor_new (1, 65535)); + priv->entry_port = GTK_WIDGET (hildon_number_editor_new (PORT_RANGE_MIN, PORT_RANGE_MAX)); caption = hildon_caption_new (sizegroup, _("mcen_fi_emailsetup_port"), priv->entry_port, NULL, HILDON_CAPTION_OPTIONAL); gtk_widget_add_events(GTK_WIDGET(priv->entry_port), GDK_FOCUS_CHANGE_MASK); @@ -326,6 +372,9 @@ modest_connection_specific_smtp_edit_window_init (ModestConnectionSpecificSmtpEd priv->range_error_occured = FALSE; g_signal_connect(G_OBJECT(self), "response", G_CALLBACK(on_response), self); g_signal_connect(G_OBJECT(box), "set-focus-child", G_CALLBACK(on_set_focus_child), self); + + priv->range_error_banner_timeout = 0; + priv->account_name = NULL; gtk_widget_show (box); @@ -333,7 +382,11 @@ modest_connection_specific_smtp_edit_window_init (ModestConnectionSpecificSmtpEd /* When this window is shown, hibernation should not be possible, * because there is no sensible way to save the state: */ modest_window_mgr_prevent_hibernation_while_window_is_shown ( - modest_runtime_get_window_mgr (), GTK_WINDOW (self)); + modest_runtime_get_window_mgr (), GTK_WINDOW (self)); + + hildon_help_dialog_help_enable (GTK_DIALOG(self), + "applications_email_connectionspecificsmtpconf", + modest_maemo_utils_get_osso_context()); } ModestConnectionSpecificSmtpEditWindow* @@ -345,7 +398,7 @@ modest_connection_specific_smtp_edit_window_new (void) void modest_connection_specific_smtp_edit_window_set_connection ( ModestConnectionSpecificSmtpEditWindow *window, const gchar* iap_id, const gchar* iap_name, - const ModestServerAccountData *data) + ModestServerAccountSettings *server_settings) { ModestConnectionSpecificSmtpEditWindowPrivate *priv = CONNECTION_SPECIFIC_SMTP_EDIT_WINDOW_GET_PRIVATE (window); @@ -354,58 +407,85 @@ modest_connection_specific_smtp_edit_window_set_connection ( gchar* title = g_strdup_printf (_("mcen_ti_connection_connection_name"), iap_name); gtk_window_set_title (GTK_WINDOW (window), title); g_free (title); - - if (data) + + if (server_settings) { - gtk_entry_set_text (GTK_ENTRY (priv->entry_outgoingserver), data->hostname); - gtk_entry_set_text (GTK_ENTRY (priv->entry_user_username), data->username); - gtk_entry_set_text (GTK_ENTRY (priv->entry_user_password), data->password); + + if (priv->account_name) + g_free (priv->account_name); + priv->account_name = g_strdup (modest_server_account_settings_get_account_name (server_settings)); + gtk_entry_set_text (GTK_ENTRY (priv->entry_outgoingserver), + modest_server_account_settings_get_hostname (server_settings)); + gtk_entry_set_text (GTK_ENTRY (priv->entry_user_username), + modest_server_account_settings_get_username (server_settings)); + gtk_entry_set_text (GTK_ENTRY (priv->entry_user_password), + modest_server_account_settings_get_password (server_settings)); modest_serversecurity_combo_box_set_active_serversecurity ( - MODEST_SERVERSECURITY_COMBO_BOX (priv->combo_outgoing_security), data->security); + MODEST_SERVERSECURITY_COMBO_BOX (priv->combo_outgoing_security), + modest_server_account_settings_get_security (server_settings)); modest_secureauth_combo_box_set_active_secureauth ( - MODEST_SECUREAUTH_COMBO_BOX (priv->combo_outgoing_auth), data->secure_auth); + MODEST_SECUREAUTH_COMBO_BOX (priv->combo_outgoing_auth), + modest_server_account_settings_get_auth_protocol (server_settings)); /* port: */ hildon_number_editor_set_value ( - HILDON_NUMBER_EDITOR (priv->entry_port), data->port); + HILDON_NUMBER_EDITOR (priv->entry_port), + modest_server_account_settings_get_port (server_settings)); /* This will cause changed signals so we set dirty back to FALSE */ priv->is_dirty = FALSE; + if (priv->range_error_banner_timeout > 0) { + g_source_remove (priv->range_error_banner_timeout); + priv->range_error_banner_timeout = 0; + } + } } -/* - * The result must be freed with modest_account_mgr_free_server_account_data(). */ -ModestServerAccountData* -modest_connection_specific_smtp_edit_window_get_settings ( - ModestConnectionSpecificSmtpEditWindow *window, - ModestAccountMgr *account_manager) +ModestServerAccountSettings* +modest_connection_specific_smtp_edit_window_get_settings (ModestConnectionSpecificSmtpEditWindow *window) { - ModestConnectionSpecificSmtpEditWindowPrivate *priv = - CONNECTION_SPECIFIC_SMTP_EDIT_WINDOW_GET_PRIVATE (window); + ModestConnectionSpecificSmtpEditWindowPrivate *priv = NULL; + ModestServerAccountSettings *server_settings = NULL; + const gchar *outgoing_server = NULL; + + priv = CONNECTION_SPECIFIC_SMTP_EDIT_WINDOW_GET_PRIVATE (window); + outgoing_server = gtk_entry_get_text (GTK_ENTRY (priv->entry_outgoingserver)); + + /* If the outgoing server is NULL, we are removing the connection specific + * settings */ + if ((outgoing_server == NULL) || (outgoing_server[0] == '\0')) { + return NULL; + } - /* Use g_slice_new0(), because that's what modest_account_mgr_free_server_account_data() - * expects us to use. */ - ModestServerAccountData *result = g_slice_new0 (ModestServerAccountData); + server_settings = modest_server_account_settings_new (); - result->hostname = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->entry_outgoingserver))); - result->username = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->entry_user_username))); - result->password = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->entry_user_password))); + modest_server_account_settings_set_hostname (server_settings, + gtk_entry_get_text (GTK_ENTRY (priv->entry_outgoingserver))); + modest_server_account_settings_set_protocol (server_settings, + MODEST_PROTOCOL_TRANSPORT_SMTP); + modest_server_account_settings_set_username (server_settings, + gtk_entry_get_text (GTK_ENTRY (priv->entry_user_username))); + modest_server_account_settings_set_password (server_settings, + gtk_entry_get_text (GTK_ENTRY (priv->entry_user_password))); - result->security = modest_serversecurity_combo_box_get_active_serversecurity ( - MODEST_SERVERSECURITY_COMBO_BOX (priv->combo_outgoing_security)); + modest_server_account_settings_set_security (server_settings, + modest_serversecurity_combo_box_get_active_serversecurity ( + MODEST_SERVERSECURITY_COMBO_BOX (priv->combo_outgoing_security))); + modest_server_account_settings_set_auth_protocol (server_settings, + modest_secureauth_combo_box_get_active_secureauth ( + MODEST_SECUREAUTH_COMBO_BOX (priv->combo_outgoing_auth))); + modest_server_account_settings_set_account_name (server_settings, + priv->account_name); - result->secure_auth = modest_secureauth_combo_box_get_active_secureauth ( - MODEST_SECUREAUTH_COMBO_BOX (priv->combo_outgoing_auth)); - /* port: */ - result->port = hildon_number_editor_get_value ( - HILDON_NUMBER_EDITOR (priv->entry_port)); + modest_server_account_settings_set_port (server_settings, + hildon_number_editor_get_value (HILDON_NUMBER_EDITOR (priv->entry_port))); - return result; + return server_settings; } gboolean modest_connection_specific_smtp_edit_window_is_dirty(