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