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
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.
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.
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/>.
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>
54 #include "prefs_account.h"
55 #include "mainwindow.h"
56 #include "stock_pixmap.h"
59 #include "alertpanel.h"
60 #if (defined(USE_OPENSSL) || defined (USE_GNUTLS))
63 #include "prefs_common.h"
67 #include <libgnomevfs/gnome-vfs-volume.h>
68 #include <libgnomevfs/gnome-vfs-volume-monitor.h>
69 #include <libgnomevfs/gnome-vfs-utils.h>
80 int WELCOME_PAGE = -1;
84 int MAILBOX_PAGE = -1;
97 GtkWidget *organization;
99 GtkWidget *mailbox_name;
100 GtkWidget *mailbox_label;
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;
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;
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;
137 gboolean create_mailbox;
143 typedef struct _AccountTemplate {
152 RecvProtocol recvtype;
164 static AccountTemplate tmpl;
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},
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},
180 &tmpl.smtpuser, P_STRING, NULL, NULL, NULL},
182 &tmpl.smtppass, P_STRING, NULL, NULL, NULL},
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},
190 &tmpl.recvpass, P_STRING, NULL, NULL, NULL},
192 &tmpl.imapdir, P_STRING, NULL, NULL, NULL},
194 &tmpl.subsonly, P_BOOL, NULL, NULL, NULL},
195 {"mboxfile", "/var/mail/$LOGIN",
196 &tmpl.mboxfile, P_STRING, NULL, NULL, NULL},
198 &tmpl.mailbox, P_STRING, NULL, NULL, NULL},
200 &tmpl.smtpssl, P_INT, NULL, NULL, NULL},
202 &tmpl.recvssl, P_INT, NULL, NULL, NULL},
203 {NULL, NULL, NULL, P_INT, NULL, NULL, NULL}
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"
214 "#you can use $USERNAME for name (this is the default)\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"
220 "#the default is $NAME_MAIL@$DOMAIN\n"
223 "#you can use $DOMAIN here\n"
224 "#the default organization is empty\n"
227 "#you can use $DOMAIN here \n"
228 "#the default is stmp.$DOMAIN\n"
231 "#Whether to use smtp authentication\n"
232 "#the default is 0 (no)\n"
236 "#you can use $LOGIN, $NAME_MAIL, $DOMAIN or $EMAIL here\n"
237 "#the default is empty (same as reception username)\n"
241 "#the default is empty (same as reception password)\n"
244 "#recvtype can be:\n"
247 "#5 for a local mbox file\n"
250 "#you can use $DOMAIN here \n"
251 "#the default is {pop,imap}.$DOMAIN\n"
254 "#you can use $LOGIN, $NAME_MAIL, $DOMAIN or $EMAIL here\n"
255 "#default is $LOGIN\n"
258 "#default is empty\n"
261 "#imap dir if imap (relative to the home on the server)\n"
262 "#default is empty\n"
265 "#show subscribed folders only, if imap\n"
269 "#mbox file if local\n"
270 "#you can use $LOGIN here\n"
271 "#default is /var/mail/$LOGIN\n"
274 "#mailbox name if pop3 or local\n"
275 "#relative path from the user's home\n"
276 "#default is \"Mail\"\n"
279 "#whether to use ssl on STMP connections\n"
280 "#default is 0, 1 is ssl, 2 is starttls\n"
283 "#whether to use ssl on pop or imap connections\n"
284 "#default is 0, 1 is ssl, 2 is starttls\n"
287 static gchar *wizard_get_default_domain_name(void)
289 static gchar *domain_name = NULL;
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);
303 static gchar *get_name_for_mail(void)
305 gchar *name = g_strdup(tmpl.name);
309 while(strstr(name, " "))
310 *strstr(name, " ")='.';
315 #define PARSE_DEFAULT(str) { \
316 gchar *tmp = NULL, *new = 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"), \
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"), \
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"), \
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"), \
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"), \
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"), \
387 static void wizard_read_defaults(void)
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);
396 prefs_read_config(template_params, "AccountTemplate", rcpath, NULL);
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);
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);
421 static void initialize_fonts(WizardWindow *wizard)
423 GtkWidget *widget = wizard->email;
424 gint size = pango_font_description_get_size(
425 widget->style->font_desc)
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;
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;
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;
456 tmp = g_strdup(prefs_common.boldfont);
457 if (strrchr(tmp, ' ')) {
458 *(strrchr(tmp, ' ')) = '\0';
459 new = g_strdup_printf("%s %d", tmp, size);
460 g_free(prefs_common.boldfont);
461 prefs_common.boldfont = new;
466 #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"
467 #define FACE "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAM1BMVEUAAAAcJCI\n\
468 ONl1JUi0+Z4daY2NZciPabV9ykS5kj6Wsl2ybmZOBsMjZxK2wzN3Pzczs7OsCAGN0AAAAAXRSTlM\n\
469 AQObYZgAAAAFiS0dEAIgFHUgAAAIVSURBVEjH1ZbtlqMgDIaFECoGhPu/2s0b0Lais/NzN6d1OJ7\n\
470 3yReQzrL8B5Zy3rvl9At52Pf2tv1vSMjtYj8jaa8XUyI/yn3YD6sigj/2Tf5Bn069MIsTPHvx/t5\n\
471 /3rU/6JCIY3YwGe26r/cwUfE3cFe5T28L0K5rJAUHEeYAQxs8DHojjk3M9wECU4xxjXisI8RA0gy\n\
472 oczJZJOjxiTFZVTchAnIRJrgdmEGDyFfAI3UuG5FmYTkR9RDrIC4H0SqV4pzpEcUp0HNLjwBv+jA\n\
473 dikUE5g9iBvzmu3sH2oDk4lnHd829+2Q9gj6kDqDPg7hsGwBzH02fE3ZCt6ZHmlNKIMjMeRwra5I\n\
474 ecgNoBnLGPmzaHPJIwLY8Sq2M/tLUJfj0QcqmfVXAdLSStIYF8dzWjBBb2VgvDa4mO9oc651OiUo\n\
475 BEKbZokdPATF9E9oKAjQJcJOniaPXrVZRAnVWaqIyqRoNC8ZJvgCcW8XN39RqxVP1rS8Yd4WnCdN\n\
476 aRTo2jJRDbg3vtCpEUGffgDPhqKDaSuVqYtOplFIvIcx3HUI5/MuIWl6vKyBjNlqEru8hbFXqBPA\n\
477 5TpHGIUZOePeaIyzfQ/g9Xg0opU1AvdfXM9floYhv92pPAE96OZtkPV8eivgQi9RTfwPUU36I26n\n\
478 Hy+WuCJzAT7efMSeA1TNf2/VugDz+dN139xfA5ffxGZDD+MvcP/uvyB80wzZ76wbz8gAAAABJRU5\n\
481 static void write_welcome_email(WizardWindow *wizard)
487 const gchar *mailbox = gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name));
488 Folder *folder = folder_find_from_path(mailbox);
489 FolderItem *inbox = folder ? folder->inbox:NULL;
490 gchar *file = get_tmp_file();
491 gchar enc_from_name[BUFFSIZE], enc_to_name[BUFFSIZE], enc_subject[BUFFSIZE];
493 get_rfc822_date(buf_date, sizeof(buf_date));
495 conv_encode_header_full(enc_subject, sizeof(enc_subject),
496 Q_("Welcome Mail Subject|Welcome to Claws Mail"),
497 strlen("Subject: "), FALSE, CS_INTERNAL);
498 conv_encode_header_full(enc_to_name, sizeof(enc_to_name),
499 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)),
500 strlen("To: "), TRUE, CS_INTERNAL);
501 conv_encode_header_full(enc_from_name, sizeof(enc_from_name),
502 _("The Claws Mail Team"),
503 strlen("From: "), TRUE, CS_INTERNAL);
505 head = g_strdup_printf(
512 "Content-Type: text/plain; charset=UTF-8\n",
516 gtk_entry_get_text(GTK_ENTRY(wizard->email)),
517 buf_date, enc_subject, XFACE, FACE);
518 body = g_strdup_printf(
520 "Welcome to Claws Mail\n"
521 "---------------------\n"
523 "Now that you have set up your account you can fetch your\n"
524 "mail by clicking the 'Get Mail' button at the left of the\n"
527 "Claws Mail has lots of extra features accessible via plugins,\n"
528 "like anti-spam filtering and learning (via the Bogofilter or\n"
529 "SpamAssassin plugins), privacy protection (via PGP/Mime), an RSS\n"
530 "aggregator, a calendar, and much more. You can load them from\n"
531 "the menu entry '/Configuration/Plugins'.\n"
533 "You can change your Account Preferences by using the menu\n"
534 "entry '/Configuration/Preferences for current account'\n"
535 "and change the general Preferences by using\n"
536 "'/Configuration/Preferences'.\n"
538 "You can find further information in the Claws Mail manual,\n"
539 "which can be accessed by using the menu entry '/Help/Manual'\n"
540 "or online at the URL given below.\n"
548 "Mailing Lists: <%s>\n"
552 "Claws Mail is free software, released under the terms\n"
553 "of the GNU General Public License, version 3 or later, as\n"
554 "published by the Free Software Foundation, 51 Franklin Street,\n"
555 "Fifth Floor, Boston, MA 02110-1301, USA. The license can be\n"
560 "If you wish to donate to the Claws Mail project you can do\n"
562 HOMEPAGE_URI, MANUAL_URI, FAQ_URI, THEMES_URI, MAILING_LIST_URI,
563 GPL_URI, DONATE_URI);
565 msg = g_strconcat(head, body, NULL);
567 if (inbox && inbox->total_msgs == 0
568 && str_write_to_file(msg, file) >= 0) {
569 MsgFlags flags = { MSG_UNREAD|MSG_NEW, 0};
570 folder_item_add_msg(inbox, file, &flags, FALSE);
579 static gboolean wizard_write_config(WizardWindow *wizard)
581 static gboolean mailbox_ok = FALSE;
582 PrefsAccount *prefs_account = prefs_account_new();
583 GList *account_list = NULL;
584 gchar *smtp_server, *recv_server;
585 gint smtp_port, recv_port;
586 #if (defined(USE_OPENSSL) || defined (USE_GNUTLS))
587 SSLType smtp_ssl_type, recv_ssl_type;
590 prefs_account->protocol = combobox_get_active_data(
591 GTK_COMBO_BOX(wizard->recv_type));
593 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4 &&
594 !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)))) {
595 alertpanel_error(_("Please enter the mailbox name."));
596 g_free(prefs_account);
597 gtk_notebook_set_current_page (
598 GTK_NOTEBOOK(wizard->notebook),
604 if (wizard->create_mailbox) {
605 g_free(prefs_common.data_root);
606 if (gtk_toggle_button_get_active(
607 GTK_TOGGLE_BUTTON(wizard->data_root_nokia_radiobtn)))
608 prefs_common.data_root = NULL;
609 else if (gtk_toggle_button_get_active(
610 GTK_TOGGLE_BUTTON(wizard->data_root_mmc1_radiobtn)))
611 prefs_common.data_root = g_strdup(MMC1_PATH);
612 else if (gtk_toggle_button_get_active(
613 GTK_TOGGLE_BUTTON(wizard->data_root_mmc2_radiobtn)))
614 prefs_common.data_root = g_strdup(MMC2_PATH);
619 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
620 mailbox_ok = setup_write_mailbox_path(wizard->mainwin,
622 GTK_ENTRY(wizard->mailbox_name)));
628 /* alertpanel done by setup_write_mailbox_path */
629 g_free(prefs_account);
630 gtk_notebook_set_current_page (
631 GTK_NOTEBOOK(wizard->notebook),
636 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->full_name)))
637 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->email)))) {
638 alertpanel_error(_("Please enter your name and email address."));
639 g_free(prefs_account);
640 gtk_notebook_set_current_page (
641 GTK_NOTEBOOK(wizard->notebook),
646 if (prefs_account->protocol != A_LOCAL) {
647 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)))
648 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
649 alertpanel_error(_("Please enter your receiving server "
651 g_free(prefs_account);
652 gtk_notebook_set_current_page (
653 GTK_NOTEBOOK(wizard->notebook),
658 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
659 alertpanel_error(_("Please enter your username."));
660 g_free(prefs_account);
661 gtk_notebook_set_current_page (
662 GTK_NOTEBOOK(wizard->notebook),
668 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)))) {
669 alertpanel_error(_("Please enter your SMTP server."));
670 g_free(prefs_account);
671 gtk_notebook_set_current_page (
672 GTK_NOTEBOOK(wizard->notebook),
677 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
678 if (prefs_account->protocol == A_LOCAL
679 && !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)))) {
680 alertpanel_error(_("Please enter your SMTP username."));
681 g_free(prefs_account);
682 gtk_notebook_set_current_page (
683 GTK_NOTEBOOK(wizard->notebook),
686 } /* if it's not local we'll use the reception server */
689 if (prefs_account->protocol != A_LOCAL)
690 prefs_account->account_name = g_strdup_printf("%s@%s",
691 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)),
692 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
694 prefs_account->account_name = g_strdup_printf("%s",
695 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
697 recv_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
698 smtp_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)));
700 if (prefs_account->protocol != A_LOCAL && strstr(recv_server, ":")) {
701 recv_port = atoi(strstr(recv_server, ":")+1);
702 *(strstr(recv_server, ":")) = '\0';
703 if (prefs_account->protocol == A_IMAP4) {
704 prefs_account->set_imapport = TRUE;
705 prefs_account->imapport = recv_port;
706 } else if (prefs_account->protocol == A_POP3) {
707 prefs_account->set_popport = TRUE;
708 prefs_account->popport = recv_port;
711 if (strstr(smtp_server, ":")) {
712 smtp_port = atoi(strstr(smtp_server, ":")+1);
713 *(strstr(smtp_server, ":")) = '\0';
714 prefs_account->set_smtpport = TRUE;
715 prefs_account->smtpport = smtp_port;
718 prefs_account->name = g_strdup(
719 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)));
720 prefs_account->address = g_strdup(
721 gtk_entry_get_text(GTK_ENTRY(wizard->email)));
722 prefs_account->organization = g_strdup(
723 gtk_entry_get_text(GTK_ENTRY(wizard->organization)));
724 prefs_account->smtp_server = g_strdup(smtp_server);
726 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
728 tmp = g_path_get_basename(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)));
729 prefs_account->inbox = g_strdup_printf("#mh/%s/inbox",
730 (!strcmp("Mail", gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name))))
733 prefs_account->local_inbox = g_strdup(prefs_account->inbox);
734 } else if (prefs_account->protocol != A_IMAP4) {
735 if (folder_get_default_inbox())
736 prefs_account->local_inbox =
737 folder_item_get_identifier(folder_get_default_inbox());
740 if (prefs_account->protocol != A_LOCAL)
741 prefs_account->recv_server = g_strdup(recv_server);
743 prefs_account->local_mbox = g_strdup(recv_server);
748 prefs_account->userid = g_strdup(
749 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)));
750 prefs_account->passwd = g_strdup(
751 gtk_entry_get_text(GTK_ENTRY(wizard->recv_password)));
753 prefs_account->smtp_userid = g_strdup(
754 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)));
755 prefs_account->smtp_passwd = g_strdup(
756 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_password)));
757 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
758 prefs_account->use_smtp_auth = TRUE;
761 #if (defined(USE_OPENSSL) || defined (USE_GNUTLS))
762 smtp_ssl_type = SSL_NONE;
763 recv_ssl_type = SSL_NONE;
765 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl))) {
766 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls)))
767 smtp_ssl_type = SSL_STARTTLS;
769 smtp_ssl_type = SSL_TUNNEL;
771 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl))) {
772 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls)))
773 recv_ssl_type = SSL_STARTTLS;
775 recv_ssl_type = SSL_TUNNEL;
778 prefs_account->ssl_smtp = smtp_ssl_type;
780 if (prefs_account->protocol == A_IMAP4)
781 prefs_account->ssl_imap = recv_ssl_type;
783 prefs_account->ssl_pop = recv_ssl_type;
786 if (prefs_account->protocol == A_IMAP4) {
787 gchar *directory = gtk_editable_get_chars(
788 GTK_EDITABLE(wizard->recv_imap_subdir), 0, -1);
789 if (directory && strlen(directory)) {
790 prefs_account->imap_dir = g_strdup(directory);
792 prefs_account->imap_subsonly =
793 gtk_toggle_button_get_active(
794 GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn));
798 account_list = g_list_append(account_list, prefs_account);
799 prefs_account_write_config_all(account_list);
800 prefs_account_free(prefs_account);
801 account_read_config_all();
803 initialize_fonts(wizard);
804 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4)
805 write_welcome_email(wizard);
808 if (wizard->volmon_mount_sigid)
809 g_signal_handler_disconnect(
810 G_OBJECT(wizard->volmon),
811 wizard->volmon_mount_sigid);
812 if (wizard->volmon_unmount_sigid)
813 g_signal_handler_disconnect(
814 G_OBJECT(wizard->volmon),
815 wizard->volmon_unmount_sigid);
819 plugin_load_standard_plugins();
824 static GtkWidget* create_page (WizardWindow *wizard, const char * title)
832 vbox = gtk_vbox_new (FALSE, 6);
833 gtk_container_set_border_width (GTK_CONTAINER(vbox), 10);
835 /* create the titlebar */
836 hbox = gtk_hbox_new (FALSE, 12);
837 image = stock_pixmap_widget(wizard->window,
838 STOCK_PIXMAP_CLAWS_MAIL_ICON);
839 gtk_box_pack_start (GTK_BOX(hbox), image, FALSE, FALSE, 0);
840 title_string = g_strconcat ("<span size=\"xx-large\" weight=\"ultrabold\">", title ? title : "", "</span>", NULL);
841 w = gtk_label_new (title_string);
842 gtk_label_set_use_markup (GTK_LABEL(w), TRUE);
843 g_free (title_string);
844 gtk_box_pack_start (GTK_BOX(hbox), w, FALSE, FALSE, 0);
846 /* pack the titlebar */
847 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
849 /* pack the separator */
850 gtk_box_pack_start (GTK_BOX(vbox), gtk_hseparator_new(), FALSE, FALSE, 0);
853 w = gtk_alignment_new (0, 0, 0, 0);
854 gtk_widget_set_size_request (w, 0, 6);
855 gtk_box_pack_start (GTK_BOX(vbox), w, FALSE, FALSE, 0);
860 #define PACK_BOX(hbox,text,entry) { \
861 GtkWidget *label = gtk_label_new(text); \
862 gtk_label_set_use_markup(GTK_LABEL(label), TRUE); \
863 if (GTK_IS_MISC(label)) \
864 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); \
865 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); \
866 gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); \
869 static gchar *get_default_server(WizardWindow * wizard, const gchar *type)
871 if (!strcmp(type, "smtp")) {
872 if (!tmpl.smtpserver || !strlen(tmpl.smtpserver))
873 return g_strconcat(type, ".", tmpl.domain, NULL);
875 return g_strdup(tmpl.smtpserver);
877 if (!tmpl.recvserver || !strlen(tmpl.recvserver))
878 return g_strconcat(type, ".", tmpl.domain, NULL);
880 return g_strdup(tmpl.recvserver);
884 static gchar *get_default_account(WizardWindow * wizard)
886 gchar *result = NULL;
888 if (!tmpl.recvuser || !strlen(tmpl.recvuser)) {
889 result = gtk_editable_get_chars(
890 GTK_EDITABLE(wizard->email), 0, -1);
892 if (strstr(result, "@")) {
893 *(strstr(result,"@")) = '\0';
896 result = g_strdup(tmpl.recvuser);
901 static gchar *get_default_smtp_account(WizardWindow * wizard)
903 gchar *result = NULL;
905 if (!tmpl.smtpuser || !strlen(tmpl.smtpuser)) {
908 result = g_strdup(tmpl.smtpuser);
913 static void wizard_email_changed(GtkWidget *widget, gpointer data)
915 WizardWindow *wizard = (WizardWindow *)data;
916 RecvProtocol protocol;
918 protocol = combobox_get_active_data(GTK_COMBO_BOX(wizard->recv_type));
920 text = get_default_server(wizard, "smtp");
921 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
924 text = get_default_account(wizard);
925 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
928 if (protocol == A_POP3) {
929 text = get_default_server(wizard, "pop");
930 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
932 } else if (protocol == A_IMAP4) {
933 text = get_default_server(wizard, "imap");
934 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
936 } else if (protocol == A_LOCAL) {
937 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
942 static GtkWidget* user_page (WizardWindow * wizard)
944 GtkWidget *table = gtk_table_new(1,1, FALSE);
948 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
949 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
951 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
952 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
954 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
955 GTK_EXPAND|GTK_FILL, 0, 0, 0);
957 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
958 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
959 wizard->full_name = gtk_entry_new();
960 gtk_entry_set_text(GTK_ENTRY(wizard->full_name), tmpl.name?tmpl.name:"");
961 PACK_BOX(hbox, _("<span weight=\"bold\">Your name:</span>"),
964 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
965 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
966 wizard->email = gtk_entry_new();
967 gtk_entry_set_text(GTK_ENTRY(wizard->email), tmpl.email?tmpl.email:"");
968 PACK_BOX(hbox, _("<span weight=\"bold\">Your email address:</span>"),
971 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
972 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
973 wizard->organization = gtk_entry_new();
974 gtk_entry_set_text(GTK_ENTRY(wizard->organization), tmpl.organization?tmpl.organization:"");
975 PACK_BOX(hbox, _("Your organization:"), wizard->organization);
977 g_signal_connect(G_OBJECT(wizard->email), "changed",
978 G_CALLBACK(wizard_email_changed),
984 static void wizard_vol_mount_cb(GnomeVFSVolumeMonitor *vfs, GnomeVFSVolume *vol, WizardWindow *wizard)
986 gchar *uri = gnome_vfs_volume_get_activation_uri (vol);
987 gchar *mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
990 if(!strcmp(mount_path, MMC1_PATH)) {
991 gtk_widget_set_sensitive(wizard->data_root_mmc1_radiobtn, TRUE);
993 if(!strcmp(mount_path, MMC2_PATH)) {
994 gtk_widget_set_sensitive(wizard->data_root_mmc2_radiobtn, TRUE);
999 static void wizard_vol_unmount_cb(GnomeVFSVolumeMonitor *vfs, GnomeVFSVolume *vol, WizardWindow *wizard)
1001 gchar *uri = gnome_vfs_volume_get_activation_uri (vol);
1002 gchar *mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
1005 if(!strcmp(mount_path, MMC1_PATH)) {
1006 gtk_widget_set_sensitive(wizard->data_root_mmc1_radiobtn, FALSE);
1007 if (gtk_toggle_button_get_active(
1008 GTK_TOGGLE_BUTTON(wizard->data_root_mmc1_radiobtn))) {
1009 gtk_toggle_button_set_active(
1010 GTK_TOGGLE_BUTTON(wizard->data_root_nokia_radiobtn), TRUE);
1013 if(!strcmp(mount_path, MMC2_PATH)) {
1014 gtk_widget_set_sensitive(wizard->data_root_mmc2_radiobtn, FALSE);
1015 if (gtk_toggle_button_get_active(
1016 GTK_TOGGLE_BUTTON(wizard->data_root_mmc2_radiobtn))) {
1017 gtk_toggle_button_set_active(
1018 GTK_TOGGLE_BUTTON(wizard->data_root_nokia_radiobtn), TRUE);
1025 void data_root_changed (GtkToggleButton *toggle_btn,
1026 WizardWindow *wizard)
1028 gchar *name = g_path_get_basename(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)));
1030 if (gtk_toggle_button_get_active(
1031 GTK_TOGGLE_BUTTON(wizard->data_root_nokia_radiobtn)))
1032 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), name);
1033 else if (gtk_toggle_button_get_active(
1034 GTK_TOGGLE_BUTTON(wizard->data_root_mmc1_radiobtn))) {
1035 path = g_strconcat(MMC1_PATH, G_DIR_SEPARATOR_S,
1036 "Claws", G_DIR_SEPARATOR_S,
1037 g_get_user_name(), G_DIR_SEPARATOR_S,
1039 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), path);
1041 } else if (gtk_toggle_button_get_active(
1042 GTK_TOGGLE_BUTTON(wizard->data_root_mmc2_radiobtn))) {
1043 path = g_strconcat(MMC2_PATH, G_DIR_SEPARATOR_S,
1044 "Claws", G_DIR_SEPARATOR_S,
1045 g_get_user_name(), G_DIR_SEPARATOR_S,
1047 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), path);
1054 static GtkWidget* mailbox_page (WizardWindow * wizard)
1056 GtkWidget *table = gtk_table_new(1,1, FALSE);
1060 gchar *uri, *mount_path;
1063 GtkTooltips *tips = gtk_tooltips_new();
1065 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1066 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1068 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1069 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1071 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1072 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1074 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1075 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1077 wizard->mailbox_label = gtk_label_new(_("<span weight=\"bold\">Mailbox name:</span>"));
1078 gtk_label_set_use_markup(GTK_LABEL(wizard->mailbox_label), TRUE);
1079 if (GTK_IS_MISC(wizard->mailbox_label))
1080 gtk_misc_set_alignment(GTK_MISC(wizard->mailbox_label), 1, 0.5);
1081 wizard->mailbox_name = gtk_entry_new();
1083 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), tmpl.mailbox?tmpl.mailbox:"");
1085 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->mailbox_name,
1086 _("You can also specify an absolute path, for example: "
1087 "\"/home/john/Documents/Mail\""),
1090 gtk_box_pack_start(GTK_BOX(hbox), wizard->mailbox_label, FALSE, FALSE, 0);
1091 gtk_box_pack_start(GTK_BOX(hbox), wizard->mailbox_name, TRUE, TRUE, 0);
1094 wizard->data_root_nokia_radiobtn = gtk_radio_button_new_with_label(NULL,
1095 _("on internal memory"));
1096 wizard->data_root_mmc1_radiobtn = gtk_radio_button_new_with_label_from_widget(
1097 GTK_RADIO_BUTTON(wizard->data_root_nokia_radiobtn),
1098 _("on /media/mmc1"));
1099 wizard->data_root_mmc2_radiobtn = gtk_radio_button_new_with_label_from_widget(
1100 GTK_RADIO_BUTTON(wizard->data_root_nokia_radiobtn),
1101 _("on /media/mmc2"));
1103 g_signal_connect(G_OBJECT(wizard->data_root_nokia_radiobtn), "toggled",
1104 G_CALLBACK(data_root_changed), wizard);
1105 g_signal_connect(G_OBJECT(wizard->data_root_mmc1_radiobtn), "toggled",
1106 G_CALLBACK(data_root_changed), wizard);
1107 g_signal_connect(G_OBJECT(wizard->data_root_mmc2_radiobtn), "toggled",
1108 G_CALLBACK(data_root_changed), wizard);
1110 wizard->volmon = gnome_vfs_get_volume_monitor();
1111 wizard->vol_mmc1 = gnome_vfs_volume_monitor_get_volume_for_path(wizard->volmon, MMC1_PATH);
1112 wizard->vol_mmc2 = gnome_vfs_volume_monitor_get_volume_for_path(wizard->volmon, MMC2_PATH);
1114 uri = gnome_vfs_volume_get_activation_uri (wizard->vol_mmc1);
1115 mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
1117 if (wizard->vol_mmc1 == NULL || !gnome_vfs_volume_is_mounted(wizard->vol_mmc1)
1118 || strcmp(mount_path, MMC1_PATH)) {
1119 gtk_widget_set_sensitive(wizard->data_root_mmc1_radiobtn, FALSE);
1123 uri = gnome_vfs_volume_get_activation_uri (wizard->vol_mmc2);
1124 mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
1126 if (wizard->vol_mmc2 == NULL || !gnome_vfs_volume_is_mounted(wizard->vol_mmc2)
1127 || strcmp(mount_path, MMC2_PATH)) {
1128 gtk_widget_set_sensitive(wizard->data_root_mmc2_radiobtn, FALSE);
1132 gnome_vfs_volume_unref(wizard->vol_mmc1);
1133 gnome_vfs_volume_unref(wizard->vol_mmc2);
1134 wizard->vol_mmc1 = NULL;
1135 wizard->vol_mmc2 = NULL;
1137 wizard->volmon_mount_sigid = g_signal_connect(G_OBJECT(wizard->volmon),
1138 "volume-mounted", G_CALLBACK(wizard_vol_mount_cb), wizard);
1139 wizard->volmon_unmount_sigid = g_signal_connect(G_OBJECT(wizard->volmon),
1140 "volume-unmounted", G_CALLBACK(wizard_vol_unmount_cb), wizard);
1142 vbox2 = gtk_vbox_new(FALSE, VSPACING_NARROW);
1143 gtk_box_pack_start (GTK_BOX(vbox2), wizard->data_root_nokia_radiobtn, FALSE, FALSE, 0);
1144 gtk_box_pack_start (GTK_BOX(vbox2), wizard->data_root_mmc1_radiobtn, FALSE, FALSE, 0);
1145 gtk_box_pack_start (GTK_BOX(vbox2), wizard->data_root_mmc2_radiobtn, FALSE, FALSE, 0);
1147 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1148 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1149 PACK_BOX(hbox, _("<span weight=\"bold\">Store data</span>"),
1156 static void smtp_auth_changed (GtkWidget *btn, gpointer data)
1158 WizardWindow *wizard = (WizardWindow *)data;
1159 gboolean do_auth = gtk_toggle_button_get_active(
1160 GTK_TOGGLE_BUTTON(wizard->smtp_auth));
1161 gtk_widget_set_sensitive(wizard->smtp_username, do_auth);
1162 gtk_widget_set_sensitive(wizard->smtp_username_label, do_auth);
1163 gtk_widget_set_sensitive(wizard->smtp_password, do_auth);
1164 gtk_widget_set_sensitive(wizard->smtp_password_label, do_auth);
1167 static GtkWidget* smtp_page (WizardWindow * wizard)
1169 GtkWidget *table = gtk_table_new(1, 1, FALSE);
1172 GtkTooltips *tips = gtk_tooltips_new();
1175 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1176 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1178 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1179 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1181 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1182 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1184 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1185 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1186 wizard->smtp_server = gtk_entry_new();
1187 text = get_default_server(wizard, "smtp");
1188 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
1191 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->smtp_server,
1192 _("You can specify the port number by appending it at the end: "
1193 "\"mail.example.com:25\""),
1196 PACK_BOX(hbox, _("<span weight=\"bold\">SMTP server address:</span>"),
1197 wizard->smtp_server);
1200 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1201 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1202 wizard->smtp_auth = gtk_check_button_new_with_label(
1203 _("Use authentication"));
1204 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth),
1206 g_signal_connect(G_OBJECT(wizard->smtp_auth), "toggled",
1207 G_CALLBACK(smtp_auth_changed),
1209 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_auth, FALSE, FALSE, 0);
1211 text = get_default_smtp_account(wizard);
1213 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1214 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1215 wizard->smtp_username = gtk_entry_new();
1216 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_username), text);
1218 wizard->smtp_username_label = gtk_label_new(_("SMTP username:\n"
1219 "<span size=\"small\">(empty to use the same as receive)</span>"));
1220 gtk_label_set_use_markup(GTK_LABEL(wizard->smtp_username_label), TRUE);
1221 if (GTK_IS_MISC(wizard->smtp_username_label))
1222 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_username_label), 1, 0.5);
1223 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_username_label, FALSE, FALSE, 0);
1224 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_username, TRUE, TRUE, 0);
1226 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1227 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1228 wizard->smtp_password = gtk_entry_new();
1229 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_password), tmpl.smtppass?tmpl.smtppass:"");
1230 gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_password), FALSE);
1231 wizard->smtp_password_label = gtk_label_new(_("SMTP password:\n"
1232 "<span size=\"small\">(empty to use the same as receive)</span>"));
1233 gtk_label_set_use_markup(GTK_LABEL(wizard->smtp_password_label), TRUE);
1234 if (GTK_IS_MISC(wizard->smtp_password_label))
1235 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_password_label), 1, 0.5);
1236 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_password_label, FALSE, FALSE, 0);
1237 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_password, TRUE, TRUE, 0);
1238 #if (defined(USE_OPENSSL) || defined (USE_GNUTLS))
1239 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1240 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1241 wizard->smtp_use_ssl = gtk_check_button_new_with_label(
1242 _("Use SSL to connect to SMTP server"));
1243 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl),
1245 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_ssl, FALSE, FALSE, 0);
1247 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1248 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1249 wizard->smtp_use_tls = gtk_check_button_new_with_label(
1250 _("Use SSL via STARTTLS"));
1251 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls),
1253 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_tls, FALSE, FALSE, 0);
1254 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, wizard->smtp_use_tls);
1256 smtp_auth_changed(NULL, wizard);
1260 static void wizard_protocol_change(WizardWindow *wizard, RecvProtocol protocol)
1264 if (protocol == A_POP3) {
1265 text = get_default_server(wizard, "pop");
1266 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1267 gtk_widget_hide(wizard->recv_imap_label);
1268 gtk_widget_hide(wizard->recv_imap_subdir);
1269 gtk_widget_hide(wizard->subsonly_checkbtn);
1270 gtk_widget_show(wizard->recv_username);
1271 gtk_widget_show(wizard->recv_password);
1272 gtk_widget_show(wizard->recv_username_label);
1273 gtk_widget_show(wizard->recv_password_label);
1274 gtk_widget_hide(wizard->no_imap_warning);
1275 #if (defined(USE_OPENSSL) || defined (USE_GNUTLS))
1276 gtk_widget_show(wizard->recv_use_ssl);
1277 gtk_widget_show(wizard->recv_use_tls);
1279 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1280 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1281 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1283 if (wizard->create_mailbox) {
1284 gtk_widget_show(wizard->mailbox_label);
1285 gtk_widget_show(wizard->mailbox_name);
1287 } else if (protocol == A_IMAP4) {
1288 #ifdef HAVE_LIBETPAN
1289 text = get_default_server(wizard, "imap");
1290 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1291 gtk_widget_show(wizard->recv_imap_label);
1292 gtk_widget_show(wizard->recv_imap_subdir);
1293 gtk_widget_show(wizard->subsonly_checkbtn);
1294 gtk_widget_show(wizard->recv_username);
1295 gtk_widget_show(wizard->recv_password);
1296 gtk_widget_show(wizard->recv_username_label);
1297 gtk_widget_show(wizard->recv_password_label);
1298 gtk_widget_hide(wizard->no_imap_warning);
1299 #if (defined(USE_OPENSSL) || defined (USE_GNUTLS))
1300 gtk_widget_show(wizard->recv_use_ssl);
1301 gtk_widget_show(wizard->recv_use_tls);
1303 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1304 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1305 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1307 if (wizard->create_mailbox) {
1308 gtk_widget_hide(wizard->mailbox_label);
1309 gtk_widget_hide(wizard->mailbox_name);
1312 gtk_widget_hide(wizard->recv_imap_label);
1313 gtk_widget_hide(wizard->recv_imap_subdir);
1314 gtk_widget_hide(wizard->subsonly_checkbtn);
1315 gtk_widget_hide(wizard->recv_username);
1316 gtk_widget_hide(wizard->recv_password);
1317 gtk_widget_hide(wizard->recv_username_label);
1318 gtk_widget_hide(wizard->recv_password_label);
1319 gtk_widget_show(wizard->no_imap_warning);
1320 if (wizard->create_mailbox) {
1321 gtk_widget_hide(wizard->mailbox_label);
1322 gtk_widget_hide(wizard->mailbox_name);
1324 #if (defined(USE_OPENSSL) || defined (USE_GNUTLS))
1325 gtk_widget_hide(wizard->recv_use_ssl);
1326 gtk_widget_hide(wizard->recv_use_tls);
1328 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, FALSE);
1330 } else if (protocol == A_LOCAL) {
1331 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
1332 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Local mailbox:</span>"));
1333 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1334 gtk_widget_hide(wizard->no_imap_warning);
1335 gtk_widget_hide(wizard->recv_imap_label);
1336 gtk_widget_hide(wizard->recv_imap_subdir);
1337 gtk_widget_hide(wizard->subsonly_checkbtn);
1338 gtk_widget_hide(wizard->recv_username);
1339 gtk_widget_hide(wizard->recv_password);
1340 gtk_widget_hide(wizard->recv_username_label);
1341 gtk_widget_hide(wizard->recv_password_label);
1342 #if (defined(USE_OPENSSL) || defined (USE_GNUTLS))
1343 gtk_widget_hide(wizard->recv_use_ssl);
1344 gtk_widget_hide(wizard->recv_use_tls);
1346 if (wizard->create_mailbox) {
1347 gtk_widget_show(wizard->mailbox_label);
1348 gtk_widget_show(wizard->mailbox_name);
1350 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1354 static void wizard_protocol_changed(GtkComboBox *combo, gpointer data)
1356 WizardWindow *wizard = (WizardWindow *)data;
1357 RecvProtocol protocol = combobox_get_active_data(combo);
1359 wizard_protocol_change(wizard, protocol);
1362 static GtkWidget* recv_page (WizardWindow * wizard)
1364 GtkWidget *table = gtk_table_new(1,1, FALSE);
1365 GtkTooltips *tips = gtk_tooltips_new();
1368 GtkListStore *store;
1373 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1374 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1376 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1377 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1379 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1380 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1382 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1383 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1384 wizard->recv_type = gtkut_sc_combobox_create(NULL, FALSE);
1385 store = GTK_LIST_STORE(gtk_combo_box_get_model(
1386 GTK_COMBO_BOX(wizard->recv_type)));
1388 COMBOBOX_ADD(store, _("POP3"), A_POP3);
1389 COMBOBOX_ADD(store, _("IMAP"), A_IMAP4);
1390 COMBOBOX_ADD(store, _("Local mbox file"), A_LOCAL);
1392 switch(tmpl.recvtype) {
1405 gtk_combo_box_set_active(GTK_COMBO_BOX (wizard->recv_type), index);
1406 g_signal_connect(G_OBJECT(wizard->recv_type), "changed",
1407 G_CALLBACK(wizard_protocol_changed),
1409 PACK_BOX(hbox, _("<span weight=\"bold\">Server type:</span>"),
1412 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1413 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1414 wizard->recv_server = gtk_entry_new();
1415 text = get_default_server(wizard, "pop");
1416 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1419 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->recv_server,
1420 _("You can specify the port number by appending it at the end: "
1421 "\"mail.example.com:110\""),
1424 wizard->recv_label = gtk_label_new(_("<span weight=\"bold\">Server address:</span>"));
1425 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1426 if (GTK_IS_MISC(wizard->recv_label))
1427 gtk_misc_set_alignment(GTK_MISC(wizard->recv_label), 1, 0.5);
1428 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_label, FALSE, FALSE, 0);
1429 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_server, TRUE, TRUE, 0);
1431 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1432 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1433 wizard->recv_username = gtk_entry_new();
1434 wizard->recv_username_label = gtk_label_new(_("<span weight=\"bold\">Username:</span>"));
1435 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_username_label), TRUE);
1436 if (GTK_IS_MISC(wizard->recv_username_label))
1437 gtk_misc_set_alignment(GTK_MISC(wizard->recv_username_label), 1, 0.5);
1438 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_username_label, FALSE, FALSE, 0);
1439 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_username, TRUE, TRUE, 0);
1441 text = get_default_account(wizard);
1442 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
1445 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1446 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1447 wizard->recv_password = gtk_entry_new();
1448 gtk_entry_set_text(GTK_ENTRY(wizard->recv_password), tmpl.recvpass?tmpl.recvpass:"");
1449 wizard->recv_password_label = gtk_label_new(_("Password:"));
1450 if (GTK_IS_MISC(wizard->recv_password_label))
1451 gtk_misc_set_alignment(GTK_MISC(wizard->recv_password_label), 1, 0.5);
1452 gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_password), FALSE);
1453 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_password_label, FALSE, FALSE, 0);
1454 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_password, TRUE, TRUE, 0);
1456 #if (defined(USE_OPENSSL) || defined (USE_GNUTLS))
1457 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1458 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1459 wizard->recv_use_ssl = gtk_check_button_new_with_label(
1460 _("Use SSL to connect to receiving server"));
1461 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl),
1463 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_ssl, FALSE, FALSE, 0);
1465 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1466 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1467 wizard->recv_use_tls = gtk_check_button_new_with_label(
1468 _("Use SSL via STARTTLS"));
1469 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls),
1471 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_tls, FALSE, FALSE, 0);
1472 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, wizard->recv_use_tls);
1474 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1475 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1476 wizard->recv_imap_subdir = gtk_entry_new();
1477 gtk_entry_set_text(GTK_ENTRY(wizard->recv_imap_subdir), tmpl.imapdir?tmpl.imapdir:"");
1478 wizard->recv_imap_label = gtk_label_new(_("IMAP server directory:"));
1479 if (GTK_IS_MISC(wizard->recv_imap_label))
1480 gtk_misc_set_alignment(GTK_MISC(wizard->recv_imap_label), 1, 0.5);
1481 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_label, FALSE, FALSE, 0);
1482 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_subdir, TRUE, TRUE, 0);
1484 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1485 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1486 wizard->subsonly_checkbtn = gtk_check_button_new_with_label(
1487 _("Show only subscribed folders"));
1488 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn),
1490 gtk_box_pack_start(GTK_BOX(hbox), wizard->subsonly_checkbtn, FALSE, FALSE, 0);
1492 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1493 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1494 wizard->no_imap_warning = gtk_label_new(_(
1495 "<span weight=\"bold\">Warning: this version of Claws Mail\n"
1496 "has been built without IMAP support.</span>"));
1497 gtk_label_set_use_markup(GTK_LABEL(wizard->no_imap_warning), TRUE);
1498 gtk_box_pack_start(GTK_BOX(hbox), wizard->no_imap_warning, FALSE, FALSE, 0);
1504 wizard_response_cb (GtkDialog * dialog, int response, gpointer data)
1506 WizardWindow * wizard = (WizardWindow *)data;
1507 int current_page, num_pages;
1508 gboolean skip_mailbox_page = FALSE;
1510 gint protocol = combobox_get_active_data(GTK_COMBO_BOX(wizard->recv_type));
1512 if (protocol == A_IMAP4) {
1513 skip_mailbox_page = TRUE;
1517 num_pages = g_slist_length(wizard->pages);
1519 current_page = gtk_notebook_get_current_page (
1520 GTK_NOTEBOOK(wizard->notebook));
1521 if (response == CANCEL)
1523 wizard->result = FALSE;
1524 wizard->finished = TRUE;
1525 gtk_widget_destroy (GTK_WIDGET(dialog));
1527 else if (response == FINISHED)
1529 if (!wizard_write_config(wizard)) {
1530 current_page = gtk_notebook_get_current_page (
1531 GTK_NOTEBOOK(wizard->notebook));
1534 wizard->result = TRUE;
1535 wizard->finished = TRUE;
1536 gtk_widget_destroy (GTK_WIDGET(dialog));
1540 if (response == GO_BACK)
1542 if (current_page > 0) {
1544 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1548 gtk_notebook_set_current_page (
1549 GTK_NOTEBOOK(wizard->notebook),
1553 else if (response == GO_FORWARD)
1555 if (current_page < (num_pages-1)) {
1557 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1561 gtk_notebook_set_current_page (
1562 GTK_NOTEBOOK(wizard->notebook),
1567 gtk_dialog_set_response_sensitive (dialog, GO_BACK,
1569 gtk_dialog_set_response_sensitive (dialog, GO_FORWARD,
1570 current_page < (num_pages - 1));
1571 if (current_page == (num_pages -1)) {
1572 gtk_dialog_set_response_sensitive (dialog, FINISHED, TRUE);
1573 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), FINISHED);
1575 gtk_dialog_set_response_sensitive (dialog, FINISHED, FALSE);
1576 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), GO_FORWARD);
1582 static gint wizard_close_cb(GtkWidget *widget, GdkEventAny *event,
1585 WizardWindow *wizard = (WizardWindow *)data;
1586 wizard->result = FALSE;
1587 wizard->finished = TRUE;
1592 #define PACK_WARNING(text) { \
1593 label = gtk_label_new(text); \
1594 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); \
1595 gtk_box_pack_end(GTK_BOX(widget), label, FALSE, FALSE, 0); \
1598 gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) {
1599 WizardWindow *wizard = g_new0(WizardWindow, 1);
1603 GtkWidget *scrolled_window;
1608 wizard->mainwin = mainwin;
1609 wizard->create_mailbox = create_mailbox;
1611 gtk_widget_hide(mainwin->window);
1613 wizard_read_defaults();
1615 wizard->window = gtk_dialog_new_with_buttons (_("Claws Mail Setup Wizard"),
1617 GTK_STOCK_GO_BACK, GO_BACK,
1618 GTK_STOCK_GO_FORWARD, GO_FORWARD,
1619 GTK_STOCK_SAVE, FINISHED,
1620 GTK_STOCK_CANCEL, CANCEL,
1623 g_signal_connect(wizard->window, "response",
1624 G_CALLBACK(wizard_response_cb), wizard);
1625 gtk_widget_realize(wizard->window);
1626 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window),
1628 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1630 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1632 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1634 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1637 wizard->notebook = gtk_notebook_new();
1638 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(wizard->notebook), FALSE);
1639 gtk_notebook_set_show_border(GTK_NOTEBOOK(wizard->notebook), FALSE);
1640 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(wizard->window)->vbox),
1641 wizard->notebook, TRUE, TRUE, 0);
1643 wizard->pages = NULL;
1645 /*welcome page: 0 */
1647 page = create_page(wizard, _("Welcome to Claws Mail"));
1649 wizard->pages = g_slist_append(wizard->pages, page);
1650 widget = stock_pixmap_widget(wizard->window,
1651 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1653 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1655 text = g_strdup(_("Welcome to the Claws Mail setup wizard.\n\n"
1656 "We will begin by defining some basic "
1657 "information about you and your most common "
1658 "mail options so that you can start to use "
1659 "Claws Mail in less than five minutes."));
1660 widget = gtk_label_new(text);
1661 gtk_label_set_line_wrap(GTK_LABEL(widget), TRUE);
1663 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1665 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1666 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1667 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1668 gtk_box_pack_start(GTK_BOX(page), scrolled_window, TRUE, TRUE, 0);
1670 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1678 widget = create_page (wizard, _("About You"));
1679 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1680 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1681 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1682 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1684 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1686 PACK_WARNING(_("Bold fields must be completed"));
1688 wizard->pages = g_slist_append(wizard->pages, widget);
1690 /* recv+auth page: 2 */
1693 widget = create_page (wizard, _("Receiving mail"));
1694 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1695 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1696 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1697 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1699 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1701 PACK_WARNING(_("Bold fields must be completed"));
1703 wizard->pages = g_slist_append(wizard->pages, widget);
1708 widget = create_page (wizard, _("Sending mail"));
1709 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1710 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1711 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1712 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1714 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1716 PACK_WARNING(_("Bold fields must be completed"));
1718 wizard->pages = g_slist_append(wizard->pages, widget);
1720 /* mailbox page: 4 */
1721 if (create_mailbox) {
1724 widget = create_page (wizard, _("Saving mail on disk"));
1725 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1726 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1727 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1728 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1730 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1731 mailbox_page(wizard));
1732 PACK_WARNING(_("Bold fields must be completed"));
1734 wizard->pages = g_slist_append(wizard->pages, widget);
1740 page = create_page(wizard, _("Configuration finished"));
1742 wizard->pages = g_slist_append(wizard->pages, page);
1743 widget = stock_pixmap_widget(wizard->window,
1744 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1746 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1748 text = g_strdup(_("Claws Mail is now ready.\n"
1749 "Click Save to start."));
1750 widget = gtk_label_new(text);
1751 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1755 for (cur = wizard->pages; cur && cur->data; cur = cur->next) {
1756 gtk_notebook_append_page (GTK_NOTEBOOK(wizard->notebook),
1757 GTK_WIDGET(cur->data), NULL);
1760 g_signal_connect(G_OBJECT(wizard->window), "delete_event",
1761 G_CALLBACK(wizard_close_cb), wizard);
1762 gtk_widget_show_all (wizard->window);
1764 gtk_widget_hide(wizard->recv_imap_label);
1765 gtk_widget_hide(wizard->recv_imap_subdir);
1766 gtk_widget_hide(wizard->subsonly_checkbtn);
1768 wizard_protocol_change(wizard, tmpl.recvtype);
1770 while (!wizard->finished)
1771 gtk_main_iteration();
1773 result = wizard->result;
1777 gtk_widget_show(mainwin->window);