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 external memory card"));
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 internal memory card"));
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);
1130 gtk_toggle_button_set_active(wizard->data_root_mmc2_radiobtn, TRUE);
1134 gnome_vfs_volume_unref(wizard->vol_mmc1);
1135 gnome_vfs_volume_unref(wizard->vol_mmc2);
1136 wizard->vol_mmc1 = NULL;
1137 wizard->vol_mmc2 = NULL;
1139 wizard->volmon_mount_sigid = g_signal_connect(G_OBJECT(wizard->volmon),
1140 "volume-mounted", G_CALLBACK(wizard_vol_mount_cb), wizard);
1141 wizard->volmon_unmount_sigid = g_signal_connect(G_OBJECT(wizard->volmon),
1142 "volume-unmounted", G_CALLBACK(wizard_vol_unmount_cb), wizard);
1144 vbox2 = gtk_vbox_new(FALSE, VSPACING_NARROW);
1145 gtk_box_pack_start (GTK_BOX(vbox2), wizard->data_root_nokia_radiobtn, FALSE, FALSE, 0);
1146 gtk_box_pack_start (GTK_BOX(vbox2), wizard->data_root_mmc1_radiobtn, FALSE, FALSE, 0);
1147 gtk_box_pack_start (GTK_BOX(vbox2), wizard->data_root_mmc2_radiobtn, FALSE, FALSE, 0);
1149 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1150 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1151 PACK_BOX(hbox, _("<span weight=\"bold\">Store data</span>"),
1158 static void smtp_auth_changed (GtkWidget *btn, gpointer data)
1160 WizardWindow *wizard = (WizardWindow *)data;
1161 gboolean do_auth = gtk_toggle_button_get_active(
1162 GTK_TOGGLE_BUTTON(wizard->smtp_auth));
1163 gtk_widget_set_sensitive(wizard->smtp_username, do_auth);
1164 gtk_widget_set_sensitive(wizard->smtp_username_label, do_auth);
1165 gtk_widget_set_sensitive(wizard->smtp_password, do_auth);
1166 gtk_widget_set_sensitive(wizard->smtp_password_label, do_auth);
1169 static GtkWidget* smtp_page (WizardWindow * wizard)
1171 GtkWidget *table = gtk_table_new(1, 1, FALSE);
1174 GtkTooltips *tips = gtk_tooltips_new();
1177 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1178 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1180 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1181 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1183 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1184 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1186 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1187 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1188 wizard->smtp_server = gtk_entry_new();
1189 text = get_default_server(wizard, "smtp");
1190 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
1193 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->smtp_server,
1194 _("You can specify the port number by appending it at the end: "
1195 "\"mail.example.com:25\""),
1198 PACK_BOX(hbox, _("<span weight=\"bold\">SMTP server address:</span>"),
1199 wizard->smtp_server);
1202 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1203 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1204 wizard->smtp_auth = gtk_check_button_new_with_label(
1205 _("Use authentication"));
1206 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth),
1208 g_signal_connect(G_OBJECT(wizard->smtp_auth), "toggled",
1209 G_CALLBACK(smtp_auth_changed),
1211 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_auth, FALSE, FALSE, 0);
1213 text = get_default_smtp_account(wizard);
1215 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1216 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1217 wizard->smtp_username = gtk_entry_new();
1218 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_username), text);
1220 wizard->smtp_username_label = gtk_label_new(_("SMTP username:\n"
1221 "<span size=\"small\">(empty to use the same as receive)</span>"));
1222 gtk_label_set_use_markup(GTK_LABEL(wizard->smtp_username_label), TRUE);
1223 if (GTK_IS_MISC(wizard->smtp_username_label))
1224 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_username_label), 1, 0.5);
1225 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_username_label, FALSE, FALSE, 0);
1226 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_username, TRUE, TRUE, 0);
1228 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1229 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1230 wizard->smtp_password = gtk_entry_new();
1231 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_password), tmpl.smtppass?tmpl.smtppass:"");
1232 gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_password), FALSE);
1233 wizard->smtp_password_label = gtk_label_new(_("SMTP password:\n"
1234 "<span size=\"small\">(empty to use the same as receive)</span>"));
1235 gtk_label_set_use_markup(GTK_LABEL(wizard->smtp_password_label), TRUE);
1236 if (GTK_IS_MISC(wizard->smtp_password_label))
1237 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_password_label), 1, 0.5);
1238 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_password_label, FALSE, FALSE, 0);
1239 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_password, TRUE, TRUE, 0);
1240 #if (defined(USE_OPENSSL) || defined (USE_GNUTLS))
1241 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1242 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1243 wizard->smtp_use_ssl = gtk_check_button_new_with_label(
1244 _("Use SSL to connect to SMTP server"));
1245 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl),
1247 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_ssl, FALSE, FALSE, 0);
1249 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1250 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1251 wizard->smtp_use_tls = gtk_check_button_new_with_label(
1252 _("Use SSL via STARTTLS"));
1253 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls),
1255 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_tls, FALSE, FALSE, 0);
1256 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, wizard->smtp_use_tls);
1258 smtp_auth_changed(NULL, wizard);
1262 static void wizard_protocol_change(WizardWindow *wizard, RecvProtocol protocol)
1266 if (protocol == A_POP3) {
1267 text = get_default_server(wizard, "pop");
1268 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1269 gtk_widget_hide(wizard->recv_imap_label);
1270 gtk_widget_hide(wizard->recv_imap_subdir);
1271 gtk_widget_hide(wizard->subsonly_checkbtn);
1272 gtk_widget_show(wizard->recv_username);
1273 gtk_widget_show(wizard->recv_password);
1274 gtk_widget_show(wizard->recv_username_label);
1275 gtk_widget_show(wizard->recv_password_label);
1276 gtk_widget_hide(wizard->no_imap_warning);
1277 #if (defined(USE_OPENSSL) || defined (USE_GNUTLS))
1278 gtk_widget_show(wizard->recv_use_ssl);
1279 gtk_widget_show(wizard->recv_use_tls);
1281 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1282 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1283 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1285 if (wizard->create_mailbox) {
1286 gtk_widget_show(wizard->mailbox_label);
1287 gtk_widget_show(wizard->mailbox_name);
1289 } else if (protocol == A_IMAP4) {
1290 #ifdef HAVE_LIBETPAN
1291 text = get_default_server(wizard, "imap");
1292 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1293 gtk_widget_show(wizard->recv_imap_label);
1294 gtk_widget_show(wizard->recv_imap_subdir);
1295 gtk_widget_show(wizard->subsonly_checkbtn);
1296 gtk_widget_show(wizard->recv_username);
1297 gtk_widget_show(wizard->recv_password);
1298 gtk_widget_show(wizard->recv_username_label);
1299 gtk_widget_show(wizard->recv_password_label);
1300 gtk_widget_hide(wizard->no_imap_warning);
1301 #if (defined(USE_OPENSSL) || defined (USE_GNUTLS))
1302 gtk_widget_show(wizard->recv_use_ssl);
1303 gtk_widget_show(wizard->recv_use_tls);
1305 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1306 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1307 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1309 if (wizard->create_mailbox) {
1310 gtk_widget_hide(wizard->mailbox_label);
1311 gtk_widget_hide(wizard->mailbox_name);
1314 gtk_widget_hide(wizard->recv_imap_label);
1315 gtk_widget_hide(wizard->recv_imap_subdir);
1316 gtk_widget_hide(wizard->subsonly_checkbtn);
1317 gtk_widget_hide(wizard->recv_username);
1318 gtk_widget_hide(wizard->recv_password);
1319 gtk_widget_hide(wizard->recv_username_label);
1320 gtk_widget_hide(wizard->recv_password_label);
1321 gtk_widget_show(wizard->no_imap_warning);
1322 if (wizard->create_mailbox) {
1323 gtk_widget_hide(wizard->mailbox_label);
1324 gtk_widget_hide(wizard->mailbox_name);
1326 #if (defined(USE_OPENSSL) || defined (USE_GNUTLS))
1327 gtk_widget_hide(wizard->recv_use_ssl);
1328 gtk_widget_hide(wizard->recv_use_tls);
1330 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, FALSE);
1332 } else if (protocol == A_LOCAL) {
1333 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
1334 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Local mailbox:</span>"));
1335 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1336 gtk_widget_hide(wizard->no_imap_warning);
1337 gtk_widget_hide(wizard->recv_imap_label);
1338 gtk_widget_hide(wizard->recv_imap_subdir);
1339 gtk_widget_hide(wizard->subsonly_checkbtn);
1340 gtk_widget_hide(wizard->recv_username);
1341 gtk_widget_hide(wizard->recv_password);
1342 gtk_widget_hide(wizard->recv_username_label);
1343 gtk_widget_hide(wizard->recv_password_label);
1344 #if (defined(USE_OPENSSL) || defined (USE_GNUTLS))
1345 gtk_widget_hide(wizard->recv_use_ssl);
1346 gtk_widget_hide(wizard->recv_use_tls);
1348 if (wizard->create_mailbox) {
1349 gtk_widget_show(wizard->mailbox_label);
1350 gtk_widget_show(wizard->mailbox_name);
1352 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1356 static void wizard_protocol_changed(GtkComboBox *combo, gpointer data)
1358 WizardWindow *wizard = (WizardWindow *)data;
1359 RecvProtocol protocol = combobox_get_active_data(combo);
1361 wizard_protocol_change(wizard, protocol);
1364 static GtkWidget* recv_page (WizardWindow * wizard)
1366 GtkWidget *table = gtk_table_new(1,1, FALSE);
1367 GtkTooltips *tips = gtk_tooltips_new();
1370 GtkListStore *store;
1375 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1376 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1378 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1379 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1381 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1382 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1384 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1385 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1386 wizard->recv_type = gtkut_sc_combobox_create(NULL, FALSE);
1387 store = GTK_LIST_STORE(gtk_combo_box_get_model(
1388 GTK_COMBO_BOX(wizard->recv_type)));
1390 COMBOBOX_ADD(store, _("POP3"), A_POP3);
1391 COMBOBOX_ADD(store, _("IMAP"), A_IMAP4);
1392 COMBOBOX_ADD(store, _("Local mbox file"), A_LOCAL);
1394 switch(tmpl.recvtype) {
1407 gtk_combo_box_set_active(GTK_COMBO_BOX (wizard->recv_type), index);
1408 g_signal_connect(G_OBJECT(wizard->recv_type), "changed",
1409 G_CALLBACK(wizard_protocol_changed),
1411 PACK_BOX(hbox, _("<span weight=\"bold\">Server type:</span>"),
1414 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1415 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1416 wizard->recv_server = gtk_entry_new();
1417 text = get_default_server(wizard, "pop");
1418 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1421 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->recv_server,
1422 _("You can specify the port number by appending it at the end: "
1423 "\"mail.example.com:110\""),
1426 wizard->recv_label = gtk_label_new(_("<span weight=\"bold\">Server address:</span>"));
1427 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1428 if (GTK_IS_MISC(wizard->recv_label))
1429 gtk_misc_set_alignment(GTK_MISC(wizard->recv_label), 1, 0.5);
1430 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_label, FALSE, FALSE, 0);
1431 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_server, TRUE, TRUE, 0);
1433 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1434 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1435 wizard->recv_username = gtk_entry_new();
1436 wizard->recv_username_label = gtk_label_new(_("<span weight=\"bold\">Username:</span>"));
1437 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_username_label), TRUE);
1438 if (GTK_IS_MISC(wizard->recv_username_label))
1439 gtk_misc_set_alignment(GTK_MISC(wizard->recv_username_label), 1, 0.5);
1440 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_username_label, FALSE, FALSE, 0);
1441 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_username, TRUE, TRUE, 0);
1443 text = get_default_account(wizard);
1444 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
1447 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1448 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1449 wizard->recv_password = gtk_entry_new();
1450 gtk_entry_set_text(GTK_ENTRY(wizard->recv_password), tmpl.recvpass?tmpl.recvpass:"");
1451 wizard->recv_password_label = gtk_label_new(_("Password:"));
1452 if (GTK_IS_MISC(wizard->recv_password_label))
1453 gtk_misc_set_alignment(GTK_MISC(wizard->recv_password_label), 1, 0.5);
1454 gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_password), FALSE);
1455 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_password_label, FALSE, FALSE, 0);
1456 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_password, TRUE, TRUE, 0);
1458 #if (defined(USE_OPENSSL) || defined (USE_GNUTLS))
1459 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1460 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1461 wizard->recv_use_ssl = gtk_check_button_new_with_label(
1462 _("Use SSL to connect to receiving server"));
1463 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl),
1465 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_ssl, FALSE, FALSE, 0);
1467 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1468 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1469 wizard->recv_use_tls = gtk_check_button_new_with_label(
1470 _("Use SSL via STARTTLS"));
1471 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls),
1473 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_tls, FALSE, FALSE, 0);
1474 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, wizard->recv_use_tls);
1476 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1477 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1478 wizard->recv_imap_subdir = gtk_entry_new();
1479 gtk_entry_set_text(GTK_ENTRY(wizard->recv_imap_subdir), tmpl.imapdir?tmpl.imapdir:"");
1480 wizard->recv_imap_label = gtk_label_new(_("IMAP server directory:"));
1481 if (GTK_IS_MISC(wizard->recv_imap_label))
1482 gtk_misc_set_alignment(GTK_MISC(wizard->recv_imap_label), 1, 0.5);
1483 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_label, FALSE, FALSE, 0);
1484 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_subdir, TRUE, TRUE, 0);
1486 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1487 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1488 wizard->subsonly_checkbtn = gtk_check_button_new_with_label(
1489 _("Show only subscribed folders"));
1490 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn),
1492 gtk_box_pack_start(GTK_BOX(hbox), wizard->subsonly_checkbtn, FALSE, FALSE, 0);
1494 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1495 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1496 wizard->no_imap_warning = gtk_label_new(_(
1497 "<span weight=\"bold\">Warning: this version of Claws Mail\n"
1498 "has been built without IMAP support.</span>"));
1499 gtk_label_set_use_markup(GTK_LABEL(wizard->no_imap_warning), TRUE);
1500 gtk_box_pack_start(GTK_BOX(hbox), wizard->no_imap_warning, FALSE, FALSE, 0);
1506 wizard_response_cb (GtkDialog * dialog, int response, gpointer data)
1508 WizardWindow * wizard = (WizardWindow *)data;
1509 int current_page, num_pages;
1510 gboolean skip_mailbox_page = FALSE;
1512 gint protocol = combobox_get_active_data(GTK_COMBO_BOX(wizard->recv_type));
1514 if (protocol == A_IMAP4) {
1515 skip_mailbox_page = TRUE;
1519 num_pages = g_slist_length(wizard->pages);
1521 current_page = gtk_notebook_get_current_page (
1522 GTK_NOTEBOOK(wizard->notebook));
1523 if (response == CANCEL)
1525 wizard->result = FALSE;
1526 wizard->finished = TRUE;
1527 gtk_widget_destroy (GTK_WIDGET(dialog));
1529 else if (response == FINISHED)
1531 if (!wizard_write_config(wizard)) {
1532 current_page = gtk_notebook_get_current_page (
1533 GTK_NOTEBOOK(wizard->notebook));
1536 wizard->result = TRUE;
1537 wizard->finished = TRUE;
1538 gtk_widget_destroy (GTK_WIDGET(dialog));
1542 if (response == GO_BACK)
1544 if (current_page > 0) {
1546 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1550 gtk_notebook_set_current_page (
1551 GTK_NOTEBOOK(wizard->notebook),
1555 else if (response == GO_FORWARD)
1557 if (current_page < (num_pages-1)) {
1559 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1563 gtk_notebook_set_current_page (
1564 GTK_NOTEBOOK(wizard->notebook),
1569 gtk_dialog_set_response_sensitive (dialog, GO_BACK,
1571 gtk_dialog_set_response_sensitive (dialog, GO_FORWARD,
1572 current_page < (num_pages - 1));
1573 if (current_page == (num_pages -1)) {
1574 gtk_dialog_set_response_sensitive (dialog, FINISHED, TRUE);
1575 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), FINISHED);
1577 gtk_dialog_set_response_sensitive (dialog, FINISHED, FALSE);
1578 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), GO_FORWARD);
1584 static gint wizard_close_cb(GtkWidget *widget, GdkEventAny *event,
1587 WizardWindow *wizard = (WizardWindow *)data;
1588 wizard->result = FALSE;
1589 wizard->finished = TRUE;
1594 #define PACK_WARNING(text) { \
1595 label = gtk_label_new(text); \
1596 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); \
1597 gtk_box_pack_end(GTK_BOX(widget), label, FALSE, FALSE, 0); \
1600 gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) {
1601 WizardWindow *wizard = g_new0(WizardWindow, 1);
1605 GtkWidget *scrolled_window;
1610 wizard->mainwin = mainwin;
1611 wizard->create_mailbox = create_mailbox;
1613 gtk_widget_hide(mainwin->window);
1615 wizard_read_defaults();
1617 wizard->window = gtk_dialog_new_with_buttons (_("Claws Mail Setup Wizard"),
1619 GTK_STOCK_GO_BACK, GO_BACK,
1620 GTK_STOCK_GO_FORWARD, GO_FORWARD,
1621 GTK_STOCK_SAVE, FINISHED,
1622 GTK_STOCK_CANCEL, CANCEL,
1625 g_signal_connect(wizard->window, "response",
1626 G_CALLBACK(wizard_response_cb), wizard);
1627 gtk_widget_realize(wizard->window);
1628 gtk_dialog_set_default_response(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),
1636 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1639 wizard->notebook = gtk_notebook_new();
1640 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(wizard->notebook), FALSE);
1641 gtk_notebook_set_show_border(GTK_NOTEBOOK(wizard->notebook), FALSE);
1642 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(wizard->window)->vbox),
1643 wizard->notebook, TRUE, TRUE, 0);
1645 wizard->pages = NULL;
1647 /*welcome page: 0 */
1649 page = create_page(wizard, _("Welcome to Claws Mail"));
1651 wizard->pages = g_slist_append(wizard->pages, page);
1652 widget = stock_pixmap_widget(wizard->window,
1653 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1655 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1657 text = g_strdup(_("Welcome to the Claws Mail setup wizard.\n\n"
1658 "We will begin by defining some basic "
1659 "information about you and your most common "
1660 "mail options so that you can start to use "
1661 "Claws Mail in less than five minutes."));
1662 widget = gtk_label_new(text);
1663 gtk_label_set_line_wrap(GTK_LABEL(widget), TRUE);
1665 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1667 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1668 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1669 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1670 gtk_box_pack_start(GTK_BOX(page), scrolled_window, TRUE, TRUE, 0);
1672 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1680 widget = create_page (wizard, _("About You"));
1681 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1682 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1683 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1684 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1686 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1688 PACK_WARNING(_("Bold fields must be completed"));
1690 wizard->pages = g_slist_append(wizard->pages, widget);
1692 /* recv+auth page: 2 */
1695 widget = create_page (wizard, _("Receiving mail"));
1696 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1697 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1698 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1699 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1701 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1703 PACK_WARNING(_("Bold fields must be completed"));
1705 wizard->pages = g_slist_append(wizard->pages, widget);
1710 widget = create_page (wizard, _("Sending mail"));
1711 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1712 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1713 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1714 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1716 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1718 PACK_WARNING(_("Bold fields must be completed"));
1720 wizard->pages = g_slist_append(wizard->pages, widget);
1722 /* mailbox page: 4 */
1723 if (create_mailbox) {
1726 widget = create_page (wizard, _("Saving mail on disk"));
1727 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1728 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1729 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1730 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1732 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1733 mailbox_page(wizard));
1734 PACK_WARNING(_("Bold fields must be completed"));
1736 wizard->pages = g_slist_append(wizard->pages, widget);
1742 page = create_page(wizard, _("Configuration finished"));
1744 wizard->pages = g_slist_append(wizard->pages, page);
1745 widget = stock_pixmap_widget(wizard->window,
1746 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1748 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1750 text = g_strdup(_("Claws Mail is now ready.\n"
1751 "Click Save to start."));
1752 widget = gtk_label_new(text);
1753 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1757 for (cur = wizard->pages; cur && cur->data; cur = cur->next) {
1758 gtk_notebook_append_page (GTK_NOTEBOOK(wizard->notebook),
1759 GTK_WIDGET(cur->data), NULL);
1762 g_signal_connect(G_OBJECT(wizard->window), "delete_event",
1763 G_CALLBACK(wizard_close_cb), wizard);
1764 gtk_widget_show_all (wizard->window);
1766 gtk_widget_hide(wizard->recv_imap_label);
1767 gtk_widget_hide(wizard->recv_imap_subdir);
1768 gtk_widget_hide(wizard->subsonly_checkbtn);
1770 wizard_protocol_change(wizard, tmpl.recvtype);
1772 while (!wizard->finished)
1773 gtk_main_iteration();
1775 result = wizard->result;
1779 gtk_widget_show(mainwin->window);