Show confirmation and alert dialogs even though there is no main window
[modest] / src / gnome / modest-account-settings-dialog.c
index ac04625..9dedb33 100644 (file)
 
 G_DEFINE_TYPE (ModestAccountSettingsDialog, modest_account_settings_dialog, GTK_TYPE_DIALOG);
 
-#define ACCOUNT_SETTINGS_DIALOG_GET_PRIVATE(o) \
-       (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEST_TYPE_ACCOUNT_SETTINGS_DIALOG, ModestAccountSettingsDialogPrivate))
-
-typedef struct _ModestAccountSettingsDialogPrivate ModestAccountSettingsDialogPrivate;
-
-struct _ModestAccountSettingsDialogPrivate
-{
-};
-
 static void
 enable_buttons (ModestAccountSettingsDialog *self);
 
@@ -137,9 +128,6 @@ modest_account_settings_dialog_finalize (GObject *object)
        if (self->account_manager)
                g_object_unref (G_OBJECT (self->account_manager));
                
-       if (self->specific_window)
-               gtk_widget_destroy (self->specific_window);
-               
        if (self->signature_dialog)
                gtk_widget_destroy (self->signature_dialog);
 
@@ -311,13 +299,9 @@ create_page_account_details (ModestAccountSettingsDialog *self)
 {
        GtkWidget *box = gtk_vbox_new (FALSE, MODEST_MARGIN_NONE);
        GtkAdjustment *focus_adjustment = NULL;
-       GtkAlignment *alignment;
+       GtkWidget *alignment;
        
        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 description widgets: */  
        self->entry_account_title = GTK_WIDGET (modest_validating_entry_new ());
        GtkWidget *field = create_field (self, sizegroup, _("mcen_fi_account_title"), 
@@ -384,18 +368,10 @@ create_page_account_details (ModestAccountSettingsDialog *self)
        gtk_widget_show (self->caption_leave_messages);
        
        gtk_widget_show (GTK_WIDGET (box));
-       
-       gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrollwin), box);
-       gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_NONE);
-       gtk_viewport_set_shadow_type (GTK_VIEWPORT (gtk_bin_get_child (scrollwin)), GTK_SHADOW_NONE);
-       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); 
 
        alignment = gtk_alignment_new (0.0, 0.0, 1.0, 1.0);
        gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 12, 12, 12, 12);
-       gtk_container_add (GTK_CONTAINER (alignment), scrollwin);
+       gtk_container_add (GTK_CONTAINER (alignment), box);
        gtk_widget_show (alignment);
        
        return GTK_WIDGET (alignment);
@@ -468,13 +444,9 @@ create_page_user_details (ModestAccountSettingsDialog *self)
 {
        GtkWidget *box = gtk_vbox_new (FALSE, MODEST_MARGIN_NONE);
        GtkAdjustment *focus_adjustment = NULL;
-       GtkAlignment *alignment;
+       GtkWidget *alignment;
        
        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);
-       gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_NONE);
         
        /* The name widgets: */
        self->entry_user_name = GTK_WIDGET (modest_validating_entry_new ());
@@ -563,16 +535,10 @@ 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_viewport_set_shadow_type (GTK_VIEWPORT (gtk_bin_get_child (scrollwin)), GTK_SHADOW_NONE);
-       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); 
-       
        alignment = gtk_alignment_new (0.0, 0.0, 1.0, 1.0);
        gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 12, 12, 12, 12);
-       gtk_container_add (GTK_CONTAINER (alignment), scrollwin);
+       gtk_container_add (GTK_CONTAINER (alignment), box);
        gtk_widget_show (alignment);
        
        return GTK_WIDGET (alignment);
@@ -617,7 +583,7 @@ static void update_incoming_server_security_choices (ModestAccountSettingsDialog
 static GtkWidget* create_page_incoming (ModestAccountSettingsDialog *self)
 {
        GtkWidget *box = gtk_vbox_new (FALSE, MODEST_MARGIN_NONE);
-       GtkAlignment *alignment;
+       GtkWidget *alignment;
        
        GtkSizeGroup *sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
         
@@ -773,14 +739,7 @@ static GtkWidget* create_page_outgoing (ModestAccountSettingsDialog *self)
 {
        GtkWidget *box = gtk_vbox_new (FALSE, MODEST_MARGIN_NONE);
        GtkAdjustment *focus_adjustment = NULL;
-       GtkAlignment *alignment;
-       
-       /* 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);
-       gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_NONE);
+       GtkWidget *alignment;
        
        GtkSizeGroup *sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
         
@@ -899,16 +858,10 @@ 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_viewport_set_shadow_type (GTK_VIEWPORT (gtk_bin_get_child (scrollwin)), GTK_SHADOW_NONE);
-       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);
        
        alignment = gtk_alignment_new (0.0, 0.0, 1.0, 1.0);
        gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 12, 12, 12, 12);
-       gtk_container_add (GTK_CONTAINER (alignment), scrollwin);
+       gtk_container_add (GTK_CONTAINER (alignment), box);
        gtk_widget_show (alignment);
        
        return GTK_WIDGET (alignment);
@@ -1115,7 +1068,7 @@ on_response (GtkDialog *wizard_dialog,
                                        }
                                        g_object_unref (store_settings);
                                        g_object_unref (transport_settings);
-                                       
+
                                        modest_platform_information_banner(NULL, NULL, _("mcen_ib_advsetup_settings_saved"));
                                }
                        } else {
@@ -1602,12 +1555,41 @@ enable_buttons (ModestAccountSettingsDialog *self)
                                           enable_ok);
 }
 
+void
+modest_account_settings_dialog_check_allow_changes (ModestAccountSettingsDialog *self)
+{
+       ModestServerAccountSettings *incoming_settings;
+       const gchar *server_account_name;
+       gboolean username_known;
+
+       if (!G_IS_OBJECT (self->settings))
+               return;
+
+       incoming_settings = modest_account_settings_get_store_settings (self->settings);
+       server_account_name = modest_server_account_settings_get_account_name (incoming_settings);
+
+       username_known = modest_account_mgr_get_server_account_username_has_succeeded (self->account_manager, 
+                                                                                      server_account_name);
+
+       /* Enable or disable widgets */
+       gtk_widget_set_sensitive (self->entry_user_username, !username_known);
+       gtk_widget_set_sensitive (self->entry_incomingserver, !username_known);
+       gtk_widget_set_sensitive (self->entry_incoming_port, !username_known);
+       gtk_widget_set_sensitive (self->combo_incoming_security, !username_known);
+}
+
+void
+modest_account_settings_dialog_save_password (ModestAccountSettingsDialog *dialog)
+{
+       g_return_if_fail (MODEST_IS_ACCOUNT_SETTINGS_DIALOG (dialog));
+
+       dialog->modified = TRUE;
+}
+
 static void
 modest_account_settings_dialog_class_init (ModestAccountSettingsDialogClass *klass)
 {
        GObjectClass *object_class = G_OBJECT_CLASS (klass);
-       g_type_class_add_private (klass, sizeof (ModestAccountSettingsDialogPrivate));
-
 
        object_class->get_property = modest_account_settings_dialog_get_property;
        object_class->set_property = modest_account_settings_dialog_set_property;