2005-10-03 [colin] 1.9.15cvs4
authorColin Leroy <colin@colino.net>
Mon, 3 Oct 2005 17:11:47 +0000 (17:11 +0000)
committerColin Leroy <colin@colino.net>
Mon, 3 Oct 2005 17:11:47 +0000 (17:11 +0000)
* src/inc.c
Add a 'Only once' button for overriding offline mode
* src/prefs_account.c
* src/wizard.c
Add Local mbox to the wizard
Add IMAP subdir to the wizard (or the wizard is useless
for such accounts, or even worse than useless)
Move IMAP subdir from Advanced to Receive tab, as it's
not that uncommon

ChangeLog-gtk2.claws
PATCHSETS
configure.ac
src/inc.c
src/prefs_account.c
src/wizard.c

index e7a4b62a8428395ef5b75d55b29503d013c52d8c..4db6ac424f0be38fe0c1f7362849e14d389bc10b 100644 (file)
@@ -1,3 +1,15 @@
+2005-10-03 [colin]     1.9.15cvs4
+
+       * src/inc.c
+               Add a 'Only once' button for overriding offline mode
+       * src/prefs_account.c
+       * src/wizard.c
+               Add Local mbox to the wizard
+               Add IMAP subdir to the wizard (or the wizard is useless
+               for such accounts, or even worse than useless)
+               Move IMAP subdir from Advanced to Receive tab, as it's
+               not that uncommon
+
 2005-10-03 [colin]     1.9.15cvs3
 
        * src/send_message.c
index 376529ba0c5e352c3ca1cfef123f7a742a41f12a..3bd7ce0b6ffc22cf5f77cf7e015c2485da288349 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.382.2.177 -r 1.382.2.178 src/compose.c;  cvs diff -u -r 1.179.2.73 -r 1.179.2.74 src/imap.c;  cvs diff -u -r 1.149.2.35 -r 1.149.2.36 src/inc.c;  cvs diff -u -r 1.115.2.56 -r 1.115.2.57 src/main.c;  cvs diff -u -r 1.94.2.65 -r 1.94.2.66 src/messageview.c;  cvs diff -u -r 1.101.2.16 -r 1.101.2.17 src/news.c;  cvs diff -u -r 1.395.2.128 -r 1.395.2.129 src/summaryview.c;  cvs diff -u -r 1.9.2.6 -r 1.9.2.7 src/gtk/sslcertwindow.c;  cvs diff -u -r 1.14.2.20 -r 1.14.2.21 src/plugins/trayicon/trayicon.c;  ) > 1.9.15cvs1.patchset
 ( cvs diff -u -r 1.213.2.57 -r 1.213.2.58 src/folder.c;  ) > 1.9.15cvs2.patchset
 ( cvs diff -u -r 1.17.2.20 -r 1.17.2.21 src/send_message.c;  ) > 1.9.15cvs3.patchset
+( cvs diff -u -r 1.149.2.36 -r 1.149.2.37 src/inc.c;  cvs diff -u -r 1.105.2.36 -r 1.105.2.37 src/prefs_account.c;  cvs diff -u -r 1.1.2.11 -r 1.1.2.12 src/wizard.c;  ) > 1.9.15cvs4.patchset
index 779b4ee7f760829a3ac8441e24753a250e88f4fa..276bc01234f7c9b4d8b51ba7059a71ae7b2e22c5 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=9
 MICRO_VERSION=15
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=3
+EXTRA_VERSION=4
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index 475eeaec7ea4fe50aa22466f08424a8d3a2bafb2..186d289c302d8188b3fc51eb59b70c084839217e 100644 (file)
--- a/src/inc.c
+++ b/src/inc.c
@@ -1429,7 +1429,7 @@ gboolean inc_offline_should_override(void)
        static time_t overridden_yes = 0;
        static time_t overridden_no  = 0;
        int length = 600;
