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