* src/maemo/modest-account-settings-dialog.c:
[modest] / src / maemo / modest-account-settings-dialog.c
index 7f10380..5923034 100644 (file)
@@ -139,10 +139,7 @@ modest_account_settings_dialog_finalize (GObject *object)
 }
 
 static void
-show_error (GtkWindow *parent_window, const gchar* text);
-
-static void
-show_ok (GtkWindow *parent_window, const gchar* text);
+show_error (GtkWidget *parent_widget, const gchar* text);
 
 static void
 on_combo_incoming_security_changed (GtkComboBox *widget, gpointer user_data);
@@ -257,12 +254,23 @@ static GtkWidget* create_caption_new_with_asterisk(ModestAccountSettingsDialog *
        return caption;
 }
 
+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) ...
+       */
+       /* 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);
+       show_error (GTK_WIDGET (self), message);
+}
 
 static void
 on_entry_max (ModestValidatingEntry *self, gpointer user_data)
 {
-       ModestAccountSettingsDialog *dialog = MODEST_ACCOUNT_SETTINGS_DIALOG (user_data);
-       show_error (GTK_WINDOW (dialog), _CS("ckdg_ib_maximum_characters_reached"));
+       /* ModestAccountSettingsDialog *dialog = MODEST_ACCOUNT_SETTINGS_DIALOG (user_data); */
+       show_error (GTK_WIDGET (self), _CS("ckdg_ib_maximum_characters_reached"));
 }
 
 static GtkWidget*
@@ -307,6 +315,8 @@ create_page_account_details (ModestAccountSettingsDialog *self)
        modest_validating_entry_set_unallowed_characters (
                MODEST_VALIDATING_ENTRY (self->entry_account_title), list_prevent);
        g_list_free (list_prevent);
+       modest_validating_entry_set_func(MODEST_VALIDATING_ENTRY(self->entry_account_title),
+                                                                                                                                        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. */
@@ -390,11 +400,15 @@ static GtkWidget*
 create_page_user_details (ModestAccountSettingsDialog *self)
 {
        GtkWidget *box = gtk_vbox_new (FALSE, MODEST_MARGIN_NONE);
+       GtkAdjustment *focus_adjustment = NULL;
        
        /* 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);
+       GtkWidget *scrollwin = gtk_scrolled_window_new (NULL, NULL);
+       gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollwin),
+                                       GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
         
        /* The name widgets: */
        self->entry_user_name = GTK_WIDGET (modest_validating_entry_new ());
@@ -489,8 +503,13 @@ create_page_user_details (ModestAccountSettingsDialog *self)
                G_CALLBACK (on_button_signature), self);
                
        gtk_widget_show (GTK_WIDGET (box));
+       gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrollwin), box);
+       gtk_widget_show (scrollwin);
+
+       focus_adjustment = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrollwin));
+       gtk_container_set_focus_vadjustment (GTK_CONTAINER (box), focus_adjustment); 
        
-       return GTK_WIDGET (box);
+       return GTK_WIDGET (scrollwin);
 }
 
 /** Change the caption title for the incoming server, 
@@ -687,6 +706,13 @@ on_combo_incoming_security_changed (GtkComboBox *widget, gpointer user_data)
 static GtkWidget* create_page_outgoing (ModestAccountSettingsDialog *self)
 {
        GtkWidget *box = gtk_vbox_new (FALSE, MODEST_MARGIN_NONE);
+       GtkAdjustment *focus_adjustment = NULL;
+       
+       /* Put it all in a scrolled window, so that all widgets can be 
+        * accessed even when the on-screen keyboard is visible: */
+       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.
@@ -816,8 +842,13 @@ static GtkWidget* create_page_outgoing (ModestAccountSettingsDialog *self)
                G_CALLBACK (on_button_outgoing_smtp_servers), self);
                
        gtk_widget_show (GTK_WIDGET (box));
+       gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(scrollwin), box);
+       gtk_widget_show(scrollwin);
+
+       focus_adjustment = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrollwin));
+       gtk_container_set_focus_vadjustment (GTK_CONTAINER (box), focus_adjustment);
        
-       return GTK_WIDGET (box);
+       return GTK_WIDGET (scrollwin);
 }
 
 static gboolean
@@ -898,7 +929,7 @@ check_data (ModestAccountSettingsDialog *self)
                                if(error == NULL || error->domain != modest_maemo_utils_get_supported_secure_authentication_error_quark() ||
                                                error->code != MODEST_MAEMO_UTILS_GET_SUPPORTED_SECURE_AUTHENTICATION_ERROR_CANCELED)
                                {
-                                       show_error (GTK_WINDOW (self), _("Could not discover supported secure authentication methods."));
+                                       show_error (GTK_WIDGET (self), _("Could not discover supported secure authentication methods."));
                                }
 
                                if(error != NULL)
@@ -967,10 +998,10 @@ on_response (GtkDialog *wizard_dialog,
                                const gboolean enabled = 
                                        modest_account_mgr_get_enabled (self->account_manager, self->account_name);
                                if (enabled)
-                                       show_ok (GTK_WINDOW (self), _("mcen_ib_advsetup_settings_saved"));
+                                       show_error (GTK_WIDGET (self), _("mcen_ib_advsetup_settings_saved"));
                        }
                        else
-                               show_error (GTK_WINDOW (self), _("mail_ib_setting_failed"));
+                               show_error (GTK_WIDGET (self), _("mail_ib_setting_failed"));
                }
        }
 }
@@ -1469,25 +1500,21 @@ modest_account_settings_dialog_class_init (ModestAccountSettingsDialogClass *kla
 }
  
 static void
-show_error (GtkWindow *parent_window, const gchar* text)
+show_error (GtkWidget *parent_widget, const gchar* text)
 {
-       GtkDialog *dialog = GTK_DIALOG (hildon_note_new_information (parent_window, text));
-       /*
-       GtkDialog *dialog = GTK_DIALOG (gtk_message_dialog_new (parent_window,
-               (GtkDialogFlags)0,
-                GTK_MESSAGE_ERROR,
-                GTK_BUTTONS_OK,
-                text ));
-       */       
+       hildon_banner_show_information(parent_widget, NULL, text);
        
+#if 0
+       GtkDialog *dialog = GTK_DIALOG (hildon_note_new_information (parent_widget, text);
+       /*
+         GtkDialog *dialog = GTK_DIALOG (gtk_message_dialog_new (parent_window,
+         (GtkDialogFlags)0,
+         GTK_MESSAGE_ERROR,
+         GTK_BUTTONS_OK,
+         text ));
+       */
+                
        gtk_dialog_run (dialog);
        gtk_widget_destroy (GTK_WIDGET (dialog));
-}
-
-static void
-show_ok (GtkWindow *parent_window, const gchar* text)
-{
-       /* Don't show a dialog but Banner (NB #59248) */
-       hildon_banner_show_information(GTK_WIDGET(
-                                                                                                                                                                               gtk_widget_get_parent_window(GTK_WIDGET(parent_window))), NULL, text);
+#endif
 }