-       gboolean answer = TRUE;
+       gint answer = G_ALERTDEFAULT;
        
        if (prefs_common.autochk_newmail)
                length = prefs_common.autochk_itv;
@@ -1443,14 +1443,21 @@ gboolean inc_offline_should_override(void)
                else if (time(NULL) - overridden_no < length * 10)
                         return FALSE;
                
-               answer = (alertpanel(_("Offline warning"), 
+               answer = alertpanel(_("Offline warning"), 
                               tmp,
-                              GTK_STOCK_YES, GTK_STOCK_NO, NULL) == G_ALERTDEFAULT);
+                              GTK_STOCK_YES, GTK_STOCK_NO, _("On_ly once"));
                g_free(tmp);
-               if (answer == TRUE)
+               if (answer == G_ALERTDEFAULT) {
                        overridden_yes = time(NULL);
-               else
+                       return TRUE;
+               } else if (answer == G_ALERTALTERNATE) {
                        overridden_no  = time(NULL);
+                       return FALSE;
+               } else {
+                       overridden_yes = (time_t)0;
+                       overridden_no  = (time_t)0;
+                       return TRUE;
+               }
        }
-       return answer;
+       return TRUE;
 }
index c26d6019a3380d1f681ca3a1e518d1ecf8cd739e..b929acfac8aacc01c7f8efa3a20c98f76277d891 100644 (file)
@@ -109,6 +109,8 @@ static struct Receive {
        
        GtkWidget *imap_frame;
        GtkWidget *imap_auth_type_optmenu;
+       GtkWidget *imapdir_label;
+       GtkWidget *imapdir_entry;
 
        GtkWidget *frame_maxarticle;
        GtkWidget *label_maxarticle;
@@ -193,8 +195,6 @@ static struct Advanced {
 
        GtkWidget *tunnelcmd_chkbtn;
        GtkWidget *tunnelcmd_entry;
-       GtkWidget *imapdir_label;
-       GtkWidget *imapdir_entry;
 
        GtkWidget *sent_folder_chkbtn;
        GtkWidget *sent_folder_entry;
@@ -524,7 +524,7 @@ static PrefParam param[] = {
         prefs_account_crosspost_set_colormenu},
 
        {"imap_directory", NULL, &tmp_ac_prefs.imap_dir, P_STRING,
-        &advanced.imapdir_entry, prefs_set_data_from_entry, prefs_set_entry},
+        &receive.imapdir_entry, prefs_set_data_from_entry, prefs_set_entry},
 
        {"set_sent_folder", "FALSE", &tmp_ac_prefs.set_sent_folder, P_BOOL,
         &advanced.sent_folder_chkbtn,
@@ -1342,6 +1342,9 @@ static void prefs_account_receive_create(void)
        GtkWidget *inbox_entry;
        GtkWidget *inbox_btn;
        GtkWidget *imap_frame;
+       GtkWidget *imapdir_label;
+       GtkWidget *imapdir_entry;
+
        GtkWidget *optmenu;
        GtkWidget *optmenu_menu;
        GtkWidget *menuitem;
@@ -1520,6 +1523,18 @@ static void prefs_account_receive_create(void)
 
        gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
 
+       hbox1 = gtk_hbox_new (FALSE, 8);
+       gtk_widget_show (hbox1);
+       gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 4);
+
+       imapdir_label = gtk_label_new (_("IMAP server directory (usually empty)"));
+       gtk_widget_show (imapdir_label);
+       gtk_box_pack_start (GTK_BOX (hbox1), imapdir_label, FALSE, FALSE, 0);
+
+       imapdir_entry = gtk_entry_new();
+       gtk_widget_show (imapdir_entry);
+       gtk_box_pack_start (GTK_BOX (hbox1), imapdir_entry, FALSE, FALSE, 0);
+
        PACK_CHECK_BUTTON (vbox1, filter_on_recv_chkbtn,
                           _("Filter messages on receiving"));
 
@@ -1542,6 +1557,9 @@ static void prefs_account_receive_create(void)
        receive.imap_frame               = imap_frame;
        receive.imap_auth_type_optmenu   = optmenu;
 
+       receive.imapdir_label           = imapdir_label;
+       receive.imapdir_entry           = imapdir_entry;
+
        receive.recvatgetall_chkbtn      = recvatgetall_chkbtn;
 
        receive.frame_maxarticle        = frame2;
@@ -2178,8 +2196,6 @@ static void prefs_account_advanced_create(void)
        GtkWidget *menu;
        GtkWidget *checkbtn_tunnelcmd;
        GtkWidget *entry_tunnelcmd;
-       GtkWidget *imapdir_label;
-       GtkWidget *imapdir_entry;
        GtkWidget *folder_frame;
        GtkWidget *vbox3;
        GtkWidget *table;
@@ -2273,14 +2289,6 @@ static void prefs_account_advanced_create(void)
        SET_TOGGLE_SENSITIVITY(checkbtn_crosspost, colormenu_crosspost);
 
        PACK_HBOX (hbox1);
-       imapdir_label = gtk_label_new (_("IMAP server directory"));
-       gtk_widget_show (imapdir_label);
-       gtk_box_pack_start (GTK_BOX (hbox1), imapdir_label, FALSE, FALSE, 0);
-
-       imapdir_entry = gtk_entry_new();
-       gtk_widget_show (imapdir_entry);
-       gtk_box_pack_start (GTK_BOX (hbox1), imapdir_entry, TRUE, TRUE, 0);
-
 #undef PACK_HBOX
 #undef PACK_PORT_ENTRY
 
@@ -2354,8 +2362,6 @@ static void prefs_account_advanced_create(void)
 
        advanced.tunnelcmd_chkbtn       = checkbtn_tunnelcmd;
        advanced.tunnelcmd_entry        = entry_tunnelcmd;
-       advanced.imapdir_label          = imapdir_label;
-       advanced.imapdir_entry          = imapdir_entry;
 
        advanced.sent_folder_chkbtn  = sent_folder_chkbtn;
        advanced.sent_folder_entry   = sent_folder_entry;
@@ -2775,8 +2781,8 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                gtk_widget_show(advanced.crosspost_colormenu);
                gtk_widget_hide(advanced.tunnelcmd_chkbtn);
                gtk_widget_hide(advanced.tunnelcmd_entry);
-               gtk_widget_hide(advanced.imapdir_label);
-               gtk_widget_hide(advanced.imapdir_entry);
+               gtk_widget_hide(receive.imapdir_label);
+               gtk_widget_hide(receive.imapdir_entry);
                break;
        case A_LOCAL:
                gtk_widget_hide(basic.nntpserv_label);
@@ -2856,8 +2862,8 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                gtk_widget_hide(advanced.crosspost_colormenu);
                gtk_widget_hide(advanced.tunnelcmd_chkbtn);
                gtk_widget_hide(advanced.tunnelcmd_entry);
-               gtk_widget_hide(advanced.imapdir_label);
-               gtk_widget_hide(advanced.imapdir_entry);
+               gtk_widget_hide(receive.imapdir_label);
+               gtk_widget_hide(receive.imapdir_entry);
                break;
        case A_IMAP4:
                gtk_widget_hide(basic.nntpserv_label);
@@ -2940,8 +2946,8 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                gtk_widget_hide(advanced.crosspost_colormenu);
                gtk_widget_show(advanced.tunnelcmd_chkbtn);
                gtk_widget_show(advanced.tunnelcmd_entry);
-               gtk_widget_show(advanced.imapdir_label);
-               gtk_widget_show(advanced.imapdir_entry);
+               gtk_widget_show(receive.imapdir_label);
+               gtk_widget_show(receive.imapdir_entry);
                break;
        case A_NONE:
                gtk_widget_hide(basic.nntpserv_label);
@@ -3020,8 +3026,8 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                gtk_widget_hide(advanced.crosspost_colormenu);
                gtk_widget_hide(advanced.tunnelcmd_chkbtn);
                gtk_widget_hide(advanced.tunnelcmd_entry);
-               gtk_widget_hide(advanced.imapdir_label);
-               gtk_widget_hide(advanced.imapdir_entry);
+               gtk_widget_hide(receive.imapdir_label);
+               gtk_widget_hide(receive.imapdir_entry);
                break;
        case A_POP3:
        default:
@@ -3105,8 +3111,8 @@ static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
                gtk_widget_hide(advanced.crosspost_colormenu);
                gtk_widget_hide(advanced.tunnelcmd_chkbtn);
                gtk_widget_hide(advanced.tunnelcmd_entry);
-               gtk_widget_hide(advanced.imapdir_label);
-               gtk_widget_hide(advanced.imapdir_entry);
+               gtk_widget_hide(receive.imapdir_label);
+               gtk_widget_hide(receive.imapdir_entry);
                break;
        }
 
