2010-06-23 [wwp] 3.7.6cvs11
[claws.git] / src / wizard.c
1 /*
2  * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 1999-2009 Colin Leroy <colin@colino.net> 
4  * and the Claws Mail team
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  * 
19  */
20
21 #ifdef HAVE_CONFIG_H
22 #  include "config.h"
23 #endif
24
25 #include "defs.h"
26
27 #include <glib.h>
28 #include <glib/gi18n.h>
29 #include <gdk/gdkkeysyms.h>
30 #include <gtk/gtk.h>
31
32 #include <stdio.h>
33 #include <stdlib.h>
34 #include <string.h>
35 #include <ctype.h>
36
37 #ifdef HAVE_CONFIG_H
38 #  include "config.h"
39 #endif
40
41 #include "utils.h"
42 #include "gtk/menu.h"
43 #include "plugin.h"
44 #include "account.h"
45 #include "prefs_account.h"
46 #include "mainwindow.h"
47 #include "stock_pixmap.h"
48 #include "setup.h"
49 #include "folder.h"
50 #include "alertpanel.h"
51 #include "filesel.h"
52 #ifdef USE_GNUTLS
53 #include "ssl.h"
54 #endif
55 #include "prefs_common.h"
56 #include "combobox.h"
57
58 #ifdef MAEMO
59 #include <libgnomevfs/gnome-vfs-volume.h>
60 #include <libgnomevfs/gnome-vfs-volume-monitor.h>
61 #include <libgnomevfs/gnome-vfs-utils.h>
62 #endif
63
64 typedef enum
65 {
66         GO_BACK,
67         GO_FORWARD,
68         CANCEL,
69         FINISHED
70 } PageNavigation;
71
72 int WELCOME_PAGE = -1;
73 int USER_PAGE = -1;
74 int SMTP_PAGE = -1;
75 int RECV_PAGE = -1;
76 int MAILBOX_PAGE = -1;
77 int DONE_PAGE = -1;
78
79 typedef struct
80 {
81         GtkWidget *window;
82         GSList    *pages;
83         GtkWidget *notebook;
84
85         MainWindow *mainwin;
86         
87         GtkWidget *email;
88         GtkWidget *full_name;
89         GtkWidget *organization;
90
91         GtkWidget *mailbox_name;
92         GtkWidget *mailbox_label;
93         
94         GtkWidget *smtp_server;
95         GtkWidget *smtp_auth;
96         GtkWidget *smtp_username;
97         GtkWidget *smtp_password;
98         GtkWidget *smtp_username_label;
99         GtkWidget *smtp_password_label;
100
101         GtkWidget *recv_type;
102         GtkWidget *recv_label;
103         GtkWidget *recv_server;
104         GtkWidget *recv_username;
105         GtkWidget *recv_password;
106         GtkWidget *recv_username_label;
107         GtkWidget *recv_password_label;
108         GtkWidget *recv_imap_label;
109         GtkWidget *recv_imap_subdir;
110         GtkWidget *subsonly_checkbtn;
111         GtkWidget *no_imap_warning;
112 #ifdef USE_GNUTLS
113         GtkWidget *smtp_use_ssl;
114         GtkWidget *recv_use_ssl;
115         GtkWidget *smtp_use_tls;
116         GtkWidget *recv_use_tls;
117         GtkWidget *smtp_ssl_cert_file;
118         GtkWidget *recv_ssl_cert_file;
119         GtkWidget *smtp_ssl_cert_pass;
120         GtkWidget *recv_ssl_cert_pass;
121         GtkWidget *smtp_cert_table;
122         GtkWidget *recv_cert_table;
123 #endif
124
125 #ifdef MAEMO
126         GtkWidget *data_root_nokia_radiobtn;
127         GtkWidget *data_root_mmc1_radiobtn;
128         GtkWidget *data_root_mmc2_radiobtn;
129         GnomeVFSVolumeMonitor *volmon;
130         gulong volmon_mount_sigid;
131         gulong volmon_unmount_sigid;
132         GnomeVFSVolume *vol_mmc1;
133         GnomeVFSVolume *vol_mmc2;
134 #endif  
135         gboolean create_mailbox;
136         gboolean finished;
137         gboolean result;
138
139 } WizardWindow;
140
141 typedef struct _AccountTemplate {
142         gchar *name;
143         gchar *domain;
144         gchar *email;
145         gchar *organization;
146         gchar *smtpserver;
147         gboolean smtpauth;
148         gchar *smtpuser;
149         gchar *smtppass;
150         RecvProtocol recvtype;
151         gchar *recvserver;
152         gchar *recvuser;
153         gchar *recvpass;
154         gchar *imapdir;
155         gboolean subsonly;
156         gchar *mboxfile;
157         gchar *mailbox;
158         gboolean smtpssl;
159         gboolean recvssl;
160         gchar *smtpssl_cert;
161         gchar *recvssl_cert;
162         gchar *smtpssl_cert_pass;
163         gchar *recvssl_cert_pass;
164 } AccountTemplate;
165
166 static AccountTemplate tmpl;
167
168 static PrefParam template_params[] = {
169         {"name", "$USERNAME",
170          &tmpl.name, P_STRING, NULL, NULL, NULL},
171         {"domain", "$DEFAULTDOMAIN",
172          &tmpl.domain, P_STRING, NULL, NULL, NULL},
173         {"email", "$NAME_MAIL@$DOMAIN",
174          &tmpl.email, P_STRING, NULL, NULL, NULL},
175         {"organization", "",
176          &tmpl.organization, P_STRING, NULL, NULL, NULL},
177         {"smtpserver", "smtp.$DOMAIN",
178          &tmpl.smtpserver, P_STRING, NULL, NULL, NULL},
179         {"smtpauth", "FALSE",
180          &tmpl.smtpauth, P_BOOL, NULL, NULL, NULL},
181         {"smtpuser", "",
182          &tmpl.smtpuser, P_STRING, NULL, NULL, NULL},
183         {"smtppass", "",
184          &tmpl.smtppass, P_STRING, NULL, NULL, NULL},
185         {"recvtype", A_POP3,
186          &tmpl.recvtype, P_INT, NULL, NULL, NULL},
187         {"recvserver", "pop.$DOMAIN",
188          &tmpl.recvserver, P_STRING, NULL, NULL, NULL},
189         {"recvuser", "$LOGIN",
190          &tmpl.recvuser, P_STRING, NULL, NULL, NULL},
191         {"recvpass", "",
192          &tmpl.recvpass, P_STRING, NULL, NULL, NULL},
193         {"imapdir", "",
194          &tmpl.imapdir, P_STRING, NULL, NULL, NULL},
195         {"subsonly", "TRUE",
196          &tmpl.subsonly, P_BOOL, NULL, NULL, NULL},
197         {"mboxfile", "/var/mail/$LOGIN",
198          &tmpl.mboxfile, P_STRING, NULL, NULL, NULL},
199         {"mailbox", "Mail",
200          &tmpl.mailbox, P_STRING, NULL, NULL, NULL},
201         {"smtpssl", "0",
202          &tmpl.smtpssl, P_INT, NULL, NULL, NULL},
203         {"recvssl", "0",
204          &tmpl.recvssl, P_INT, NULL, NULL, NULL},
205         {"smtpssl_cert", "",
206          &tmpl.smtpssl_cert, P_STRING, NULL, NULL, NULL},
207         {"recvssl_cert", "",
208          &tmpl.recvssl_cert, P_STRING, NULL, NULL, NULL},
209         {"smtpssl_cert_pass", "",
210          &tmpl.smtpssl_cert, P_STRING, NULL, NULL, NULL},
211         {"recvssl_cert_pass", "",
212          &tmpl.recvssl_cert, P_STRING, NULL, NULL, NULL},
213         {NULL, NULL, NULL, P_INT, NULL, NULL, NULL}
214 };
215
216
217 static gchar *accountrc_tmpl =
218         "[AccountTemplate]\n"
219         "#you can use $DEFAULTDOMAIN here\n"
220         "#domain must be defined before the variables that use it\n"
221         "#by default, domain is extracted from the hostname\n"
222         "#domain=\n"
223         "\n"
224         "#you can use $USERNAME for name (this is the default)\n"
225         "#name=\n"
226         "\n"
227         "#you can use $LOGIN, $NAME_MAIL and $DOMAIN here \n"
228         "#$NAME_MAIL is the name without uppercase and with dots instead\n"
229         "#of spaces\n"
230         "#the default is $NAME_MAIL@$DOMAIN\n"
231         "#email=\n"
232         "\n"
233         "#you can use $DOMAIN here\n"
234         "#the default organization is empty\n"
235         "#organization=\n"
236         "\n"
237         "#you can use $DOMAIN here \n"
238         "#the default is smtp.$DOMAIN\n"
239         "#smtpserver=\n"
240         "\n"
241         "#Whether to use smtp authentication\n"
242         "#the default is 0 (no)\n"
243         "#smtpauth=\n"
244         "\n"
245         "#SMTP username\n"
246         "#you can use $LOGIN, $NAME_MAIL, $DOMAIN or $EMAIL here\n"
247         "#the default is empty (same as reception username)\n"
248         "#smtpuser=\n"
249         "\n"
250         "#SMTP password\n"
251         "#the default is empty (same as reception password)\n"
252         "#smtppass=\n"
253         "\n"
254         "#recvtype can be:\n"
255         "#0 for pop3\n"
256         "#3  for imap\n"
257         "#5  for a local mbox file\n"
258         "#recvtype=\n"
259         "\n"
260         "#you can use $DOMAIN here \n"
261         "#the default is {pop,imap}.$DOMAIN\n"
262         "#recvserver=\n"
263         "\n"
264         "#you can use $LOGIN, $NAME_MAIL, $DOMAIN or $EMAIL here\n"
265         "#default is $LOGIN\n"
266         "#recvuser=\n"
267         "\n"
268         "#default is empty\n"
269         "#recvpass=\n"
270         "\n"
271         "#imap dir if imap (relative to the home on the server)\n"
272         "#default is empty\n"
273         "#imapdir=\n"
274         "\n"
275         "#show subscribed folders only, if imap\n"
276         "#default is TRUE\n"
277         "#subsonly=\n"
278         "\n"
279         "#mbox file if local\n"
280         "#you can use $LOGIN here\n"
281         "#default is /var/mail/$LOGIN\n"
282         "#mboxfile=\n"
283         "\n"
284         "#mailbox name if pop3 or local\n"
285         "#relative path from the user's home\n"
286         "#default is \"Mail\"\n"
287         "#mailbox=\n"
288         "\n"
289         "#whether to use ssl on smtp connections\n"
290         "#default is 0, 1 is ssl, 2 is starttls\n"
291         "#smtpssl=\n"
292         "\n"
293         "#whether to use ssl on pop or imap connections\n"
294         "#default is 0, 1 is ssl, 2 is starttls\n"
295         "#recvssl=\n"
296         "\n"
297         "#SSL client certificate path for SMTP\n"
298         "#default is empty (no certificate)\n"
299         "#smtpssl_cert=\n"
300         "\n"
301         "#SSL client certificate path for POP/IMAP\n"
302         "#default is empty (no certificate)\n"
303         "#recvssl_cert=\n"
304         "\n"
305         "#SSL client certificate password for SMTP\n"
306         "#default is empty (no password)\n"
307         "#smtpssl_cert_pass=\n"
308         "\n"
309         "#SSL client certificate password for POP/IMAP\n"
310         "#default is empty (no password)\n"
311         "#recvssl_cert_pass=\n"
312         ;
313
314 static gchar *wizard_get_default_domain_name(void)
315 {
316         static gchar *domain_name = NULL;
317         
318         if (domain_name == NULL) {
319                 domain_name = g_strdup(get_domain_name());
320                 if (strchr(domain_name, '.') != NULL 
321                 && strchr(domain_name, '.') != strrchr(domain_name, '.')
322                 && strlen(strchr(domain_name, '.')) > 6) {
323                         gchar *tmp = g_strdup(strchr(domain_name, '.')+1);
324                         g_free(domain_name);
325                         domain_name = tmp;
326                 }
327         }
328         return domain_name;
329 }
330
331 static gchar *get_name_for_mail(void)
332 {
333         gchar *name = NULL;
334         if (tmpl.name == NULL)
335                 return NULL;
336         name = g_utf8_strdown(tmpl.name, -1);
337         while(strstr(name, " "))
338                 *strstr(name, " ")='.';
339         
340         return name;
341 }
342
343 #define PARSE_DEFAULT(str) {    \
344         gchar *tmp = NULL, *new = NULL; \
345         if (str != NULL) {      \
346                 tmp = g_strdup(str);    \
347                 if (strstr(str, "$USERNAME")) { \
348                         tmp = g_strdup(str);    \
349                         *strstr(tmp, "$USERNAME") = '\0';       \
350                         new = g_strconcat(tmp, g_get_real_name(),       \
351                                 strstr(str, "$USERNAME")+strlen("$USERNAME"),   \
352                                 NULL);  \
353                         g_free(tmp);    \
354                         g_free(str);    \
355                         str = new;      \
356                         new = NULL;     \
357                 }       \
358                 if (strstr(str, "$LOGIN")) {    \
359                         tmp = g_strdup(str);    \
360                         *strstr(tmp, "$LOGIN") = '\0';  \
361                         new = g_strconcat(tmp, g_get_user_name(),       \
362                                 strstr(str, "$LOGIN")+strlen("$LOGIN"),         \
363                                 NULL);  \
364                         g_free(tmp);    \
365                         g_free(str);    \
366                         str = new;      \
367                         new = NULL;     \
368                 }       \
369                 if (strstr(str, "$EMAIL")) {    \
370                         tmp = g_strdup(str);    \
371                         *strstr(tmp, "$EMAIL") = '\0';  \
372                         new = g_strconcat(tmp, tmpl.email,      \
373                                 strstr(str, "$EMAIL")+strlen("$EMAIL"),         \
374                                 NULL);  \
375                         g_free(tmp);    \
376                         g_free(str);    \
377                         str = new;      \
378                         new = NULL;     \
379                 }       \
380                 if (strstr(str, "$NAME_MAIL")) {        \
381                         tmp = g_strdup(str);    \
382                         *strstr(tmp, "$NAME_MAIL") = '\0';      \
383                         new = g_strconcat(tmp, get_name_for_mail(),     \
384                                 strstr(str, "$NAME_MAIL")+strlen("$NAME_MAIL"),         \
385                                 NULL);  \
386                         g_free(tmp);    \
387                         g_free(str);    \
388                         str = new;      \
389                         new = NULL;     \
390                 }       \
391                 if (strstr(str, "$DEFAULTDOMAIN")) {    \
392                         tmp = g_strdup(str);    \
393                         *strstr(tmp, "$DEFAULTDOMAIN") = '\0';  \
394                         new = g_strconcat(tmp, wizard_get_default_domain_name(),        \
395                                 strstr(str, "$DEFAULTDOMAIN")+strlen("$DEFAULTDOMAIN"),         \
396                                 NULL);  \
397                         g_free(tmp);    \
398                         g_free(str);    \
399                         str = new;      \
400                         new = NULL;     \
401                 }       \
402                 if (strstr(str, "$DOMAIN")) {   \
403                         tmp = g_strdup(str);    \
404                         *strstr(tmp, "$DOMAIN") = '\0'; \
405                         new = g_strconcat(tmp, tmpl.domain,     \
406                                 strstr(str, "$DOMAIN")+strlen("$DOMAIN"),       \
407                                 NULL);  \
408                         g_free(tmp);    \
409                         g_free(str);    \
410                         str = new;      \
411                         new = NULL;     \
412                 }       \
413         }       \
414 }
415 static void wizard_read_defaults(void)
416 {
417         gchar *rcpath;
418
419         rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, "accountrc.tmpl", NULL);
420         if (!is_file_exist(rcpath)) {
421                 str_write_to_file(accountrc_tmpl, rcpath);
422         }
423
424         prefs_read_config(template_params, "AccountTemplate", rcpath, NULL);
425
426         PARSE_DEFAULT(tmpl.domain);
427         PARSE_DEFAULT(tmpl.name);
428         PARSE_DEFAULT(tmpl.email);
429         PARSE_DEFAULT(tmpl.organization);
430         PARSE_DEFAULT(tmpl.smtpserver);
431         PARSE_DEFAULT(tmpl.smtpuser);
432         PARSE_DEFAULT(tmpl.smtppass);
433         PARSE_DEFAULT(tmpl.recvserver);
434         PARSE_DEFAULT(tmpl.recvuser);
435         PARSE_DEFAULT(tmpl.recvpass);
436         PARSE_DEFAULT(tmpl.imapdir);
437         PARSE_DEFAULT(tmpl.mboxfile);
438         PARSE_DEFAULT(tmpl.mailbox);
439 /*
440         g_print("defaults:"
441         "%s, %s, %s, %s, %s, %d, %s, %s, %s, %s, %s, %s, %d, %d\n",
442         tmpl.name,tmpl.domain,tmpl.email,tmpl.organization,tmpl.smtpserver,
443         tmpl.recvtype,tmpl.recvserver,tmpl.recvuser,tmpl.recvpass,
444         tmpl.imapdir,tmpl.mboxfile,tmpl.mailbox,tmpl.smtpssl,tmpl.recvssl);
445 */
446         g_free(rcpath);
447 }
448
449 static void initialize_fonts(WizardWindow *wizard)
450 {
451         GtkWidget *widget = wizard->email;
452         gint size = pango_font_description_get_size(
453                         widget->style->font_desc)
454                       /PANGO_SCALE;
455         gchar *tmp, *new;
456 #ifdef G_OS_WIN32
457         PangoFontDescription *bold_desc;
458         gchar *curfont = pango_font_description_to_string(widget->style->font_desc);
459         g_free(prefs_common.smallfont);
460         g_free(prefs_common.normalfont);
461         g_free(prefs_common.boldfont);
462         prefs_common.smallfont = g_strdup(curfont);
463         prefs_common.normalfont = g_strdup(curfont);
464         bold_desc = pango_font_description_from_string(curfont);
465         pango_font_description_set_weight(bold_desc, PANGO_WEIGHT_BOLD);
466         prefs_common.boldfont = pango_font_description_to_string(bold_desc);
467         pango_font_description_free(bold_desc);
468         g_free(curfont);
469 #endif  
470         tmp = g_strdup(prefs_common.textfont);
471         if (strrchr(tmp, ' ')) {
472                 *(strrchr(tmp, ' ')) = '\0';
473                 new = g_strdup_printf("%s %d", tmp, size);
474                 g_free(prefs_common.textfont);
475                 prefs_common.textfont = new;
476         }
477         g_free(tmp);
478         
479         tmp = g_strdup(prefs_common.smallfont);
480         if (strrchr(tmp, ' ')) {
481                 *(strrchr(tmp, ' ')) = '\0';
482                 new = g_strdup_printf("%s %d", tmp, size);
483                 g_free(prefs_common.smallfont);
484                 prefs_common.smallfont = new;
485         }
486         g_free(tmp);
487         
488         tmp = g_strdup(prefs_common.normalfont);
489         if (strrchr(tmp, ' ')) {
490                 *(strrchr(tmp, ' ')) = '\0';
491                 new = g_strdup_printf("%s %d", tmp, size);
492                 g_free(prefs_common.normalfont);
493                 prefs_common.normalfont = new;
494         }
495         g_free(tmp);
496
497         tmp = g_strdup(prefs_common.boldfont);
498         if (strrchr(tmp, ' ')) {
499                 *(strrchr(tmp, ' ')) = '\0';
500                 new = g_strdup_printf("%s %d", tmp, size);
501                 g_free(prefs_common.boldfont);
502                 prefs_common.boldfont = new;
503         }
504         g_free(tmp);
505 }
506
507 #define XFACE "+}Axz@~a,-Yx?0Ysa|q}CLRH=89Y]\"')DSX^<6p\"d)'81yx5%G#u^o*7JG&[aPU0h1Ux.vb2yIjH83{5`/bVo|~nn/i83vE^E)qk-4W)_E.4Y=D*qvf/,Ci_=P<iY<M6"
508 #define FACE "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAM1BMVEUAAAAcJCI\n\
509  ONl1JUi0+Z4daY2NZciPabV9ykS5kj6Wsl2ybmZOBsMjZxK2wzN3Pzczs7OsCAGN0AAAAAXRSTlM\n\
510  AQObYZgAAAAFiS0dEAIgFHUgAAAIVSURBVEjH1ZbtlqMgDIaFECoGhPu/2s0b0Lais/NzN6d1OJ7\n\
511  3yReQzrL8B5Zy3rvl9At52Pf2tv1vSMjtYj8jaa8XUyI/yn3YD6sigj/2Tf5Bn069MIsTPHvx/t5\n\
512  /3rU/6JCIY3YwGe26r/cwUfE3cFe5T28L0K5rJAUHEeYAQxs8DHojjk3M9wECU4xxjXisI8RA0gy\n\
513  oczJZJOjxiTFZVTchAnIRJrgdmEGDyFfAI3UuG5FmYTkR9RDrIC4H0SqV4pzpEcUp0HNLjwBv+jA\n\
514  dikUE5g9iBvzmu3sH2oDk4lnHd829+2Q9gj6kDqDPg7hsGwBzH02fE3ZCt6ZHmlNKIMjMeRwra5I\n\
515  ecgNoBnLGPmzaHPJIwLY8Sq2M/tLUJfj0QcqmfVXAdLSStIYF8dzWjBBb2VgvDa4mO9oc651OiUo\n\
516  BEKbZokdPATF9E9oKAjQJcJOniaPXrVZRAnVWaqIyqRoNC8ZJvgCcW8XN39RqxVP1rS8Yd4WnCdN\n\
517  aRTo2jJRDbg3vtCpEUGffgDPhqKDaSuVqYtOplFIvIcx3HUI5/MuIWl6vKyBjNlqEru8hbFXqBPA\n\
518  5TpHGIUZOePeaIyzfQ/g9Xg0opU1AvdfXM9floYhv92pPAE96OZtkPV8eivgQi9RTfwPUU36I26n\n\
519  Hy+WuCJzAT7efMSeA1TNf2/VugDz+dN139xfA5ffxGZDD+MvcP/uvyB80wzZ76wbz8gAAAABJRU5\n\
520  ErkJggg=="
521
522 static void write_welcome_email(WizardWindow *wizard)
523 {
524         gchar buf_date[64];
525         gchar *head=NULL;
526         gchar *body=NULL;
527         gchar *msg=NULL;
528         const gchar *mailbox = gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name));
529         Folder *folder = folder_find_from_path(mailbox);
530         FolderItem *inbox = folder ? folder->inbox:NULL;
531         gchar *file = get_tmp_file();
532         gchar enc_from_name[BUFFSIZE], enc_to_name[BUFFSIZE], enc_subject[BUFFSIZE];
533         
534         get_rfc822_date(buf_date, sizeof(buf_date));
535
536         conv_encode_header_full(enc_subject, sizeof(enc_subject), 
537                         Q_("Welcome Mail Subject|Welcome to Claws Mail"),
538                         strlen("Subject: "), FALSE, CS_INTERNAL);
539         conv_encode_header_full(enc_to_name, sizeof(enc_to_name), 
540                         gtk_entry_get_text(GTK_ENTRY(wizard->full_name)),
541                         strlen("To: "), TRUE, CS_INTERNAL);
542         conv_encode_header_full(enc_from_name, sizeof(enc_from_name), 
543                         _("The Claws Mail Team"),
544                         strlen("From: "), TRUE, CS_INTERNAL);
545
546         head = g_strdup_printf(
547                 "From: %s <%s>\n"
548                 "To: %s <%s>\n"
549                 "Date: %s\n"
550                 "Subject: %s\n"
551                 "X-Face: %s\n"
552                 "Face: %s\n"
553                 "Content-Type: text/plain; charset=UTF-8\n",
554                 enc_from_name,
555                 USERS_ML_ADDR,
556                 enc_to_name,
557                 gtk_entry_get_text(GTK_ENTRY(wizard->email)),
558                 buf_date, enc_subject, XFACE, FACE);
559         body = g_strdup_printf(
560                 _("\n"
561                 "Welcome to Claws Mail\n"
562                 "---------------------\n"
563                 "\n"
564                 "Now that you have set up your account you can fetch your\n"
565                 "mail by clicking the 'Get Mail' button at the left of the\n"
566                 "toolbar.\n"
567                 "\n"
568                 "Claws Mail has lots of extra features accessible via plugins,\n"
569                 "like anti-spam filtering and learning (via the Bogofilter or\n"
570                 "SpamAssassin plugins), privacy protection (via PGP/Mime), an RSS\n"
571                 "aggregator, a calendar, and much more. You can load them from\n"
572                 "the menu entry '/Configuration/Plugins'.\n"
573                 "\n"
574                 "You can change your Account Preferences by using the menu\n"
575                 "entry '/Configuration/Preferences for current account'\n"
576                 "and change the general Preferences by using\n"
577                 "'/Configuration/Preferences'.\n"
578                 "\n"
579                 "You can find further information in the Claws Mail manual,\n"
580                 "which can be accessed by using the menu entry '/Help/Manual'\n"
581                 "or online at the URL given below.\n"
582                 "\n"
583                 "Useful URLs\n"
584                 "-----------\n"
585                 "Homepage:      <%s>\n"
586                 "Manual:        <%s>\n"
587                 "FAQ:          <%s>\n"
588                 "Themes:        <%s>\n"
589                 "Mailing Lists: <%s>\n"
590                 "\n"
591                 "LICENSE\n"
592                 "-------\n"
593                 "Claws Mail is free software, released under the terms\n"
594                 "of the GNU General Public License, version 3 or later, as\n"
595                 "published by the Free Software Foundation, 51 Franklin Street,\n"
596                 "Fifth Floor, Boston, MA 02110-1301, USA. The license can be\n"
597                 "found at <%s>.\n"
598                 "\n"
599                 "DONATIONS\n"
600                 "---------\n"
601                 "If you wish to donate to the Claws Mail project you can do\n"
602                 "so at <%s>.\n\n"),
603                 HOMEPAGE_URI, MANUAL_URI, FAQ_URI, THEMES_URI, MAILING_LIST_URI,
604                 GPL_URI, DONATE_URI);
605         
606         msg = g_strconcat(head, body, NULL);
607
608         if (inbox && inbox->total_msgs == 0
609          && str_write_to_file(msg, file) >= 0) {
610                 MsgFlags flags = { MSG_UNREAD|MSG_NEW, 0};
611                 folder_item_add_msg(inbox, file, &flags, FALSE);
612         }
613         g_free(head);
614         g_free(body);
615         g_free(msg);
616         claws_unlink(file);
617 }
618 #undef XFACE
619
620 static gboolean wizard_write_config(WizardWindow *wizard)
621 {
622         static gboolean mailbox_ok = FALSE;
623         PrefsAccount *prefs_account = prefs_account_new();
624         GList *account_list = NULL;
625         gchar *smtp_server, *recv_server;
626         gint smtp_port, recv_port;
627 #ifdef USE_GNUTLS
628         SSLType smtp_ssl_type, recv_ssl_type;
629 #endif
630
631         prefs_account->protocol = combobox_get_active_data(
632                                         GTK_COMBO_BOX(wizard->recv_type));
633         
634         if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4 && 
635             !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)))) {
636                 alertpanel_error(_("Please enter the mailbox name."));
637                 g_free(prefs_account);
638                 gtk_notebook_set_current_page (
639                         GTK_NOTEBOOK(wizard->notebook), 
640                         MAILBOX_PAGE);
641                 return FALSE;
642         }
643
644 #ifdef MAEMO
645         if (wizard->create_mailbox) {
646                 g_free(prefs_common.data_root);
647                 if (gtk_toggle_button_get_active(
648                         GTK_TOGGLE_BUTTON(wizard->data_root_nokia_radiobtn)))
649                         prefs_common.data_root = NULL;
650                 else if (gtk_toggle_button_get_active(
651                         GTK_TOGGLE_BUTTON(wizard->data_root_mmc1_radiobtn)))
652                         prefs_common.data_root = g_strdup(MMC1_PATH);
653                 else if (gtk_toggle_button_get_active(
654                         GTK_TOGGLE_BUTTON(wizard->data_root_mmc2_radiobtn)))
655                         prefs_common.data_root = g_strdup(MMC2_PATH);
656         }
657 #endif
658
659         if (!mailbox_ok) {
660                 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
661                         mailbox_ok = setup_write_mailbox_path(wizard->mainwin, 
662                                         gtk_entry_get_text(
663                                                 GTK_ENTRY(wizard->mailbox_name)));
664                 } else
665                         mailbox_ok = TRUE;
666         }
667
668         if (!mailbox_ok) {
669                 /* alertpanel done by setup_write_mailbox_path */
670                 g_free(prefs_account);
671                 gtk_notebook_set_current_page (
672                         GTK_NOTEBOOK(wizard->notebook), 
673                         MAILBOX_PAGE);
674                 return FALSE;
675         }
676         
677         if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->full_name)))
678         ||  !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->email)))) {
679                 alertpanel_error(_("Please enter your name and email address."));
680                 g_free(prefs_account);
681                 gtk_notebook_set_current_page (
682                         GTK_NOTEBOOK(wizard->notebook), 
683                         USER_PAGE);
684                 return FALSE;
685         }
686         
687         if (prefs_account->protocol != A_LOCAL) {
688                 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)))
689                 ||  !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
690                         alertpanel_error(_("Please enter your receiving server "
691                                            "and username."));
692                         g_free(prefs_account);
693                         gtk_notebook_set_current_page (
694                                 GTK_NOTEBOOK(wizard->notebook), 
695                                 RECV_PAGE);
696                         return FALSE;
697                 }
698         } else {
699                 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
700                         alertpanel_error(_("Please enter your username."));
701                         g_free(prefs_account);
702                         gtk_notebook_set_current_page (
703                                 GTK_NOTEBOOK(wizard->notebook), 
704                                 RECV_PAGE);
705                         return FALSE;
706                 }
707         }
708         
709         if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)))) {
710                 alertpanel_error(_("Please enter your SMTP server."));
711                 g_free(prefs_account);
712                 gtk_notebook_set_current_page (
713                         GTK_NOTEBOOK(wizard->notebook), 
714                         SMTP_PAGE);
715                 return FALSE;
716         }
717
718         if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
719                 if (prefs_account->protocol == A_LOCAL
720                 &&  !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)))) {
721                         alertpanel_error(_("Please enter your SMTP username."));
722                         g_free(prefs_account);
723                         gtk_notebook_set_current_page (
724                                 GTK_NOTEBOOK(wizard->notebook), 
725                                 SMTP_PAGE);
726                         return FALSE;           
727                 } /* if it's not local we'll use the reception server */
728         }
729
730         if (prefs_account->protocol != A_LOCAL)
731                 prefs_account->account_name = g_strdup_printf("%s@%s",
732                                 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)),
733                                 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
734         else
735                 prefs_account->account_name = g_strdup_printf("%s",
736                                 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
737
738         recv_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
739         smtp_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)));
740
741         if (prefs_account->protocol != A_LOCAL && strstr(recv_server, ":")) {
742                 recv_port = atoi(strstr(recv_server, ":")+1);
743                 *(strstr(recv_server, ":")) = '\0';
744                 if (prefs_account->protocol == A_IMAP4) {
745                         prefs_account->set_imapport = TRUE;
746                         prefs_account->imapport = recv_port;
747                 } else if (prefs_account->protocol == A_POP3) {
748                         prefs_account->set_popport = TRUE;
749                         prefs_account->popport = recv_port;
750                 }
751         }
752         if (strstr(smtp_server, ":")) {
753                 smtp_port = atoi(strstr(smtp_server, ":")+1);
754                 *(strstr(smtp_server, ":")) = '\0';
755                 prefs_account->set_smtpport = TRUE;
756                 prefs_account->smtpport = smtp_port;
757         }
758         
759         prefs_account->name = g_strdup(
760                                 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)));
761         prefs_account->address = g_strdup(
762                                 gtk_entry_get_text(GTK_ENTRY(wizard->email)));
763         prefs_account->organization = g_strdup(
764                                 gtk_entry_get_text(GTK_ENTRY(wizard->organization)));
765         prefs_account->smtp_server = g_strdup(smtp_server);
766
767         if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
768                 gchar *tmp;
769                 tmp = g_path_get_basename(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)));
770                 prefs_account->inbox = g_strdup_printf("#mh/%s/inbox",
771                         (!strcmp("Mail", gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name))))
772                                 ?_("Mailbox"):tmp);
773                 g_free(tmp);
774                 prefs_account->local_inbox = g_strdup(prefs_account->inbox);
775         } else if (prefs_account->protocol != A_IMAP4) {
776                 if (folder_get_default_inbox())
777                         prefs_account->local_inbox = 
778                                 folder_item_get_identifier(folder_get_default_inbox());
779         }
780
781         if (prefs_account->protocol != A_LOCAL)
782                 prefs_account->recv_server = g_strdup(recv_server);
783         else
784                 prefs_account->local_mbox = g_strdup(recv_server);
785
786         g_free(recv_server);
787         g_free(smtp_server);
788
789         prefs_account->userid = g_strdup(
790                                 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)));
791         prefs_account->passwd = g_strdup(
792                                 gtk_entry_get_text(GTK_ENTRY(wizard->recv_password)));
793
794         prefs_account->smtp_userid = g_strdup(
795                                 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)));
796         prefs_account->smtp_passwd = g_strdup(
797                                 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_password)));
798         if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
799                 prefs_account->use_smtp_auth = TRUE;
800         }
801
802 #ifdef USE_GNUTLS
803         smtp_ssl_type = SSL_NONE;
804         recv_ssl_type = SSL_NONE;       
805
806         if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl))) {
807                 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls)))
808                         smtp_ssl_type = SSL_STARTTLS;
809                 else
810                         smtp_ssl_type = SSL_TUNNEL;
811         }
812         if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl))) {
813                 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls)))
814                         recv_ssl_type = SSL_STARTTLS;
815                 else
816                         recv_ssl_type = SSL_TUNNEL;
817         }
818
819         prefs_account->ssl_smtp = smtp_ssl_type;
820
821         if (prefs_account->protocol == A_IMAP4)
822                 prefs_account->ssl_imap = recv_ssl_type;
823         else
824                 prefs_account->ssl_pop = recv_ssl_type;
825
826         prefs_account->out_ssl_client_cert_file = g_strdup(
827                                 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_ssl_cert_file)));
828         prefs_account->out_ssl_client_cert_pass = g_strdup(
829                                 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_ssl_cert_pass)));
830         prefs_account->in_ssl_client_cert_file = g_strdup(
831                                 gtk_entry_get_text(GTK_ENTRY(wizard->recv_ssl_cert_file)));
832         prefs_account->in_ssl_client_cert_pass = g_strdup(
833                                 gtk_entry_get_text(GTK_ENTRY(wizard->recv_ssl_cert_pass)));
834 #endif
835         if (prefs_account->protocol == A_IMAP4) {
836                 gchar *directory = gtk_editable_get_chars(
837                         GTK_EDITABLE(wizard->recv_imap_subdir), 0, -1);
838                 if (directory && strlen(directory)) {
839                         prefs_account->imap_dir = g_strdup(directory);
840                 }
841                 prefs_account->imap_subsonly = 
842                         gtk_toggle_button_get_active(
843                                 GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn));
844                 g_free(directory);
845         }
846
847         account_list = g_list_append(account_list, prefs_account);
848         prefs_account_write_config_all(account_list);
849         prefs_account_free(prefs_account);
850         account_read_config_all();
851
852         initialize_fonts(wizard);
853         if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4)
854                 write_welcome_email(wizard);
855
856 #ifdef MAEMO
857         if (wizard->volmon_mount_sigid)
858                 g_signal_handler_disconnect(
859                                         G_OBJECT(wizard->volmon),
860                                         wizard->volmon_mount_sigid);
861         if (wizard->volmon_unmount_sigid)
862                 g_signal_handler_disconnect(
863                                         G_OBJECT(wizard->volmon),
864                                         wizard->volmon_unmount_sigid);
865 #endif
866
867 #ifndef G_OS_WIN32 
868         plugin_load_standard_plugins();
869 #endif
870         return TRUE;
871 }
872
873 static GtkWidget* create_page (WizardWindow *wizard, const char * title)
874 {
875         GtkWidget *w;
876         GtkWidget *vbox;
877         GtkWidget *hbox;
878         GtkWidget *image;
879         char *title_string;
880
881         vbox = gtk_vbox_new (FALSE, 6);
882         gtk_container_set_border_width  (GTK_CONTAINER(vbox), 10);
883
884         /* create the titlebar */
885         hbox = gtk_hbox_new (FALSE, 12);
886         image = stock_pixmap_widget(wizard->window, 
887                                 STOCK_PIXMAP_CLAWS_MAIL_ICON);
888         gtk_box_pack_start (GTK_BOX(hbox), image, FALSE, FALSE, 0);
889         title_string = g_strconcat ("<span size=\"xx-large\" weight=\"ultrabold\">", title ? title : "", "</span>", NULL);
890         w = gtk_label_new (title_string);
891         gtk_label_set_use_markup (GTK_LABEL(w), TRUE);
892         g_free (title_string);
893         gtk_box_pack_start (GTK_BOX(hbox), w, FALSE, FALSE, 0);
894
895         /* pack the titlebar */
896         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
897
898         /* pack the separator */
899         gtk_box_pack_start (GTK_BOX(vbox), gtk_hseparator_new(), FALSE, FALSE, 0);
900
901         /* pack space */
902         w = gtk_alignment_new (0, 0, 0, 0);
903         gtk_widget_set_size_request (w, 0, 6);
904         gtk_box_pack_start (GTK_BOX(vbox), w, FALSE, FALSE, 0);
905
906         return vbox;
907 }
908
909 #define PACK_BOX(hbox,text,entry) {                                     \
910         GtkWidget *label = gtk_label_new(text);                         \
911         gtk_label_set_use_markup(GTK_LABEL(label), TRUE);               \
912         if (GTK_IS_MISC(label))                                         \
913                 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);        \
914         gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);      \
915         gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0);        \
916 }
917
918 static gchar *get_default_server(WizardWindow * wizard, const gchar *type)
919 {
920         if (!strcmp(type, "smtp")) {
921                 if (!tmpl.smtpserver || !strlen(tmpl.smtpserver))
922                         return g_strconcat(type, ".", tmpl.domain, NULL);
923                 else 
924                         return g_strdup(tmpl.smtpserver);
925         } else {
926                 if (!tmpl.recvserver || !strlen(tmpl.recvserver))
927                         return g_strconcat(type, ".", tmpl.domain, NULL);
928                 else 
929                         return g_strdup(tmpl.recvserver);
930         }
931 }
932
933 static gchar *get_default_account(WizardWindow * wizard)
934 {
935         gchar *result = NULL;
936         
937         if (!tmpl.recvuser || !strlen(tmpl.recvuser)) {
938                 result = gtk_editable_get_chars(
939                                 GTK_EDITABLE(wizard->email), 0, -1);
940
941                 if (strstr(result, "@")) {
942                         *(strstr(result,"@")) = '\0';
943                 } 
944         } else {
945                 result = g_strdup(tmpl.recvuser);
946         }
947         return result;
948 }
949
950 static gchar *get_default_smtp_account(WizardWindow * wizard)
951 {
952         gchar *result = NULL;
953         
954         if (!tmpl.smtpuser || !strlen(tmpl.smtpuser)) {
955                 return g_strdup("");
956         } else {
957                 result = g_strdup(tmpl.smtpuser);
958         }
959         return result;
960 }
961
962 static void wizard_email_changed(GtkWidget *widget, gpointer data)
963 {
964         WizardWindow *wizard = (WizardWindow *)data;
965         RecvProtocol protocol;
966         gchar *text;
967         protocol = combobox_get_active_data(GTK_COMBO_BOX(wizard->recv_type));
968         
969         text = get_default_server(wizard, "smtp");
970         gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
971         g_free(text);
972
973         text = get_default_account(wizard);
974         gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
975         g_free(text);
976
977         if (protocol == A_POP3) {
978                 text = get_default_server(wizard, "pop");
979                 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
980                 g_free(text);
981         } else if (protocol == A_IMAP4) {
982                 text = get_default_server(wizard, "imap");
983                 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
984                 g_free(text);
985         } else if (protocol == A_LOCAL) {
986                 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
987         }
988         
989 }
990
991 static GtkWidget* user_page (WizardWindow * wizard)
992 {
993         GtkWidget *table = gtk_table_new(1,1, FALSE);
994         GtkWidget *vbox;
995         GtkWidget *hbox;
996         
997         gtk_table_set_row_spacings(GTK_TABLE(table), 4);
998         gtk_table_set_col_spacings(GTK_TABLE(table), 8);
999
1000         vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1001         gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1002
1003         gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2, 
1004                          GTK_EXPAND|GTK_FILL, 0, 0, 0);
1005
1006         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1007         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1008         wizard->full_name = gtk_entry_new();
1009         gtk_entry_set_text(GTK_ENTRY(wizard->full_name), tmpl.name?tmpl.name:"");
1010         PACK_BOX(hbox, _("<span weight=\"bold\">Your name:</span>"),
1011                  wizard->full_name);
1012         
1013         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1014         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1015         wizard->email = gtk_entry_new();
1016         gtk_entry_set_text(GTK_ENTRY(wizard->email), tmpl.email?tmpl.email:"");
1017         PACK_BOX(hbox, _("<span weight=\"bold\">Your email address:</span>"),
1018                  wizard->email);
1019         
1020         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1021         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);      
1022         wizard->organization = gtk_entry_new();
1023         gtk_entry_set_text(GTK_ENTRY(wizard->organization), tmpl.organization?tmpl.organization:"");
1024         PACK_BOX(hbox, _("Your organization:"), wizard->organization);
1025         
1026         g_signal_connect(G_OBJECT(wizard->email), "changed",
1027                          G_CALLBACK(wizard_email_changed),
1028                          wizard);
1029         return table;
1030 }
1031
1032 #ifdef MAEMO
1033 static void wizard_vol_mount_cb(GnomeVFSVolumeMonitor *vfs, GnomeVFSVolume *vol, WizardWindow *wizard)
1034 {
1035         gchar *uri = gnome_vfs_volume_get_activation_uri (vol);
1036         gchar *mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
1037         g_free (uri);
1038         if (mount_path) {
1039                 if(!strcmp(mount_path, MMC1_PATH)) {
1040                         gtk_widget_set_sensitive(wizard->data_root_mmc1_radiobtn, TRUE);
1041                 }
1042                 if(!strcmp(mount_path, MMC2_PATH)) {
1043                         gtk_widget_set_sensitive(wizard->data_root_mmc2_radiobtn, TRUE);
1044                 }
1045         }
1046         g_free(mount_path);
1047 }
1048 static void wizard_vol_unmount_cb(GnomeVFSVolumeMonitor *vfs, GnomeVFSVolume *vol, WizardWindow *wizard)
1049 {
1050         gchar *uri = gnome_vfs_volume_get_activation_uri (vol);
1051         gchar *mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
1052         g_free (uri);
1053         if (mount_path) {
1054                 if(!strcmp(mount_path, MMC1_PATH)) {
1055                         gtk_widget_set_sensitive(wizard->data_root_mmc1_radiobtn, FALSE);
1056                         if (gtk_toggle_button_get_active(
1057                                 GTK_TOGGLE_BUTTON(wizard->data_root_mmc1_radiobtn))) {
1058                                 gtk_toggle_button_set_active(
1059                                         GTK_TOGGLE_BUTTON(wizard->data_root_nokia_radiobtn), TRUE);
1060                         }
1061                 }
1062                 if(!strcmp(mount_path, MMC2_PATH)) {
1063                         gtk_widget_set_sensitive(wizard->data_root_mmc2_radiobtn, FALSE);
1064                         if (gtk_toggle_button_get_active(
1065                                 GTK_TOGGLE_BUTTON(wizard->data_root_mmc2_radiobtn))) {
1066                                 gtk_toggle_button_set_active(
1067                                         GTK_TOGGLE_BUTTON(wizard->data_root_nokia_radiobtn), TRUE);
1068                         }
1069                 }
1070         }
1071         g_free(mount_path);
1072 }
1073
1074 void data_root_changed          (GtkToggleButton        *toggle_btn,
1075                                  WizardWindow *wizard)
1076 {
1077         gchar *name = g_path_get_basename(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)));
1078         gchar *path = NULL;
1079         if (gtk_toggle_button_get_active(
1080                 GTK_TOGGLE_BUTTON(wizard->data_root_nokia_radiobtn)))
1081                 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), name);
1082         else if (gtk_toggle_button_get_active(
1083                 GTK_TOGGLE_BUTTON(wizard->data_root_mmc1_radiobtn))) {
1084                 path = g_strconcat(MMC1_PATH, G_DIR_SEPARATOR_S, 
1085                                   "Claws", G_DIR_SEPARATOR_S, 
1086                                   g_get_user_name(), G_DIR_SEPARATOR_S,
1087                                   name, NULL);
1088                 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), path);
1089                 g_free(path);
1090         } else if (gtk_toggle_button_get_active(
1091                 GTK_TOGGLE_BUTTON(wizard->data_root_mmc2_radiobtn))) {
1092                 path = g_strconcat(MMC2_PATH, G_DIR_SEPARATOR_S, 
1093                                   "Claws", G_DIR_SEPARATOR_S, 
1094                                   g_get_user_name(), G_DIR_SEPARATOR_S,
1095                                   name, NULL);
1096                 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), path);
1097                 g_free(path);
1098         }
1099         g_free(name);
1100 }
1101 #endif
1102
1103 static GtkWidget* mailbox_page (WizardWindow * wizard)
1104 {
1105         GtkWidget *table = gtk_table_new(1,1, FALSE);
1106         GtkWidget *vbox;
1107 #ifdef MAEMO
1108         GtkWidget *vbox2;
1109         gchar *uri, *mount_path;
1110 #endif
1111         GtkWidget *hbox;
1112         CLAWS_TIP_DECL();
1113
1114         gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1115         gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1116
1117         vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1118         gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1119
1120         gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2, 
1121                          GTK_EXPAND|GTK_FILL, 0, 0, 0);
1122
1123         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1124         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1125
1126         wizard->mailbox_label = gtk_label_new(_("<span weight=\"bold\">Mailbox name:</span>"));
1127         gtk_label_set_use_markup(GTK_LABEL(wizard->mailbox_label), TRUE);
1128         if (GTK_IS_MISC(wizard->mailbox_label))                                               
1129                 gtk_misc_set_alignment(GTK_MISC(wizard->mailbox_label), 1, 0.5);              
1130         wizard->mailbox_name = gtk_entry_new();
1131
1132         gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), tmpl.mailbox?tmpl.mailbox:"");
1133
1134         CLAWS_SET_TIP(wizard->mailbox_name, _("You can also specify an absolute path, for example: "
1135                                "\"/home/john/Documents/Mail\""));
1136
1137         gtk_box_pack_start(GTK_BOX(hbox), wizard->mailbox_label, FALSE, FALSE, 0);
1138         gtk_box_pack_start(GTK_BOX(hbox), wizard->mailbox_name, TRUE, TRUE, 0);
1139
1140 #ifdef MAEMO
1141         wizard->data_root_nokia_radiobtn = gtk_radio_button_new_with_label(NULL,
1142                 _("on internal memory"));
1143         wizard->data_root_mmc1_radiobtn = gtk_radio_button_new_with_label_from_widget(
1144                 GTK_RADIO_BUTTON(wizard->data_root_nokia_radiobtn),
1145                 _("on external memory card"));
1146         wizard->data_root_mmc2_radiobtn = gtk_radio_button_new_with_label_from_widget(
1147                 GTK_RADIO_BUTTON(wizard->data_root_nokia_radiobtn),
1148                 _("on internal memory card"));
1149                 
1150         g_signal_connect(G_OBJECT(wizard->data_root_nokia_radiobtn), "toggled",
1151                          G_CALLBACK(data_root_changed), wizard);
1152         g_signal_connect(G_OBJECT(wizard->data_root_mmc1_radiobtn), "toggled",
1153                          G_CALLBACK(data_root_changed), wizard);
1154         g_signal_connect(G_OBJECT(wizard->data_root_mmc2_radiobtn), "toggled",
1155                          G_CALLBACK(data_root_changed), wizard);
1156
1157         wizard->volmon = gnome_vfs_get_volume_monitor();
1158         wizard->vol_mmc1 = gnome_vfs_volume_monitor_get_volume_for_path(wizard->volmon, MMC1_PATH);
1159         wizard->vol_mmc2 = gnome_vfs_volume_monitor_get_volume_for_path(wizard->volmon, MMC2_PATH);
1160
1161         uri = gnome_vfs_volume_get_activation_uri (wizard->vol_mmc1);
1162         mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
1163         g_free(uri);
1164         if (wizard->vol_mmc1 == NULL || !gnome_vfs_volume_is_mounted(wizard->vol_mmc1)
1165             || strcmp(mount_path, MMC1_PATH)) {
1166                 gtk_widget_set_sensitive(wizard->data_root_mmc1_radiobtn, FALSE);
1167         }
1168         g_free(mount_path);
1169
1170         uri = gnome_vfs_volume_get_activation_uri (wizard->vol_mmc2);
1171         mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
1172         g_free(uri);
1173         if (wizard->vol_mmc2 == NULL || !gnome_vfs_volume_is_mounted(wizard->vol_mmc2)
1174             || strcmp(mount_path, MMC2_PATH)) {
1175                 gtk_widget_set_sensitive(wizard->data_root_mmc2_radiobtn, FALSE);
1176         } else {
1177                 gtk_toggle_button_set_active(wizard->data_root_mmc2_radiobtn, TRUE);
1178         }
1179         g_free(mount_path);
1180         
1181         gnome_vfs_volume_unref(wizard->vol_mmc1);
1182         gnome_vfs_volume_unref(wizard->vol_mmc2);
1183         wizard->vol_mmc1 = NULL;
1184         wizard->vol_mmc2 = NULL;
1185
1186         wizard->volmon_mount_sigid = g_signal_connect(G_OBJECT(wizard->volmon), 
1187                                         "volume-mounted", G_CALLBACK(wizard_vol_mount_cb), wizard);
1188         wizard->volmon_unmount_sigid = g_signal_connect(G_OBJECT(wizard->volmon), 
1189                                         "volume-unmounted", G_CALLBACK(wizard_vol_unmount_cb), wizard);
1190
1191         vbox2 = gtk_vbox_new(FALSE, VSPACING_NARROW);
1192         gtk_box_pack_start (GTK_BOX(vbox2), wizard->data_root_nokia_radiobtn, FALSE, FALSE, 0);
1193         gtk_box_pack_start (GTK_BOX(vbox2), wizard->data_root_mmc1_radiobtn, FALSE, FALSE, 0);
1194         gtk_box_pack_start (GTK_BOX(vbox2), wizard->data_root_mmc2_radiobtn, FALSE, FALSE, 0);
1195
1196         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1197         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1198         PACK_BOX(hbox, _("<span weight=\"bold\">Store data</span>"),
1199                  vbox2);
1200 #endif
1201
1202         return table;
1203 }
1204
1205 static void smtp_auth_changed (GtkWidget *btn, gpointer data)
1206 {
1207         WizardWindow *wizard = (WizardWindow *)data;
1208         gboolean do_auth = gtk_toggle_button_get_active(
1209                 GTK_TOGGLE_BUTTON(wizard->smtp_auth));
1210         gtk_widget_set_sensitive(wizard->smtp_username, do_auth);
1211         gtk_widget_set_sensitive(wizard->smtp_username_label, do_auth);
1212         gtk_widget_set_sensitive(wizard->smtp_password, do_auth);
1213         gtk_widget_set_sensitive(wizard->smtp_password_label, do_auth);
1214 }
1215
1216 #ifdef USE_GNUTLS
1217 static void cert_browse_cb(GtkWidget *widget, gpointer data)
1218 {
1219         GtkEntry *dest = GTK_ENTRY(data);
1220         gchar *filename;
1221         gchar *utf8_filename;
1222
1223         filename = filesel_select_file_open(_("Select certificate file"), NULL);
1224         if (!filename) return;
1225
1226         utf8_filename = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
1227         if (!utf8_filename) {
1228                 g_warning("cert_browse_cb(): failed to convert character set.");
1229                 utf8_filename = g_strdup(filename);
1230         }
1231         gtk_entry_set_text(dest, utf8_filename);
1232         g_free(utf8_filename);
1233 }
1234 #endif
1235
1236 static GtkWidget* smtp_page (WizardWindow * wizard)
1237 {
1238         GtkWidget *table = gtk_table_new(1, 1, FALSE);
1239         GtkWidget *vbox;
1240         GtkWidget *hbox;
1241 #ifdef USE_GNUTLS
1242         GtkWidget *label;
1243         GtkWidget *button;
1244         GtkWidget *smtp_cert_table;
1245 #endif
1246         gchar *text;
1247         CLAWS_TIP_DECL();
1248         
1249         gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1250         gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1251
1252         vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1253         gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1254
1255         gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2, 
1256                          GTK_EXPAND|GTK_FILL, 0, 0, 0);
1257
1258         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1259         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1260         wizard->smtp_server = gtk_entry_new();
1261         text = get_default_server(wizard, "smtp");
1262         gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
1263         g_free(text);
1264
1265         CLAWS_SET_TIP(wizard->smtp_server,
1266                              _("You can specify the port number by appending it at the end: "
1267                                "\"mail.example.com:25\""));
1268
1269         PACK_BOX(hbox, _("<span weight=\"bold\">SMTP server address:</span>"),
1270                  wizard->smtp_server);
1271
1272
1273         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1274         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1275         wizard->smtp_auth = gtk_check_button_new_with_label(
1276                                         _("Use authentication"));
1277         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth),
1278                         tmpl.smtpauth);
1279         g_signal_connect(G_OBJECT(wizard->smtp_auth), "toggled",
1280                          G_CALLBACK(smtp_auth_changed),
1281                          wizard);
1282         gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_auth, FALSE, FALSE, 0);
1283
1284         text = get_default_smtp_account(wizard);
1285
1286         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1287         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1288         wizard->smtp_username = gtk_entry_new();
1289         gtk_entry_set_text(GTK_ENTRY(wizard->smtp_username), text);
1290         g_free(text);
1291         wizard->smtp_username_label = gtk_label_new(_("SMTP username:\n"
1292                                         "<span size=\"small\">(empty to use the same as receive)</span>"));
1293         gtk_label_set_use_markup(GTK_LABEL(wizard->smtp_username_label), TRUE);
1294         if (GTK_IS_MISC(wizard->smtp_username_label))                                                 
1295                 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_username_label), 1, 0.5);        
1296         gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_username_label, FALSE, FALSE, 0);
1297         gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_username, TRUE, TRUE, 0);
1298
1299         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1300         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1301         wizard->smtp_password = gtk_entry_new();
1302         gtk_entry_set_text(GTK_ENTRY(wizard->smtp_password), tmpl.smtppass?tmpl.smtppass:""); 
1303         gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_password), FALSE);
1304 #ifdef MAEMO
1305         hildon_gtk_entry_set_input_mode(GTK_ENTRY(wizard->smtp_password), 
1306                 HILDON_GTK_INPUT_MODE_FULL | HILDON_GTK_INPUT_MODE_INVISIBLE);
1307 #endif
1308         wizard->smtp_password_label = gtk_label_new(_("SMTP password:\n"
1309                                         "<span size=\"small\">(empty to use the same as receive)</span>"));
1310         gtk_label_set_use_markup(GTK_LABEL(wizard->smtp_password_label), TRUE);
1311         if (GTK_IS_MISC(wizard->smtp_password_label))                                                 
1312                 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_password_label), 1, 0.5);        
1313         gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_password_label, FALSE, FALSE, 0);
1314         gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_password, TRUE, TRUE, 0);
1315 #ifdef USE_GNUTLS
1316         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1317         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1318         wizard->smtp_use_ssl = gtk_check_button_new_with_label(
1319                                         _("Use SSL to connect to SMTP server"));
1320         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl),
1321                         tmpl.smtpssl != 0);
1322         gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_ssl, FALSE, FALSE, 0);
1323
1324         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1325         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1326         wizard->smtp_use_tls = gtk_check_button_new_with_label(
1327                                         _("Use SSL via STARTTLS"));
1328         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls),
1329                         tmpl.smtpssl == 2);
1330         gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_tls, FALSE, FALSE, 0);
1331         SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, wizard->smtp_use_tls);
1332         
1333         smtp_cert_table = gtk_table_new(3,3, FALSE);
1334         gtk_container_set_border_width(GTK_CONTAINER(smtp_cert_table), 8);
1335         gtk_box_pack_start (GTK_BOX(vbox), smtp_cert_table, FALSE, FALSE, 0);
1336         label = gtk_label_new(_("Client SSL certificate (optional)"));
1337         gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
1338         gtk_table_attach(GTK_TABLE(smtp_cert_table), label, 0, 3, 0, 1, GTK_FILL, 0, 0, 0);
1339         label = gtk_label_new(_("File"));
1340         gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1341         gtk_table_attach(GTK_TABLE(smtp_cert_table), label, 0, 1, 1, 2, GTK_FILL, 0, 0, 0);
1342         wizard->smtp_ssl_cert_file = gtk_entry_new();
1343         gtk_entry_set_text(GTK_ENTRY(wizard->smtp_ssl_cert_file), tmpl.smtpssl_cert?tmpl.smtpssl_cert:"");
1344         gtk_table_attach(GTK_TABLE(smtp_cert_table), wizard->smtp_ssl_cert_file, 1, 2, 1, 2, GTK_FILL, 0, 0, 0);
1345         button = gtkut_get_browse_file_btn(_("Browse"));
1346         gtk_table_attach(GTK_TABLE(smtp_cert_table), button, 2, 3, 1, 2, GTK_FILL, 0, 0, 0);
1347         SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, label);
1348         SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, wizard->smtp_ssl_cert_file);
1349         SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, button);
1350         g_signal_connect(G_OBJECT(button), "clicked",
1351                          G_CALLBACK(cert_browse_cb), wizard->smtp_ssl_cert_file);
1352
1353         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1354         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1355         label = gtk_label_new(_("Password"));
1356         gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1357         gtk_table_attach(GTK_TABLE(smtp_cert_table), label, 0, 1, 2, 3, GTK_FILL, 0, 0, 0);
1358         wizard->smtp_ssl_cert_pass = gtk_entry_new();
1359         gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_ssl_cert_pass), FALSE);
1360         gtk_entry_set_text(GTK_ENTRY(wizard->smtp_ssl_cert_pass), tmpl.smtpssl_cert_pass?tmpl.smtpssl_cert_pass:"");
1361         gtk_table_attach(GTK_TABLE(smtp_cert_table), wizard->smtp_ssl_cert_pass, 1, 2, 2, 3, GTK_FILL, 0, 0, 0);
1362         SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, label);
1363         SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, wizard->smtp_ssl_cert_pass);
1364         wizard->smtp_cert_table = smtp_cert_table;
1365 #endif
1366         smtp_auth_changed(NULL, wizard);
1367         return table;
1368 }
1369
1370 static void wizard_protocol_change(WizardWindow *wizard, RecvProtocol protocol)
1371 {
1372         gchar *text;
1373         
1374         if (protocol == A_POP3) {
1375                 text = get_default_server(wizard, "pop");
1376                 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1377                 gtk_widget_hide(wizard->recv_imap_label);
1378                 gtk_widget_hide(wizard->recv_imap_subdir);
1379                 gtk_widget_hide(wizard->subsonly_checkbtn);
1380                 gtk_widget_show(wizard->recv_username);
1381                 gtk_widget_show(wizard->recv_password);
1382                 gtk_widget_show(wizard->recv_username_label);
1383                 gtk_widget_show(wizard->recv_password_label);
1384                 gtk_widget_hide(wizard->no_imap_warning);
1385 #ifdef USE_GNUTLS
1386                 gtk_widget_show(wizard->recv_use_ssl);
1387                 gtk_widget_show(wizard->recv_use_tls);
1388                 gtk_widget_show(wizard->recv_cert_table);
1389 #endif
1390                 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1391                 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1392                 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1393                 g_free(text);
1394                 if (wizard->create_mailbox) {
1395                         gtk_widget_show(wizard->mailbox_label);
1396                         gtk_widget_show(wizard->mailbox_name);
1397                 }
1398         } else if (protocol == A_IMAP4) {
1399 #ifdef HAVE_LIBETPAN
1400                 text = get_default_server(wizard, "imap");
1401                 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1402                 gtk_widget_show(wizard->recv_imap_label);
1403                 gtk_widget_show(wizard->recv_imap_subdir);
1404                 gtk_widget_show(wizard->subsonly_checkbtn);
1405                 gtk_widget_show(wizard->recv_username);
1406                 gtk_widget_show(wizard->recv_password);
1407                 gtk_widget_show(wizard->recv_username_label);
1408                 gtk_widget_show(wizard->recv_password_label);
1409                 gtk_widget_hide(wizard->no_imap_warning);
1410 #ifdef USE_GNUTLS
1411                 gtk_widget_show(wizard->recv_use_ssl);
1412                 gtk_widget_show(wizard->recv_use_tls);
1413                 gtk_widget_show(wizard->recv_cert_table);
1414 #endif
1415                 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1416                 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1417                 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1418                 g_free(text);
1419                 if (wizard->create_mailbox) {
1420                         gtk_widget_hide(wizard->mailbox_label);
1421                         gtk_widget_hide(wizard->mailbox_name);
1422                 }
1423 #else
1424                 gtk_widget_hide(wizard->recv_imap_label);
1425                 gtk_widget_hide(wizard->recv_imap_subdir);
1426                 gtk_widget_hide(wizard->subsonly_checkbtn);
1427                 gtk_widget_hide(wizard->recv_username);
1428                 gtk_widget_hide(wizard->recv_password);
1429                 gtk_widget_hide(wizard->recv_username_label);
1430                 gtk_widget_hide(wizard->recv_password_label);
1431                 gtk_widget_show(wizard->no_imap_warning);
1432                 if (wizard->create_mailbox) {
1433                         gtk_widget_hide(wizard->mailbox_label);
1434                         gtk_widget_hide(wizard->mailbox_name);
1435                 }
1436 #ifdef USE_GNUTLS
1437                 gtk_widget_hide(wizard->recv_use_ssl);
1438                 gtk_widget_hide(wizard->recv_use_tls);
1439                 gtk_widget_hide(wizard->recv_cert_table);
1440 #endif
1441                 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, FALSE);
1442 #endif
1443         } else if (protocol == A_LOCAL) {
1444                 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
1445                 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Local mailbox:</span>"));
1446                 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1447                 gtk_widget_hide(wizard->no_imap_warning);
1448                 gtk_widget_hide(wizard->recv_imap_label);
1449                 gtk_widget_hide(wizard->recv_imap_subdir);
1450                 gtk_widget_hide(wizard->subsonly_checkbtn);
1451                 gtk_widget_hide(wizard->recv_username);
1452                 gtk_widget_hide(wizard->recv_password);
1453                 gtk_widget_hide(wizard->recv_username_label);
1454                 gtk_widget_hide(wizard->recv_password_label);
1455 #ifdef USE_GNUTLS
1456                 gtk_widget_hide(wizard->recv_use_ssl);
1457                 gtk_widget_hide(wizard->recv_use_tls);
1458                 gtk_widget_hide(wizard->recv_cert_table);
1459 #endif
1460                 if (wizard->create_mailbox) {
1461                         gtk_widget_show(wizard->mailbox_label);
1462                         gtk_widget_show(wizard->mailbox_name);
1463                 }
1464                 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1465         }
1466 }
1467
1468 static void wizard_protocol_changed(GtkComboBox *combo, gpointer data)
1469 {
1470         WizardWindow *wizard = (WizardWindow *)data;
1471         RecvProtocol protocol = combobox_get_active_data(combo);
1472
1473         wizard_protocol_change(wizard, protocol);       
1474 }
1475
1476 static GtkWidget* recv_page (WizardWindow * wizard)
1477 {
1478         GtkWidget *table = gtk_table_new(1,1, FALSE);
1479         GtkWidget *vbox;
1480         GtkWidget *hbox;
1481 #ifdef USE_GNUTLS
1482         GtkWidget *label;
1483         GtkWidget *button;
1484         GtkWidget *recv_cert_table;
1485 #endif
1486         GtkListStore *store;
1487         GtkTreeIter iter;
1488         gchar *text;
1489         gint index = 0;
1490         CLAWS_TIP_DECL();
1491
1492         gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1493         gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1494
1495         vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1496         gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1497
1498         gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2, 
1499                          GTK_EXPAND|GTK_FILL, 0, 0, 0);
1500
1501         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1502         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1503         wizard->recv_type = gtkut_sc_combobox_create(NULL, FALSE);
1504         store = GTK_LIST_STORE(gtk_combo_box_get_model(
1505                         GTK_COMBO_BOX(wizard->recv_type)));
1506
1507         COMBOBOX_ADD(store, _("POP3"), A_POP3);
1508         COMBOBOX_ADD(store, _("IMAP"), A_IMAP4);
1509         COMBOBOX_ADD(store, _("Local mbox file"), A_LOCAL);
1510
1511         switch(tmpl.recvtype) {
1512         case A_POP3: 
1513                 index = 0;
1514                 break;
1515         case A_IMAP4:
1516                 index = 1;
1517                 break;
1518         case A_LOCAL:
1519                 index = 2;
1520                 break;
1521         default:
1522                 index = 0;
1523         }
1524         gtk_combo_box_set_active(GTK_COMBO_BOX (wizard->recv_type), index);
1525         g_signal_connect(G_OBJECT(wizard->recv_type), "changed",
1526                          G_CALLBACK(wizard_protocol_changed),
1527                          wizard);
1528         PACK_BOX(hbox, _("<span weight=\"bold\">Server type:</span>"),
1529                  wizard->recv_type);
1530
1531         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1532         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1533         wizard->recv_server = gtk_entry_new();
1534         text = get_default_server(wizard, "pop");
1535         gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1536         g_free(text);
1537         
1538         CLAWS_SET_TIP(wizard->recv_server,
1539                              _("You can specify the port number by appending it at the end: "
1540                                "\"mail.example.com:110\""));
1541
1542         wizard->recv_label = gtk_label_new(_("<span weight=\"bold\">Server address:</span>"));
1543         gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1544         if (GTK_IS_MISC(wizard->recv_label))                                                  
1545                 gtk_misc_set_alignment(GTK_MISC(wizard->recv_label), 1, 0.5);         
1546         gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_label, FALSE, FALSE, 0);
1547         gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_server, TRUE, TRUE, 0);
1548         
1549         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1550         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1551         wizard->recv_username = gtk_entry_new();
1552         wizard->recv_username_label = gtk_label_new(_("<span weight=\"bold\">Username:</span>"));
1553         gtk_label_set_use_markup(GTK_LABEL(wizard->recv_username_label), TRUE);
1554         if (GTK_IS_MISC(wizard->recv_username_label))                                                 
1555                 gtk_misc_set_alignment(GTK_MISC(wizard->recv_username_label), 1, 0.5);        
1556         gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_username_label, FALSE, FALSE, 0);
1557         gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_username, TRUE, TRUE, 0);
1558         
1559         text = get_default_account(wizard);
1560         gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
1561         g_free(text);
1562
1563         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1564         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1565         wizard->recv_password = gtk_entry_new();
1566         gtk_entry_set_text(GTK_ENTRY(wizard->recv_password), tmpl.recvpass?tmpl.recvpass:"");
1567         wizard->recv_password_label = gtk_label_new(_("Password:"));
1568         if (GTK_IS_MISC(wizard->recv_password_label))                                                 
1569                 gtk_misc_set_alignment(GTK_MISC(wizard->recv_password_label), 1, 0.5);        
1570         gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_password), FALSE);
1571 #ifdef MAEMO
1572         hildon_gtk_entry_set_input_mode(GTK_ENTRY(wizard->recv_password), 
1573                 HILDON_GTK_INPUT_MODE_FULL | HILDON_GTK_INPUT_MODE_INVISIBLE);
1574 #endif
1575         gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_password_label, FALSE, FALSE, 0);
1576         gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_password, TRUE, TRUE, 0);
1577         
1578 #ifdef USE_GNUTLS
1579         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1580         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1581         wizard->recv_use_ssl = gtk_check_button_new_with_label(
1582                                         _("Use SSL to connect to receiving server"));
1583         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl),
1584                         tmpl.recvssl != 0);
1585         gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_ssl, FALSE, FALSE, 0);
1586
1587         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1588         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1589         wizard->recv_use_tls = gtk_check_button_new_with_label(
1590                                         _("Use SSL via STARTTLS"));
1591         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls),
1592                         tmpl.recvssl == 2);
1593         gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_tls, FALSE, FALSE, 0);
1594         SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, wizard->recv_use_tls);
1595
1596         recv_cert_table = gtk_table_new(3,3, FALSE);
1597         gtk_container_set_border_width(GTK_CONTAINER(recv_cert_table), 8);
1598         gtk_box_pack_start (GTK_BOX(vbox), recv_cert_table, FALSE, FALSE, 0);
1599         label = gtk_label_new(_("Client SSL certificate (optional)"));
1600         gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
1601         gtk_table_attach(GTK_TABLE(recv_cert_table), label, 0, 3, 0, 1, GTK_FILL, 0, 0, 0);
1602         label = gtk_label_new(_("File"));
1603         gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1604         gtk_table_attach(GTK_TABLE(recv_cert_table), label, 0, 1, 1, 2, GTK_FILL, 0, 0, 0);
1605         wizard->recv_ssl_cert_file = gtk_entry_new();
1606         gtk_entry_set_text(GTK_ENTRY(wizard->recv_ssl_cert_file), tmpl.recvssl_cert?tmpl.recvssl_cert:"");
1607         gtk_table_attach(GTK_TABLE(recv_cert_table), wizard->recv_ssl_cert_file, 1, 2, 1, 2, GTK_FILL, 0, 0, 0);
1608         button = gtkut_get_browse_file_btn(_("Browse"));
1609         gtk_table_attach(GTK_TABLE(recv_cert_table), button, 2, 3, 1, 2, GTK_FILL, 0, 0, 0);
1610         SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, label);
1611         SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, wizard->recv_ssl_cert_file);
1612         SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, button);
1613         g_signal_connect(G_OBJECT(button), "clicked",
1614                          G_CALLBACK(cert_browse_cb), wizard->recv_ssl_cert_file);
1615
1616         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1617         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1618         label = gtk_label_new(_("Password"));
1619         gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1620         gtk_table_attach(GTK_TABLE(recv_cert_table), label, 0, 1, 2, 3, GTK_FILL, 0, 0, 0);
1621         wizard->recv_ssl_cert_pass = gtk_entry_new();
1622         gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_ssl_cert_pass), FALSE);
1623         gtk_entry_set_text(GTK_ENTRY(wizard->recv_ssl_cert_pass), tmpl.recvssl_cert_pass?tmpl.recvssl_cert_pass:"");
1624         gtk_table_attach(GTK_TABLE(recv_cert_table), wizard->recv_ssl_cert_pass, 1, 2, 2, 3, GTK_FILL, 0, 0, 0);
1625         SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, label);
1626         SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, wizard->recv_ssl_cert_pass);
1627         wizard->recv_cert_table = recv_cert_table;
1628 #endif  
1629         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1630         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1631         wizard->recv_imap_subdir = gtk_entry_new();
1632         gtk_entry_set_text(GTK_ENTRY(wizard->recv_imap_subdir), tmpl.imapdir?tmpl.imapdir:"");
1633         wizard->recv_imap_label = gtk_label_new(_("IMAP server directory:"));
1634         if (GTK_IS_MISC(wizard->recv_imap_label))                                                     
1635                 gtk_misc_set_alignment(GTK_MISC(wizard->recv_imap_label), 1, 0.5);            
1636         gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_label, FALSE, FALSE, 0);
1637         gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_subdir, TRUE, TRUE, 0);
1638         
1639         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1640         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1641         wizard->subsonly_checkbtn = gtk_check_button_new_with_label(
1642                         _("Show only subscribed folders"));
1643         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn),
1644                         tmpl.subsonly);
1645         gtk_box_pack_start(GTK_BOX(hbox), wizard->subsonly_checkbtn, FALSE, FALSE, 0);
1646         
1647         hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1648         gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1649         wizard->no_imap_warning = gtk_label_new(_(
1650                           "<span weight=\"bold\">Warning: this version of Claws Mail\n"
1651                           "has been built without IMAP support.</span>"));
1652         gtk_label_set_use_markup(GTK_LABEL(wizard->no_imap_warning), TRUE);
1653         gtk_box_pack_start(GTK_BOX(hbox), wizard->no_imap_warning, FALSE, FALSE, 0);
1654
1655         return table;
1656 }
1657
1658 static void
1659 wizard_response_cb (GtkDialog * dialog, int response, gpointer data)
1660 {
1661         WizardWindow * wizard = (WizardWindow *)data;
1662         int current_page, num_pages;
1663         gboolean skip_mailbox_page = FALSE;
1664 #ifndef MAEMO
1665         gint protocol = combobox_get_active_data(GTK_COMBO_BOX(wizard->recv_type));
1666
1667         if (protocol == A_IMAP4) {
1668                 skip_mailbox_page = TRUE;
1669         }
1670 #endif
1671
1672         num_pages = g_slist_length(wizard->pages);
1673
1674         current_page = gtk_notebook_get_current_page (
1675                                 GTK_NOTEBOOK(wizard->notebook));
1676         if (response == CANCEL)
1677         {
1678                 wizard->result = FALSE;
1679                 wizard->finished = TRUE;
1680                 gtk_widget_destroy (GTK_WIDGET(dialog));
1681         }
1682         else if (response == FINISHED)
1683         {
1684                 if (!wizard_write_config(wizard)) {
1685                         current_page = gtk_notebook_get_current_page (
1686                                         GTK_NOTEBOOK(wizard->notebook));
1687                         goto set_sens;
1688                 }
1689                 wizard->result = TRUE;
1690                 wizard->finished = TRUE;
1691                 gtk_widget_destroy (GTK_WIDGET(dialog));
1692         }
1693         else
1694         {
1695                 if (response == GO_BACK)
1696                 {
1697                         if (current_page > 0) {
1698                                 current_page--;
1699                                 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1700                                         /* mailbox */
1701                                         current_page--;
1702                                 }
1703                                 gtk_notebook_set_current_page (
1704                                         GTK_NOTEBOOK(wizard->notebook), 
1705                                         current_page);
1706                         }
1707                 }
1708                 else if (response == GO_FORWARD)
1709                 {
1710                         if (current_page < (num_pages-1)) {
1711                                 current_page++;
1712                                 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1713                                         /* mailbox */
1714                                         current_page++;
1715                                 }
1716                                 gtk_notebook_set_current_page (
1717                                         GTK_NOTEBOOK(wizard->notebook), 
1718                                         current_page);
1719                         }
1720                 }
1721 set_sens:
1722                 gtk_dialog_set_response_sensitive (dialog, GO_BACK, 
1723                                 current_page > 0);
1724                 gtk_dialog_set_response_sensitive (dialog, GO_FORWARD, 
1725                                 current_page < (num_pages - 1));
1726                 if (current_page == (num_pages -1)) {
1727                         gtk_dialog_set_response_sensitive (dialog, FINISHED, TRUE);
1728                         gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), FINISHED);
1729                 } else {
1730                         gtk_dialog_set_response_sensitive (dialog, FINISHED, FALSE);
1731                         gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), GO_FORWARD);
1732                 }
1733
1734         }
1735 }
1736
1737 static gint wizard_close_cb(GtkWidget *widget, GdkEventAny *event,
1738                                  gpointer data)
1739 {
1740         WizardWindow *wizard = (WizardWindow *)data;
1741         wizard->result = FALSE;
1742         wizard->finished = TRUE;
1743         
1744         return FALSE;
1745 }
1746
1747 #define PACK_WARNING(text) {                                            \
1748         label = gtk_label_new(text);                                    \
1749         gtk_misc_set_alignment(GTK_MISC(label), 0, 0);                  \
1750         gtk_box_pack_end(GTK_BOX(widget), label, FALSE, FALSE, 0);      \
1751 }
1752
1753 gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) {
1754         WizardWindow *wizard = g_new0(WizardWindow, 1);
1755         GtkWidget *page;
1756         GtkWidget *widget;
1757         GtkWidget *label;
1758         GtkWidget *scrolled_window;
1759         gchar     *text;
1760         GSList    *cur;
1761         gboolean   result;
1762         gint i = 0;
1763         wizard->mainwin = mainwin;
1764         wizard->create_mailbox = create_mailbox;
1765         
1766         gtk_widget_hide(mainwin->window);
1767         
1768         wizard_read_defaults();
1769         
1770         wizard->window = gtk_dialog_new_with_buttons (_("Claws Mail Setup Wizard"),
1771                         NULL, 0, 
1772                         GTK_STOCK_GO_BACK, GO_BACK,
1773                         GTK_STOCK_GO_FORWARD, GO_FORWARD,
1774                         GTK_STOCK_SAVE, FINISHED,
1775                         GTK_STOCK_CANCEL, CANCEL,
1776                         NULL);
1777         gtk_widget_set_size_request(wizard->window, -1, 480);
1778         gtk_window_set_position(GTK_WINDOW(wizard->window), GTK_WIN_POS_CENTER);
1779
1780         g_signal_connect(wizard->window, "response", 
1781                           G_CALLBACK(wizard_response_cb), wizard);
1782         gtk_widget_realize(wizard->window);
1783         gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), 
1784                         GO_FORWARD);
1785         gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window), 
1786                         GO_BACK, FALSE);
1787         gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window), 
1788                         GO_FORWARD, TRUE);
1789         gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window), 
1790                         FINISHED, FALSE);
1791         gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window), 
1792                         CANCEL, TRUE);
1793         
1794         wizard->notebook = gtk_notebook_new();
1795         gtk_notebook_set_show_tabs(GTK_NOTEBOOK(wizard->notebook), FALSE);
1796         gtk_notebook_set_show_border(GTK_NOTEBOOK(wizard->notebook), FALSE);
1797         gtk_box_pack_start(GTK_BOX(GTK_DIALOG(wizard->window)->vbox), 
1798                             wizard->notebook, TRUE, TRUE, 0);
1799         
1800         wizard->pages = NULL;
1801         
1802 /*welcome page: 0 */
1803         WELCOME_PAGE = i;
1804         page = create_page(wizard, _("Welcome to Claws Mail"));
1805         
1806         wizard->pages = g_slist_append(wizard->pages, page);
1807         widget = stock_pixmap_widget(wizard->window, 
1808                                 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1809
1810         gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1811         
1812         text = g_strdup(_("Welcome to the Claws Mail setup wizard.\n\n"
1813                           "We will begin by defining some basic "
1814                           "information about you and your most common "
1815                           "mail options so that you can start to use "
1816                           "Claws Mail in less than five minutes."));
1817         widget = gtk_label_new(text);
1818         gtk_label_set_line_wrap(GTK_LABEL(widget), TRUE);
1819 #ifndef MAEMO
1820         gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1821 #else
1822         scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1823         gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1824                                         GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1825         gtk_box_pack_start(GTK_BOX(page), scrolled_window, TRUE, TRUE, 0);
1826
1827         gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1828                                               widget);
1829 #endif
1830         g_free(text);
1831
1832 /* user page: 1 */
1833         i++;
1834         USER_PAGE = i;
1835         widget = create_page (wizard, _("About You"));
1836         scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1837         gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1838                                         GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1839         gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1840
1841         gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1842                                               user_page(wizard));
1843         PACK_WARNING(_("Bold fields must be completed"));
1844         
1845         wizard->pages = g_slist_append(wizard->pages, widget);
1846
1847 /* recv+auth page: 2 */
1848         i++;
1849         RECV_PAGE = i;
1850         widget = create_page (wizard, _("Receiving mail"));
1851         scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1852         gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1853                                         GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1854         gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1855
1856         gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1857                                               recv_page(wizard));
1858         PACK_WARNING(_("Bold fields must be completed"));
1859         
1860         wizard->pages = g_slist_append(wizard->pages, widget);
1861
1862 /*smtp page: 3 */
1863         i++;
1864         SMTP_PAGE = i;
1865         widget = create_page (wizard, _("Sending mail"));
1866         scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1867         gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1868                                         GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1869         gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1870
1871         gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1872                                               smtp_page(wizard));
1873         PACK_WARNING(_("Bold fields must be completed"));
1874         
1875         wizard->pages = g_slist_append(wizard->pages, widget);
1876
1877 /* mailbox page: 4 */
1878         if (create_mailbox) {
1879                 i++;
1880                 MAILBOX_PAGE = i;
1881                 widget = create_page (wizard, _("Saving mail on disk"));
1882                 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1883                 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1884                                         GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1885                 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1886
1887                 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1888                                               mailbox_page(wizard));
1889                 PACK_WARNING(_("Bold fields must be completed"));
1890         
1891                 wizard->pages = g_slist_append(wizard->pages, widget);
1892         }
1893
1894 /* done page: 6 */
1895         i++;
1896         DONE_PAGE = i;
1897         page = create_page(wizard, _("Configuration finished"));
1898         
1899         wizard->pages = g_slist_append(wizard->pages, page);
1900         widget = stock_pixmap_widget(wizard->window, 
1901                                 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1902
1903         gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1904         
1905         text = g_strdup(_("Claws Mail is now ready.\n"
1906                           "Click Save to start."));
1907         widget = gtk_label_new(text);
1908         gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1909         g_free(text);
1910
1911
1912         for (cur = wizard->pages; cur && cur->data; cur = cur->next) {
1913                 gtk_notebook_append_page (GTK_NOTEBOOK(wizard->notebook), 
1914                                           GTK_WIDGET(cur->data), NULL);
1915         }
1916         
1917         g_signal_connect(G_OBJECT(wizard->window), "delete_event",
1918                          G_CALLBACK(wizard_close_cb), wizard);
1919         gtk_widget_show_all (wizard->window);
1920
1921         gtk_widget_hide(wizard->recv_imap_label);
1922         gtk_widget_hide(wizard->recv_imap_subdir);
1923         gtk_widget_hide(wizard->subsonly_checkbtn);
1924
1925         wizard_protocol_change(wizard, tmpl.recvtype);
1926
1927         while (!wizard->finished)
1928                 gtk_main_iteration();
1929
1930         result = wizard->result;
1931         
1932         GTK_EVENTS_FLUSH();
1933
1934         gtk_widget_show(mainwin->window);
1935         g_free(wizard);
1936
1937         return result;
1938 }