index bf30db6e914c3f02d4ebf9e90e1ce7b18b1f2e8c..aad17528c0bf957e5c0b03a1403688a89977dd8a 100644 (file)
@@ -78,9 +78,14 @@ typedef struct
        GtkWidget *smtp_server;
 
        GtkWidget *recv_type;
+       GtkWidget *recv_label;
        GtkWidget *recv_server;
        GtkWidget *recv_username;
        GtkWidget *recv_password;
+       GtkWidget *recv_username_label;
+       GtkWidget *recv_password_label;
+       GtkWidget *recv_imap_label;
+       GtkWidget *recv_imap_subdir;
 
 #ifdef USE_OPENSSL
        GtkWidget *smtp_use_ssl;
@@ -100,14 +105,24 @@ static void wizard_write_config(WizardWindow *wizard)
        GList *account_list = NULL;
        GtkWidget *menu, *menuitem;
        
-       if (wizard->create_mailbox) {
+       menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(wizard->recv_type));
+       menuitem = gtk_menu_get_active(GTK_MENU(menu));
+       prefs_account->protocol = GPOINTER_TO_INT
+                       (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+
+       if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
                mailbox_ok = setup_write_mailbox_path(wizard->mainwin, 
                                gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)));
        }
 
-       prefs_account->account_name = g_strdup_printf("%s@%s",
+       if (prefs_account->protocol != A_LOCAL)
+               prefs_account->account_name = g_strdup_printf("%s@%s",
                                gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)),
                                gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
+       else
+               prefs_account->account_name = g_strdup_printf("%s",
+                               gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
+
        prefs_account->name = g_strdup(
                                gtk_entry_get_text(GTK_ENTRY(wizard->full_name)));
        prefs_account->address = g_strdup(
@@ -116,18 +131,19 @@ static void wizard_write_config(WizardWindow *wizard)
                                gtk_entry_get_text(GTK_ENTRY(wizard->organization)));
        prefs_account->smtp_server = g_strdup(
                                gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)));
-       prefs_account->recv_server = g_strdup(
+
+       if (prefs_account->protocol != A_LOCAL)
+               prefs_account->recv_server = g_strdup(
+                               gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
+       else
+               prefs_account->local_mbox = g_strdup(
                                gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
+
        prefs_account->userid = g_strdup(
                                gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)));
        prefs_account->passwd = g_strdup(
                                gtk_entry_get_text(GTK_ENTRY(wizard->recv_password)));
 
-       menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(wizard->recv_type));
-       menuitem = gtk_menu_get_active(GTK_MENU(menu));
-       prefs_account->protocol = GPOINTER_TO_INT
-                       (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
-
 #ifdef USE_OPENSSL                     
        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl)))
                prefs_account->ssl_smtp = SSL_TUNNEL;
@@ -138,6 +154,14 @@ static void wizard_write_config(WizardWindow *wizard)
                        prefs_account->ssl_pop = SSL_TUNNEL;
        }
 #endif
+       if (prefs_account->protocol == A_IMAP4) {
+               gchar *directory = gtk_editable_get_chars(
+                       GTK_EDITABLE(wizard->recv_imap_subdir), 0, -1);
+               if (directory && strlen(directory)) {
+                       prefs_account->imap_dir = g_strdup(directory);
+               }
+               g_free(directory);
+       }
 
        account_list = g_list_append(account_list, prefs_account);
        prefs_account_write_config_all(account_list);
@@ -251,10 +275,14 @@ static void wizard_email_changed(GtkWidget *widget, gpointer data)
                text = get_default_server(wizard, "pop");
                gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
                g_free(text);
-       } else {
+       } else if (protocol == A_IMAP4) {
                text = get_default_server(wizard, "imap");
                gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
                g_free(text);
+       } else if (protocol == A_LOCAL) {
+               gchar *mbox = g_strdup_printf("/var/mail/%s", g_get_user_name());
+               gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), mbox);
+               g_free(mbox);
        }
 }
 
@@ -334,11 +362,36 @@ static void wizard_protocol_changed(GtkMenuItem *menuitem, gpointer data)
        if (protocol == A_POP3) {
                text = get_default_server(wizard, "pop");
                gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
+               gtk_widget_hide(wizard->recv_imap_label);
+               gtk_widget_hide(wizard->recv_imap_subdir);
+               gtk_widget_show(wizard->recv_username);
+               gtk_widget_show(wizard->recv_password);
+               gtk_widget_show(wizard->recv_username_label);
+               gtk_widget_show(wizard->recv_password_label);
+               gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("Server address:"));
                g_free(text);
-       } else {
+       } else if (protocol == A_IMAP4) {
                text = get_default_server(wizard, "imap");
                gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
+               gtk_widget_show(wizard->recv_imap_label);
+               gtk_widget_show(wizard->recv_imap_subdir);
+               gtk_widget_show(wizard->recv_username);
+               gtk_widget_show(wizard->recv_password);
+               gtk_widget_show(wizard->recv_username_label);
+               gtk_widget_show(wizard->recv_password_label);
+               gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("Server address:"));
                g_free(text);
+       } else if (protocol == A_LOCAL) {
+               gchar *mbox = g_strdup_printf("/var/mail/%s", g_get_user_name());
+               gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), mbox);
+               g_free(mbox);
+               gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("Local mailbox:"));
+               gtk_widget_hide(wizard->recv_imap_label);
+               gtk_widget_hide(wizard->recv_imap_subdir);
+               gtk_widget_hide(wizard->recv_username);
+               gtk_widget_hide(wizard->recv_password);
+               gtk_widget_hide(wizard->recv_username_label);
+               gtk_widget_hide(wizard->recv_password_label);
        }
 }
 
@@ -363,6 +416,11 @@ static GtkWidget* recv_page (WizardWindow * wizard)
        g_signal_connect(G_OBJECT(menuitem), "activate",
                         G_CALLBACK(wizard_protocol_changed),
                         wizard);
+       MENUITEM_ADD (menu, menuitem, _("Local mbox file"), A_LOCAL);
+       g_signal_connect(G_OBJECT(menuitem), "activate",
+                        G_CALLBACK(wizard_protocol_changed),
+                        wizard);
+
        gtk_option_menu_set_menu (GTK_OPTION_MENU (wizard->recv_type), menu);
        GTK_TABLE_ADD_ROW_AT(table, _("Server type:"), 
                             wizard->recv_type, i); i++;
@@ -371,18 +429,48 @@ static GtkWidget* recv_page (WizardWindow * wizard)
        text = get_default_server(wizard, "pop");
        gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
        g_free(text);
-       GTK_TABLE_ADD_ROW_AT(table, _("Server address:"), 
-                            wizard->recv_server, i); i++;
+       
+       wizard->recv_label = gtk_label_new(_("Server address:"));
+       gtk_table_attach(GTK_TABLE(table), wizard->recv_label,                        
+                        0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);            
+       if (GTK_IS_MISC(wizard->recv_label))                                                  
+               gtk_misc_set_alignment(GTK_MISC(wizard->recv_label), 1, 0.5);         
+       gtk_table_attach(GTK_TABLE(table), wizard->recv_server,       
+                        1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);            
+       i++;
        
        wizard->recv_username = gtk_entry_new();
-       gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), g_get_user_name());
-       GTK_TABLE_ADD_ROW_AT(table, _("Username:"), 
-                            wizard->recv_username, i); i++;
+       wizard->recv_username_label = gtk_label_new(_("Username:"));
+       gtk_table_attach(GTK_TABLE(table), wizard->recv_username_label,                               
+                        0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);            
+       if (GTK_IS_MISC(wizard->recv_username_label))                                                 
+               gtk_misc_set_alignment(GTK_MISC(wizard->recv_username_label), 1, 0.5);        
+       gtk_table_attach(GTK_TABLE(table), wizard->recv_username,             
+                        1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);            
+       i++;
        
        wizard->recv_password = gtk_entry_new();
+       wizard->recv_password_label = gtk_label_new(_("Password:"));
+       gtk_table_attach(GTK_TABLE(table), wizard->recv_password_label,                               
+                        0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);            
+       if (GTK_IS_MISC(wizard->recv_password_label))                                                 
+               gtk_misc_set_alignment(GTK_MISC(wizard->recv_password_label), 1, 0.5);        
+       gtk_table_attach(GTK_TABLE(table), wizard->recv_password,             
+                        1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);            
        gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_password), FALSE);
-       GTK_TABLE_ADD_ROW_AT(table, _("Password:"), 
-                            wizard->recv_password, i); i++;
+       i++;
+       
+       wizard->recv_imap_subdir = gtk_entry_new();
+       wizard->recv_imap_label = gtk_label_new(_("IMAP server directory:"));
+       
+       gtk_table_attach(GTK_TABLE(table), wizard->recv_imap_label,                           
+                        0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);            
+       if (GTK_IS_MISC(wizard->recv_imap_label))                                                     
+               gtk_misc_set_alignment(GTK_MISC(wizard->recv_imap_label), 1, 0.5);            
+       gtk_table_attach(GTK_TABLE(table), wizard->recv_imap_subdir,          
+                        1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);            
+
+       i++;
        
        return table;
 }
@@ -415,6 +503,15 @@ wizard_response_cb (GtkDialog * dialog, int response, gpointer data)
 {
        WizardWindow * wizard = (WizardWindow *)data;
        int current_page, num_pages;
+       GtkWidget *menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(wizard->recv_type));
+       GtkWidget *menuitem = gtk_menu_get_active(GTK_MENU(menu));
+       gint protocol = GPOINTER_TO_INT
+                       (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+       gboolean skip_mailbox_page = FALSE;
+       
+       if (protocol == A_IMAP4) {
+               skip_mailbox_page = TRUE;
+       }
        
        num_pages = g_slist_length(wizard->pages);
        current_page = gtk_notebook_get_current_page (
@@ -436,17 +533,29 @@ wizard_response_cb (GtkDialog * dialog, int response, gpointer data)
        {
                if (response == GO_BACK)
                {
-                       if (current_page > 0)
+                       if (current_page > 0) {
+                               current_page--;
+                               if (current_page == 4 && skip_mailbox_page) {
+                                       /* mailbox */
+                                       current_page--;
+                               }
                                gtk_notebook_set_current_page (
                                        GTK_NOTEBOOK(wizard->notebook), 
-                                       --current_page);
+                                       current_page);
+                       }
                }
                else if (response == GO_FORWARD)
                {
-                       if (current_page < (num_pages-1))
+                       if (current_page < (num_pages-1)) {
+                               current_page++;
+                               if (current_page == 4 && skip_mailbox_page) {
+                                       /* mailbox */
+                                       current_page++;
+                               }
                                gtk_notebook_set_current_page (
                                        GTK_NOTEBOOK(wizard->notebook), 
-                                       ++current_page);
+                                       current_page);
+                       }
                }
 
                gtk_dialog_set_response_sensitive (dialog, GO_BACK, 
@@ -455,6 +564,8 @@ wizard_response_cb (GtkDialog * dialog, int response, gpointer data)
                                current_page < (num_pages - 1));
                gtk_dialog_set_response_sensitive (dialog, FINISHED, 
                                current_page == (num_pages - 1));
+               gtk_dialog_set_response_sensitive (dialog, CANCEL, 
+                               current_page != (num_pages - 1));
        }
 }
 
@@ -502,7 +613,7 @@ gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) {
        
        wizard->pages = NULL;
        
-/*welcome page */
+/*welcome page: 0 */
        page = create_page(wizard, _("Welcome to Sylpheed-Claws."));
        
        wizard->pages = g_slist_append(wizard->pages, page);
@@ -521,40 +632,58 @@ gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) {
        gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
        g_free(text);
 
-/* user page */
+/* user page: 1 */
        widget = create_page (wizard, _("About You"));
        gtk_box_pack_start (GTK_BOX(widget), user_page(wizard), FALSE, FALSE, 0);
        wizard->pages = g_slist_append(wizard->pages, widget);
 
-/* mailbox page */
-       if (create_mailbox) {
-               widget = create_page (wizard, _("Saving mail on disk"));
-               gtk_box_pack_start (GTK_BOX(widget), mailbox_page(wizard), FALSE, FALSE, 0);
-               wizard->pages = g_slist_append(wizard->pages, widget);
-       }
-/*smtp page */
+/*smtp page: 2 */
        widget = create_page (wizard, _("Sending mail"));
        gtk_box_pack_start (GTK_BOX(widget), smtp_page(wizard), FALSE, FALSE, 0);
        wizard->pages = g_slist_append(wizard->pages, widget);
 
-/* recv+auth page */
+/* recv+auth page: 3 */
        widget = create_page (wizard, _("Receiving mail"));
        gtk_box_pack_start (GTK_BOX(widget), recv_page(wizard), FALSE, FALSE, 0);
        wizard->pages = g_slist_append(wizard->pages, widget);
 
-/* ssl page */
+/* mailbox page: 4 */
+       if (create_mailbox) {
+               widget = create_page (wizard, _("Saving mail on disk"));
+               gtk_box_pack_start (GTK_BOX(widget), mailbox_page(wizard), FALSE, FALSE, 0);
+               wizard->pages = g_slist_append(wizard->pages, widget);
+       }
+/* ssl page: 5 */
 #ifdef USE_OPENSSL
        widget = create_page (wizard, _("Security"));
        gtk_box_pack_start (GTK_BOX(widget), ssl_page(wizard), FALSE, FALSE, 0);
        wizard->pages = g_slist_append(wizard->pages, widget);
 #endif
+
+/* done page: 6 */
+       page = create_page(wizard, _("Configuration finished."));
        
+       wizard->pages = g_slist_append(wizard->pages, page);
+       widget = stock_pixmap_widget(wizard->window, 
+                               STOCK_PIXMAP_SYLPHEED_LOGO);
+
+       gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
+       
+       text = g_strdup(_("Sylpheed-Claws is now ready to run.\n\n"
+                         "Click Save to start."));
+       widget = gtk_label_new(text);
+       gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
+       g_free(text);
+
+
        for (cur = wizard->pages; cur && cur->data; cur = cur->next) {
                gtk_notebook_append_page (GTK_NOTEBOOK(wizard->notebook), 
                                          GTK_WIDGET(cur->data), NULL);
        }
        
        gtk_widget_show_all (wizard->window);
+       gtk_widget_hide(wizard->recv_imap_label);
+       gtk_widget_hide(wizard->recv_imap_subdir);
 
        while (!wizard->finished)
                gtk_main_iteration();