2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail team
4 * This file (C) 2004 Colin Leroy
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 2 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, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
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"
63 #include "prefs_common.h"
73 int WELCOME_PAGE = -1;
77 int MAILBOX_PAGE = -1;
90 GtkWidget *organization;
92 GtkWidget *mailbox_name;
94 GtkWidget *smtp_server;
96 GtkWidget *smtp_username;
97 GtkWidget *smtp_password;
98 GtkWidget *smtp_username_label;
99 GtkWidget *smtp_password_label;
101 GtkWidget *recv_type;
102 GtkWidget *recv_label;
103 GtkWidget *recv_server;
104 GtkWidget *recv_username;
105 GtkWidget *recv_password;
106 GtkWidget *recv_username_label;
107 GtkWidget *recv_password_label;
108 GtkWidget *recv_imap_label;
109 GtkWidget *recv_imap_subdir;
110 GtkWidget *no_imap_warning;
112 GtkWidget *smtp_use_ssl;
113 GtkWidget *recv_use_ssl;
114 GtkWidget *smtp_use_tls;
115 GtkWidget *recv_use_tls;
118 gboolean create_mailbox;
124 typedef struct _AccountTemplate {
133 RecvProtocol recvtype;
144 static AccountTemplate tmpl;
146 static PrefParam template_params[] = {
147 {"name", "$USERNAME",
148 &tmpl.name, P_STRING, NULL, NULL, NULL},
149 {"domain", "$DEFAULTDOMAIN",
150 &tmpl.domain, P_STRING, NULL, NULL, NULL},
151 {"email", "$NAME_MAIL@$DOMAIN",
152 &tmpl.email, P_STRING, NULL, NULL, NULL},
154 &tmpl.organization, P_STRING, NULL, NULL, NULL},
155 {"smtpserver", "smtp.$DOMAIN",
156 &tmpl.smtpserver, P_STRING, NULL, NULL, NULL},
157 {"smtpauth", "FALSE",
158 &tmpl.smtpauth, P_BOOL, NULL, NULL, NULL},
160 &tmpl.smtpuser, P_STRING, NULL, NULL, NULL},
162 &tmpl.smtppass, P_STRING, NULL, NULL, NULL},
164 &tmpl.recvtype, P_INT, NULL, NULL, NULL},
165 {"recvserver", "pop.$DOMAIN",
166 &tmpl.recvserver, P_STRING, NULL, NULL, NULL},
167 {"recvuser", "$LOGIN",
168 &tmpl.recvuser, P_STRING, NULL, NULL, NULL},
170 &tmpl.recvpass, P_STRING, NULL, NULL, NULL},
172 &tmpl.imapdir, P_STRING, NULL, NULL, NULL},
173 {"mboxfile", "/var/mail/$LOGIN",
174 &tmpl.mboxfile, P_STRING, NULL, NULL, NULL},
176 &tmpl.mailbox, P_STRING, NULL, NULL, NULL},
178 &tmpl.smtpssl, P_INT, NULL, NULL, NULL},
180 &tmpl.recvssl, P_INT, NULL, NULL, NULL},
181 {NULL, NULL, NULL, P_INT, NULL, NULL, NULL}
185 static gchar *accountrc_tmpl =
186 "[AccountTemplate]\n"
187 "#you can use $DEFAULTDOMAIN here\n"
188 "#domain must be defined before the variables that use it\n"
189 "#by default, domain is extracted from the hostname\n"
192 "#you can use $USERNAME for name (this is the default)\n"
195 "#you can use $LOGIN, $NAME_MAIL and $DOMAIN here \n"
196 "#$NAME_MAIL is the name without uppercase and with dots instead\n"
198 "#the default is $NAME_MAIL@$DOMAIN\n"
201 "#you can use $DOMAIN here\n"
202 "#the default organization is empty\n"
205 "#you can use $DOMAIN here \n"
206 "#the default is stmp.$DOMAIN\n"
209 "#Whether to use smtp authentication\n"
210 "#the default is 0 (no)\n"
214 "#you can use $LOGIN, $NAME_MAIL, $DOMAIN or $EMAIL here\n"
215 "#the default is empty (same as reception username)\n"
219 "#the default is empty (same as reception password)\n"
222 "#recvtype can be:\n"
225 "#5 for a local mbox file\n"
228 "#you can use $DOMAIN here \n"
229 "#the default is {pop,imap}.$DOMAIN\n"
232 "#you can use $LOGIN, $NAME_MAIL, $DOMAIN or $EMAIL here\n"
233 "#default is $LOGIN\n"
236 "#default is empty\n"
239 "#imap dir if imap (relative to the home on the server\n"
240 "#default is empty\n"
243 "#mbox file if local\n"
244 "#you can use $LOGIN here\n"
245 "#default is /var/mail/$LOGIN\n"
248 "#mailbox name if pop3 or local\n"
249 "#relative path from the user's home\n"
250 "#default is \"Mail\"\n"
253 "#whether to use ssl on STMP connections\n"
254 "#default is 0, 1 is ssl, 2 is starttls\n"
257 "#whether to use ssl on pop or imap connections\n"
258 "#default is 0, 1 is ssl, 2 is starttls\n"
261 static gchar *wizard_get_default_domain_name(void)
263 static gchar *domain_name = NULL;
265 if (domain_name == NULL) {
266 domain_name = g_strdup(get_domain_name());
267 if (strchr(domain_name, '.') != strrchr(domain_name, '.')
268 && strlen(strchr(domain_name, '.')) > 6) {
269 gchar *tmp = g_strdup(strchr(domain_name, '.')+1);
277 static gchar *get_name_for_mail(void)
279 gchar *name = g_strdup(tmpl.name);
283 while(strstr(name, " "))
284 *strstr(name, " ")='.';
289 #define PARSE_DEFAULT(str) { \
290 gchar *tmp = NULL, *new = NULL; \
292 tmp = g_strdup(str); \
293 if (strstr(str, "$USERNAME")) { \
294 tmp = g_strdup(str); \
295 *strstr(tmp, "$USERNAME") = '\0'; \
296 new = g_strconcat(tmp, g_get_real_name(), \
297 strstr(str, "$USERNAME")+strlen("$USERNAME"), \
304 if (strstr(str, "$LOGIN")) { \
305 tmp = g_strdup(str); \
306 *strstr(tmp, "$LOGIN") = '\0'; \
307 new = g_strconcat(tmp, g_get_user_name(), \
308 strstr(str, "$LOGIN")+strlen("$LOGIN"), \
315 if (strstr(str, "$EMAIL")) { \
316 tmp = g_strdup(str); \
317 *strstr(tmp, "$EMAIL") = '\0'; \
318 new = g_strconcat(tmp, tmpl.email, \
319 strstr(str, "$EMAIL")+strlen("$EMAIL"), \
326 if (strstr(str, "$NAME_MAIL")) { \
327 tmp = g_strdup(str); \
328 *strstr(tmp, "$NAME_MAIL") = '\0'; \
329 new = g_strconcat(tmp, get_name_for_mail(), \
330 strstr(str, "$NAME_MAIL")+strlen("$NAME_MAIL"), \
337 if (strstr(str, "$DEFAULTDOMAIN")) { \
338 tmp = g_strdup(str); \
339 *strstr(tmp, "$DEFAULTDOMAIN") = '\0'; \
340 new = g_strconcat(tmp, wizard_get_default_domain_name(), \
341 strstr(str, "$DEFAULTDOMAIN")+strlen("$DEFAULTDOMAIN"), \
348 if (strstr(str, "$DOMAIN")) { \
349 tmp = g_strdup(str); \
350 *strstr(tmp, "$DOMAIN") = '\0'; \
351 new = g_strconcat(tmp, tmpl.domain, \
352 strstr(str, "$DOMAIN")+strlen("$DOMAIN"), \
361 static void wizard_read_defaults(void)
365 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, "accountrc.tmpl", NULL);
366 if (!is_file_exist(rcpath)) {
367 str_write_to_file(accountrc_tmpl, rcpath);
370 prefs_read_config(template_params, "AccountTemplate", rcpath, NULL);
372 PARSE_DEFAULT(tmpl.domain);
373 PARSE_DEFAULT(tmpl.name);
374 PARSE_DEFAULT(tmpl.email);
375 PARSE_DEFAULT(tmpl.organization);
376 PARSE_DEFAULT(tmpl.smtpserver);
377 PARSE_DEFAULT(tmpl.smtpuser);
378 PARSE_DEFAULT(tmpl.smtppass);
379 PARSE_DEFAULT(tmpl.recvserver);
380 PARSE_DEFAULT(tmpl.recvuser);
381 PARSE_DEFAULT(tmpl.recvpass);
382 PARSE_DEFAULT(tmpl.imapdir);
383 PARSE_DEFAULT(tmpl.mboxfile);
384 PARSE_DEFAULT(tmpl.mailbox);
387 "%s, %s, %s, %s, %s, %d, %s, %s, %s, %s, %s, %s, %d, %d\n",
388 tmpl.name,tmpl.domain,tmpl.email,tmpl.organization,tmpl.smtpserver,
389 tmpl.recvtype,tmpl.recvserver,tmpl.recvuser,tmpl.recvpass,
390 tmpl.imapdir,tmpl.mboxfile,tmpl.mailbox,tmpl.smtpssl,tmpl.recvssl);
395 static void initialize_fonts(WizardWindow *wizard)
397 GtkWidget *widget = wizard->email;
398 gint size = pango_font_description_get_size(
399 widget->style->font_desc)
403 tmp = g_strdup(prefs_common.textfont);
404 if (strrchr(tmp, ' ')) {
405 *(strrchr(tmp, ' ')) = '\0';
406 new = g_strdup_printf("%s %d", tmp, size);
407 g_free(prefs_common.textfont);
408 prefs_common.textfont = new;
412 tmp = g_strdup(prefs_common.smallfont);
413 if (strrchr(tmp, ' ')) {
414 *(strrchr(tmp, ' ')) = '\0';
415 new = g_strdup_printf("%s %d", tmp, size);
416 g_free(prefs_common.smallfont);
417 prefs_common.smallfont = new;
421 tmp = g_strdup(prefs_common.normalfont);
422 if (strrchr(tmp, ' ')) {
423 *(strrchr(tmp, ' ')) = '\0';
424 new = g_strdup_printf("%s %d", tmp, size);
425 g_free(prefs_common.normalfont);
426 prefs_common.normalfont = new;
431 #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"
432 #define FACE "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAJ1BMVEUTGBYnS3BCUE9KVC9acyRy\n\
433 kC6LjITZdGiumnF/p7yrq6jJzc/5+vf7GI+IAAACZ0lEQVQ4y5XUvW/UMBQA8LRl6VZ3QLqNNhVS\n\
434 YSnKFfExEg9lbJNK3QqVoiPHzgpFnAIs5Do9ORNDVOwuFVIgduZWOfuP4vlyybVVkeCdTpHe7z1/\n\
435 RHYc85dw/gEUxi2gS5ZlDKqbUDcpzarroMEOpDU2VtcAmFKlxn+t2VWQUNa1BmAlGrsCqWKMwetv\n\
436 MMbnFaixFn9rh47DFCuzDs6hxPyrxXuOA7WqWQcp2Fhx7gTOcga6bGHSS6FHCHFouLcMJptuaQbp\n\
437 +kff90P6Yn0TMpXN4DxNVz+FQZ8Gob8DGWSsBUIG23seDXwaBBnU0EJKVhNvqx/6aHTHrmMGhNw9\n\
438 XlqkgbdEX/gh1PUcVj84G4HnuHTXDQ+6Dk3IyqFL/UfEpXvj7RChaoEsUX9rYeGE7o83wp0WcCjS\n\
439 9/01AifhLrj0oINeuuJ53kIP+uF+7uL03eQpGWx5yzDu05fM3Z53AJDkvdODwvOfmbH3uOuwcLz+\n\
440 UBWLR8/N+MHnDsoeG4zecDl5Mhqa74NR90p+VEYmo+ioSEan8WnytANhDB8kX06TJFZJcowvfrZz\n\
441 XIMS2vxMIlHJfHMTRLOqC7TovlJFEVVGF7yafFVTkGgij+I851hZCHP5Tk8BWXObjuxhl2fm8pdu\n\
442 O0wluZDKHgJ91nVMKhuKN6cZQf9uQAs85lrjGDYmwmqzDynwClRKTCF/OwfDub0dQyzHxVUt6DzK\n\
443 eY5NseIxb8abwoVSMpZDhJyL9kJamGAxplC7izkHyaXM5/nZHFiNeRHfBFNwLjhOr+fAmw1G3OYl\n\
444 bwoijGGzD40pdeu3ROv/+Pr8AWPP4vVXbP0VAAAAAElFTkSuQmCC"
446 static void write_welcome_email(WizardWindow *wizard)
452 const gchar *mailbox = gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name));
453 Folder *folder = folder_find_from_path(mailbox);
454 FolderItem *inbox = folder ? folder->inbox:NULL;
455 gchar *file = get_tmp_file();
456 gchar enc_from_name[BUFFSIZE], enc_to_name[BUFFSIZE], enc_subject[BUFFSIZE];
458 get_rfc822_date(buf_date, sizeof(buf_date));
460 conv_encode_header_full(enc_subject, sizeof(enc_subject),
461 Q_("Welcome Mail Subject|Welcome to Claws Mail"),
462 strlen("Subject: "), FALSE, CS_INTERNAL);
463 conv_encode_header_full(enc_to_name, sizeof(enc_to_name),
464 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)),
465 strlen("To: "), TRUE, CS_INTERNAL);
466 conv_encode_header_full(enc_from_name, sizeof(enc_from_name),
467 _("The Claws Mail Team"),
468 strlen("From: "), TRUE, CS_INTERNAL);
470 head = g_strdup_printf(
477 "Content-Type: text/plain; charset=UTF-8\n",
481 gtk_entry_get_text(GTK_ENTRY(wizard->email)),
482 buf_date, enc_subject, XFACE, FACE);
483 body = g_strdup_printf(
485 "Welcome to Claws Mail\n"
486 "---------------------\n"
488 "Now that you have set up your account you can fetch your\n"
489 "mail by clicking the 'Get Mail' button at the left of the\n"
492 "Claws Mail has lots of extra features accessible via plugins,\n"
493 "like anti-spam filtering and learning (via the Bogofilter or\n"
494 "SpamAssassin plugins), privacy protection (via PGP/Mime), an RSS\n"
495 "aggregator, a calendar, and much more. You can load them from\n"
496 "the menu entry '/Configuration/Plugins'.\n"
498 "You can change your Account Preferences by using the menu\n"
499 "entry '/Configuration/Preferences for current account'\n"
500 "and change the general Preferences by using\n"
501 "'/Configuration/Preferences'.\n"
503 "You can find further information in the Claws Mail manual,\n"
504 "which can be accessed by using the menu entry '/Help/Manual'\n"
505 "or online at the URL given below.\n"
513 "Mailing Lists: <%s>\n"
517 "Claws Mail is free software, released under the terms\n"
518 "of the GNU General Public License, version 2 or later, as\n"
519 "published by the Free Software Foundation, 51 Franklin Street,\n"
520 "Fifth Floor, Boston, MA 02110-1301, USA. The license can be\n"
525 "If you wish to donate to the Claws Mail project you can do\n"
527 HOMEPAGE_URI, MANUAL_URI, FAQ_URI, THEMES_URI, MAILING_LIST_URI,
528 GPL_URI, DONATE_URI);
530 msg = g_strconcat(head, body, NULL);
532 if (inbox && inbox->total_msgs == 0
533 && str_write_to_file(msg, file) >= 0) {
534 MsgFlags flags = { MSG_UNREAD|MSG_NEW, 0};
535 folder_item_add_msg(inbox, file, &flags, FALSE);
544 static gboolean wizard_write_config(WizardWindow *wizard)
546 static gboolean mailbox_ok = FALSE;
547 PrefsAccount *prefs_account = prefs_account_new();
548 GList *account_list = NULL;
549 GtkWidget *menu, *menuitem;
550 gchar *smtp_server, *recv_server;
551 gint smtp_port, recv_port;
553 SSLType smtp_ssl_type, recv_ssl_type;
556 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(wizard->recv_type));
557 menuitem = gtk_menu_get_active(GTK_MENU(menu));
558 prefs_account->protocol = GPOINTER_TO_INT
559 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
562 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4 &&
563 !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)))) {
564 alertpanel_error(_("Please enter the mailbox name."));
565 g_free(prefs_account);
566 gtk_notebook_set_current_page (
567 GTK_NOTEBOOK(wizard->notebook),
573 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
574 mailbox_ok = setup_write_mailbox_path(wizard->mainwin,
576 GTK_ENTRY(wizard->mailbox_name)));
582 /* alertpanel done by setup_write_mailbox_path */
583 g_free(prefs_account);
584 gtk_notebook_set_current_page (
585 GTK_NOTEBOOK(wizard->notebook),
590 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->full_name)))
591 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->email)))) {
592 alertpanel_error(_("Please enter your name and email address."));
593 g_free(prefs_account);
594 gtk_notebook_set_current_page (
595 GTK_NOTEBOOK(wizard->notebook),
600 if (prefs_account->protocol != A_LOCAL) {
601 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)))
602 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
603 alertpanel_error(_("Please enter your receiving server "
605 g_free(prefs_account);
606 gtk_notebook_set_current_page (
607 GTK_NOTEBOOK(wizard->notebook),
612 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
613 alertpanel_error(_("Please enter your username."));
614 g_free(prefs_account);
615 gtk_notebook_set_current_page (
616 GTK_NOTEBOOK(wizard->notebook),
622 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)))) {
623 alertpanel_error(_("Please enter your SMTP server."));
624 g_free(prefs_account);
625 gtk_notebook_set_current_page (
626 GTK_NOTEBOOK(wizard->notebook),
631 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
632 if (prefs_account->protocol == A_LOCAL
633 && !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)))) {
634 alertpanel_error(_("Please enter your SMTP username."));
635 g_free(prefs_account);
636 gtk_notebook_set_current_page (
637 GTK_NOTEBOOK(wizard->notebook),
640 } /* if it's not local we'll use the reception server */
643 if (prefs_account->protocol != A_LOCAL)
644 prefs_account->account_name = g_strdup_printf("%s@%s",
645 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)),
646 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
648 prefs_account->account_name = g_strdup_printf("%s",
649 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
651 recv_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
652 smtp_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)));
654 if (prefs_account->protocol != A_LOCAL && strstr(recv_server, ":")) {
655 recv_port = atoi(strstr(recv_server, ":")+1);
656 *(strstr(recv_server, ":")) = '\0';
657 if (prefs_account->protocol == A_IMAP4) {
658 prefs_account->set_imapport = TRUE;
659 prefs_account->imapport = recv_port;
660 } else if (prefs_account->protocol == A_POP3) {
661 prefs_account->set_popport = TRUE;
662 prefs_account->popport = recv_port;
665 if (strstr(smtp_server, ":")) {
666 smtp_port = atoi(strstr(smtp_server, ":")+1);
667 *(strstr(smtp_server, ":")) = '\0';
668 prefs_account->set_smtpport = TRUE;
669 prefs_account->smtpport = smtp_port;
672 prefs_account->name = g_strdup(
673 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)));
674 prefs_account->address = g_strdup(
675 gtk_entry_get_text(GTK_ENTRY(wizard->email)));
676 prefs_account->organization = g_strdup(
677 gtk_entry_get_text(GTK_ENTRY(wizard->organization)));
678 prefs_account->smtp_server = g_strdup(smtp_server);
680 if (prefs_account->protocol != A_LOCAL)
681 prefs_account->recv_server = g_strdup(recv_server);
683 prefs_account->local_mbox = g_strdup(recv_server);
688 prefs_account->userid = g_strdup(
689 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)));
690 prefs_account->passwd = g_strdup(
691 gtk_entry_get_text(GTK_ENTRY(wizard->recv_password)));
693 prefs_account->smtp_userid = g_strdup(
694 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)));
695 prefs_account->smtp_passwd = g_strdup(
696 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_password)));
697 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
698 prefs_account->use_smtp_auth = TRUE;
702 smtp_ssl_type = SSL_NONE;
703 recv_ssl_type = SSL_NONE;
705 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl))) {
706 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls)))
707 smtp_ssl_type = SSL_STARTTLS;
709 smtp_ssl_type = SSL_TUNNEL;
711 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl))) {
712 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls)))
713 recv_ssl_type = SSL_STARTTLS;
715 recv_ssl_type = SSL_TUNNEL;
718 prefs_account->ssl_smtp = smtp_ssl_type;
720 if (prefs_account->protocol == A_IMAP4)
721 prefs_account->ssl_imap = recv_ssl_type;
723 prefs_account->ssl_pop = recv_ssl_type;
726 if (prefs_account->protocol == A_IMAP4) {
727 gchar *directory = gtk_editable_get_chars(
728 GTK_EDITABLE(wizard->recv_imap_subdir), 0, -1);
729 if (directory && strlen(directory)) {
730 prefs_account->imap_dir = g_strdup(directory);
735 account_list = g_list_append(account_list, prefs_account);
736 prefs_account_write_config_all(account_list);
737 prefs_account_free(prefs_account);
738 account_read_config_all();
740 initialize_fonts(wizard);
741 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4)
742 write_welcome_email(wizard);
745 plugin_load_standard_plugins();
750 static GtkWidget* create_page (WizardWindow *wizard, const char * title)
758 vbox = gtk_vbox_new (FALSE, 6);
759 gtk_container_set_border_width (GTK_CONTAINER(vbox), 10);
761 /* create the titlebar */
762 hbox = gtk_hbox_new (FALSE, 12);
763 image = stock_pixmap_widget(wizard->window,
764 STOCK_PIXMAP_CLAWS_MAIL_ICON);
765 gtk_box_pack_start (GTK_BOX(hbox), image, FALSE, FALSE, 0);
766 title_string = g_strconcat ("<span size=\"xx-large\" weight=\"ultrabold\">", title ? title : "", "</span>", NULL);
767 w = gtk_label_new (title_string);
768 gtk_label_set_use_markup (GTK_LABEL(w), TRUE);
769 g_free (title_string);
770 gtk_box_pack_start (GTK_BOX(hbox), w, FALSE, FALSE, 0);
772 /* pack the titlebar */
773 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
775 /* pack the separator */
776 gtk_box_pack_start (GTK_BOX(vbox), gtk_hseparator_new(), FALSE, FALSE, 0);
779 w = gtk_alignment_new (0, 0, 0, 0);
780 gtk_widget_set_size_request (w, 0, 6);
781 gtk_box_pack_start (GTK_BOX(vbox), w, FALSE, FALSE, 0);
786 #define GTK_TABLE_ADD_ROW_AT(table,text,entry,i) { \
787 GtkWidget *label = gtk_label_new(text); \
788 gtk_table_attach(GTK_TABLE(table), label, \
789 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0); \
790 gtk_label_set_use_markup(GTK_LABEL(label), TRUE); \
791 if (GTK_IS_MISC(label)) \
792 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); \
793 gtk_table_attach(GTK_TABLE(table), entry, \
794 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0); \
797 static gchar *get_default_server(WizardWindow * wizard, const gchar *type)
799 if (!strcmp(type, "smtp")) {
800 if (!tmpl.smtpserver || !strlen(tmpl.smtpserver))
801 return g_strconcat(type, ".", tmpl.domain, NULL);
803 return g_strdup(tmpl.smtpserver);
805 if (!tmpl.recvserver || !strlen(tmpl.recvserver))
806 return g_strconcat(type, ".", tmpl.domain, NULL);
808 return g_strdup(tmpl.recvserver);
812 static gchar *get_default_account(WizardWindow * wizard)
814 gchar *result = NULL;
816 if (!tmpl.recvuser || !strlen(tmpl.recvuser)) {
817 result = gtk_editable_get_chars(
818 GTK_EDITABLE(wizard->email), 0, -1);
820 if (strstr(result, "@")) {
821 *(strstr(result,"@")) = '\0';
824 result = g_strdup(tmpl.recvuser);
829 static gchar *get_default_smtp_account(WizardWindow * wizard)
831 gchar *result = NULL;
833 if (!tmpl.smtpuser || !strlen(tmpl.smtpuser)) {
836 result = g_strdup(tmpl.smtpuser);
841 static void wizard_email_changed(GtkWidget *widget, gpointer data)
843 WizardWindow *wizard = (WizardWindow *)data;
844 RecvProtocol protocol;
846 protocol = GPOINTER_TO_INT
847 (g_object_get_data(G_OBJECT(wizard->recv_type), MENU_VAL_ID));
849 text = get_default_server(wizard, "smtp");
850 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
853 text = get_default_account(wizard);
854 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
857 if (protocol == A_POP3) {
858 text = get_default_server(wizard, "pop");
859 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
861 } else if (protocol == A_IMAP4) {
862 text = get_default_server(wizard, "imap");
863 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
865 } else if (protocol == A_LOCAL) {
866 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
871 static GtkWidget* user_page (WizardWindow * wizard)
873 GtkWidget *table = gtk_table_new(3,2, FALSE);
876 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
877 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
879 wizard->full_name = gtk_entry_new();
880 gtk_entry_set_text(GTK_ENTRY(wizard->full_name), tmpl.name?tmpl.name:"");
881 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">Your name:</span>"),
882 wizard->full_name, i); i++;
884 wizard->email = gtk_entry_new();
885 gtk_entry_set_text(GTK_ENTRY(wizard->email), tmpl.email?tmpl.email:"");
886 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">Your email address:</span>"),
887 wizard->email, i); i++;
889 wizard->organization = gtk_entry_new();
890 GTK_TABLE_ADD_ROW_AT(table, _("Your organization:"),
891 wizard->organization, i); i++;
892 gtk_entry_set_text(GTK_ENTRY(wizard->organization), tmpl.organization?tmpl.organization:"");
894 g_signal_connect(G_OBJECT(wizard->email), "changed",
895 G_CALLBACK(wizard_email_changed),
900 static GtkWidget* mailbox_page (WizardWindow * wizard)
902 GtkWidget *table = gtk_table_new(1,2, FALSE);
904 GtkTooltips *tips = gtk_tooltips_new();
906 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
907 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
909 wizard->mailbox_name = gtk_entry_new();
910 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), tmpl.mailbox?tmpl.mailbox:"");
912 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->mailbox_name,
913 _("You can also specify an absolute path, for example: "
914 "\"/home/john/Documents/Mail\""),
917 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">Mailbox name:</span>"),
918 wizard->mailbox_name, i); i++;
923 static void smtp_auth_changed (GtkWidget *btn, gpointer data)
925 WizardWindow *wizard = (WizardWindow *)data;
926 gboolean do_auth = gtk_toggle_button_get_active(
927 GTK_TOGGLE_BUTTON(wizard->smtp_auth));
928 gtk_widget_set_sensitive(wizard->smtp_username, do_auth);
929 gtk_widget_set_sensitive(wizard->smtp_username_label, do_auth);
930 gtk_widget_set_sensitive(wizard->smtp_password, do_auth);
931 gtk_widget_set_sensitive(wizard->smtp_password_label, do_auth);
934 static GtkWidget* smtp_page (WizardWindow * wizard)
937 GtkWidget *table = gtk_table_new(6, 2, FALSE);
939 GtkWidget *table = gtk_table_new(4, 2, FALSE);
941 GtkTooltips *tips = gtk_tooltips_new();
945 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
946 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
948 wizard->smtp_server = gtk_entry_new();
949 text = get_default_server(wizard, "smtp");
950 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
953 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->smtp_server,
954 _("You can specify the port number by appending it at the end: "
955 "\"mail.example.com:25\""),
958 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">SMTP server address:</span>"),
959 wizard->smtp_server, i); i++;
960 wizard->smtp_auth = gtk_check_button_new_with_label(
961 _("Use authentication"));
962 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth),
964 g_signal_connect(G_OBJECT(wizard->smtp_auth), "toggled",
965 G_CALLBACK(smtp_auth_changed),
967 gtk_table_attach(GTK_TABLE(table), wizard->smtp_auth,
968 0,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0); i++;
970 text = get_default_smtp_account(wizard);
972 wizard->smtp_username = gtk_entry_new();
973 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_username), text);
975 wizard->smtp_username_label = gtk_label_new(_("SMTP username:\n"
976 "<span size=\"small\">(empty to use the same as reception)</span>"));
977 gtk_label_set_use_markup(GTK_LABEL(wizard->smtp_username_label), TRUE);
978 gtk_table_attach(GTK_TABLE(table), wizard->smtp_username_label,
979 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
980 if (GTK_IS_MISC(wizard->smtp_username_label))
981 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_username_label), 1, 0.5);
982 gtk_table_attach(GTK_TABLE(table), wizard->smtp_username,
983 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
985 wizard->smtp_password = gtk_entry_new();
986 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_password), tmpl.smtppass?tmpl.smtppass:"");
987 gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_password), FALSE);
988 wizard->smtp_password_label = gtk_label_new(_("SMTP password:\n"
989 "<span size=\"small\">(empty to use the same as reception)</span>"));
990 gtk_label_set_use_markup(GTK_LABEL(wizard->smtp_password_label), TRUE);
991 gtk_table_attach(GTK_TABLE(table), wizard->smtp_password_label,
992 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
993 if (GTK_IS_MISC(wizard->smtp_password_label))
994 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_password_label), 1, 0.5);
995 gtk_table_attach(GTK_TABLE(table), wizard->smtp_password,
996 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
999 wizard->smtp_use_ssl = gtk_check_button_new_with_label(
1000 _("Use SSL to connect to SMTP server"));
1001 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl),
1003 gtk_table_attach(GTK_TABLE(table), wizard->smtp_use_ssl,
1004 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1006 wizard->smtp_use_tls = gtk_check_button_new_with_label(
1007 _("Use SSL via STARTTLS"));
1008 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls),
1010 gtk_table_attach(GTK_TABLE(table), wizard->smtp_use_tls,
1011 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 16, 0);
1013 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, wizard->smtp_use_tls);
1015 smtp_auth_changed(NULL, wizard);
1019 static void wizard_protocol_change(WizardWindow *wizard, RecvProtocol protocol)
1023 if (protocol == A_POP3) {
1024 text = get_default_server(wizard, "pop");
1025 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1026 gtk_widget_hide(wizard->recv_imap_label);
1027 gtk_widget_hide(wizard->recv_imap_subdir);
1028 gtk_widget_show(wizard->recv_username);
1029 gtk_widget_show(wizard->recv_password);
1030 gtk_widget_show(wizard->recv_username_label);
1031 gtk_widget_show(wizard->recv_password_label);
1032 gtk_widget_hide(wizard->no_imap_warning);
1034 gtk_widget_show(wizard->recv_use_ssl);
1035 gtk_widget_show(wizard->recv_use_tls);
1037 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1038 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1039 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1041 } else if (protocol == A_IMAP4) {
1042 #ifdef HAVE_LIBETPAN
1043 text = get_default_server(wizard, "imap");
1044 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1045 gtk_widget_show(wizard->recv_imap_label);
1046 gtk_widget_show(wizard->recv_imap_subdir);
1047 gtk_widget_show(wizard->recv_username);
1048 gtk_widget_show(wizard->recv_password);
1049 gtk_widget_show(wizard->recv_username_label);
1050 gtk_widget_show(wizard->recv_password_label);
1051 gtk_widget_hide(wizard->no_imap_warning);
1053 gtk_widget_show(wizard->recv_use_ssl);
1054 gtk_widget_show(wizard->recv_use_tls);
1056 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1057 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1058 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1061 gtk_widget_hide(wizard->recv_imap_label);
1062 gtk_widget_hide(wizard->recv_imap_subdir);
1063 gtk_widget_hide(wizard->recv_username);
1064 gtk_widget_hide(wizard->recv_password);
1065 gtk_widget_hide(wizard->recv_username_label);
1066 gtk_widget_hide(wizard->recv_password_label);
1067 gtk_widget_show(wizard->no_imap_warning);
1069 gtk_widget_hide(wizard->recv_use_ssl);
1070 gtk_widget_hide(wizard->recv_use_tls);
1072 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, FALSE);
1074 } else if (protocol == A_LOCAL) {
1075 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
1076 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Local mailbox:</span>"));
1077 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1078 gtk_widget_hide(wizard->no_imap_warning);
1079 gtk_widget_hide(wizard->recv_imap_label);
1080 gtk_widget_hide(wizard->recv_imap_subdir);
1081 gtk_widget_hide(wizard->recv_username);
1082 gtk_widget_hide(wizard->recv_password);
1083 gtk_widget_hide(wizard->recv_username_label);
1084 gtk_widget_hide(wizard->recv_password_label);
1086 gtk_widget_hide(wizard->recv_use_ssl);
1087 gtk_widget_hide(wizard->recv_use_tls);
1089 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1093 static void wizard_protocol_changed(GtkMenuItem *menuitem, gpointer data)
1095 WizardWindow *wizard = (WizardWindow *)data;
1096 RecvProtocol protocol;
1097 protocol = GPOINTER_TO_INT
1098 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
1100 wizard_protocol_change(wizard, protocol);
1103 static GtkWidget* recv_page (WizardWindow * wizard)
1106 GtkWidget *table = gtk_table_new(7,2, FALSE);
1108 GtkWidget *table = gtk_table_new(5,2, FALSE);
1110 GtkWidget *menu = gtk_menu_new();
1111 GtkWidget *menuitem;
1112 GtkTooltips *tips = gtk_tooltips_new();
1117 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1118 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1120 wizard->recv_type = gtk_option_menu_new();
1122 MENUITEM_ADD (menu, menuitem, _("POP3"), A_POP3);
1123 g_signal_connect(G_OBJECT(menuitem), "activate",
1124 G_CALLBACK(wizard_protocol_changed),
1127 MENUITEM_ADD (menu, menuitem, _("IMAP"), A_IMAP4);
1128 g_signal_connect(G_OBJECT(menuitem), "activate",
1129 G_CALLBACK(wizard_protocol_changed),
1132 MENUITEM_ADD (menu, menuitem, _("Local mbox file"), A_LOCAL);
1133 g_signal_connect(G_OBJECT(menuitem), "activate",
1134 G_CALLBACK(wizard_protocol_changed),
1137 gtk_option_menu_set_menu (GTK_OPTION_MENU (wizard->recv_type), menu);
1138 switch(tmpl.recvtype) {
1151 gtk_option_menu_set_history(GTK_OPTION_MENU (wizard->recv_type), index);
1152 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">Server type:</span>"),
1153 wizard->recv_type, i); i++;
1155 wizard->recv_server = gtk_entry_new();
1156 text = get_default_server(wizard, "pop");
1157 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1160 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->recv_server,
1161 _("You can specify the port number by appending it at the end: "
1162 "\"mail.example.com:110\""),
1165 wizard->recv_label = gtk_label_new(_("<span weight=\"bold\">Server address:</span>"));
1166 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1167 gtk_table_attach(GTK_TABLE(table), wizard->recv_label,
1168 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1169 if (GTK_IS_MISC(wizard->recv_label))
1170 gtk_misc_set_alignment(GTK_MISC(wizard->recv_label), 1, 0.5);
1171 gtk_table_attach(GTK_TABLE(table), wizard->recv_server,
1172 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1175 wizard->recv_username = gtk_entry_new();
1176 wizard->recv_username_label = gtk_label_new(_("<span weight=\"bold\">Username:</span>"));
1177 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_username_label), TRUE);
1178 gtk_table_attach(GTK_TABLE(table), wizard->recv_username_label,
1179 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1180 if (GTK_IS_MISC(wizard->recv_username_label))
1181 gtk_misc_set_alignment(GTK_MISC(wizard->recv_username_label), 1, 0.5);
1182 gtk_table_attach(GTK_TABLE(table), wizard->recv_username,
1183 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1186 text = get_default_account(wizard);
1187 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
1190 wizard->recv_password = gtk_entry_new();
1191 gtk_entry_set_text(GTK_ENTRY(wizard->recv_password), tmpl.recvpass?tmpl.recvpass:"");
1192 wizard->recv_password_label = gtk_label_new(_("Password:"));
1193 gtk_table_attach(GTK_TABLE(table), wizard->recv_password_label,
1194 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1195 if (GTK_IS_MISC(wizard->recv_password_label))
1196 gtk_misc_set_alignment(GTK_MISC(wizard->recv_password_label), 1, 0.5);
1197 gtk_table_attach(GTK_TABLE(table), wizard->recv_password,
1198 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1199 gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_password), FALSE);
1202 wizard->recv_imap_subdir = gtk_entry_new();
1203 gtk_entry_set_text(GTK_ENTRY(wizard->recv_imap_subdir), tmpl.imapdir?tmpl.imapdir:"");
1204 wizard->recv_imap_label = gtk_label_new(_("IMAP server directory:"));
1206 gtk_table_attach(GTK_TABLE(table), wizard->recv_imap_label,
1207 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1208 if (GTK_IS_MISC(wizard->recv_imap_label))
1209 gtk_misc_set_alignment(GTK_MISC(wizard->recv_imap_label), 1, 0.5);
1210 gtk_table_attach(GTK_TABLE(table), wizard->recv_imap_subdir,
1211 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1215 wizard->no_imap_warning = gtk_label_new(_(
1216 "<span weight=\"bold\">Warning: this version of Claws Mail\n"
1217 "has been built without IMAP support.</span>"));
1218 gtk_label_set_use_markup(GTK_LABEL(wizard->no_imap_warning), TRUE);
1219 gtk_table_attach(GTK_TABLE(table), wizard->no_imap_warning,
1220 0,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1222 wizard->recv_use_ssl = gtk_check_button_new_with_label(
1223 _("Use SSL to connect to receiving server"));
1224 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl),
1226 gtk_table_attach(GTK_TABLE(table), wizard->recv_use_ssl,
1227 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1229 wizard->recv_use_tls = gtk_check_button_new_with_label(
1230 _("Use SSL via STARTTLS"));
1231 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls),
1233 gtk_table_attach(GTK_TABLE(table), wizard->recv_use_tls,
1234 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 16, 0);
1236 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, wizard->recv_use_tls);
1242 wizard_response_cb (GtkDialog * dialog, int response, gpointer data)
1244 WizardWindow * wizard = (WizardWindow *)data;
1245 int current_page, num_pages;
1246 GtkWidget *menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(wizard->recv_type));
1247 GtkWidget *menuitem = gtk_menu_get_active(GTK_MENU(menu));
1248 gint protocol = GPOINTER_TO_INT
1249 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
1250 gboolean skip_mailbox_page = FALSE;
1252 if (protocol == A_IMAP4) {
1253 skip_mailbox_page = TRUE;
1256 num_pages = g_slist_length(wizard->pages);
1258 current_page = gtk_notebook_get_current_page (
1259 GTK_NOTEBOOK(wizard->notebook));
1260 if (response == CANCEL)
1262 wizard->result = FALSE;
1263 wizard->finished = TRUE;
1264 gtk_widget_destroy (GTK_WIDGET(dialog));
1266 else if (response == FINISHED)
1268 if (!wizard_write_config(wizard)) {
1269 current_page = gtk_notebook_get_current_page (
1270 GTK_NOTEBOOK(wizard->notebook));
1273 wizard->result = TRUE;
1274 wizard->finished = TRUE;
1275 gtk_widget_destroy (GTK_WIDGET(dialog));
1279 if (response == GO_BACK)
1281 if (current_page > 0) {
1283 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1287 gtk_notebook_set_current_page (
1288 GTK_NOTEBOOK(wizard->notebook),
1292 else if (response == GO_FORWARD)
1294 if (current_page < (num_pages-1)) {
1296 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1300 gtk_notebook_set_current_page (
1301 GTK_NOTEBOOK(wizard->notebook),
1306 gtk_dialog_set_response_sensitive (dialog, GO_BACK,
1308 gtk_dialog_set_response_sensitive (dialog, GO_FORWARD,
1309 current_page < (num_pages - 1));
1310 gtk_dialog_set_response_sensitive (dialog, FINISHED,
1311 current_page == (num_pages - 1));
1315 static gint wizard_close_cb(GtkWidget *widget, GdkEventAny *event,
1318 WizardWindow *wizard = (WizardWindow *)data;
1319 wizard->result = FALSE;
1320 wizard->finished = TRUE;
1325 #define PACK_WARNING(text) { \
1326 label = gtk_label_new(text); \
1327 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); \
1328 gtk_box_pack_end(GTK_BOX(widget), label, FALSE, FALSE, 0); \
1331 gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) {
1332 WizardWindow *wizard = g_new0(WizardWindow, 1);
1340 wizard->mainwin = mainwin;
1341 wizard->create_mailbox = create_mailbox;
1343 gtk_widget_hide(mainwin->window);
1345 wizard_read_defaults();
1347 wizard->window = gtk_dialog_new_with_buttons (_("Claws Mail Setup Wizard"),
1349 GTK_STOCK_GO_BACK, GO_BACK,
1350 GTK_STOCK_GO_FORWARD, GO_FORWARD,
1351 GTK_STOCK_SAVE, FINISHED,
1352 GTK_STOCK_CANCEL, CANCEL,
1355 g_signal_connect(wizard->window, "response",
1356 G_CALLBACK(wizard_response_cb), wizard);
1357 gtk_widget_realize(wizard->window);
1358 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window),
1360 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1362 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1364 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1366 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1369 wizard->notebook = gtk_notebook_new();
1370 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(wizard->notebook), FALSE);
1371 gtk_notebook_set_show_border(GTK_NOTEBOOK(wizard->notebook), FALSE);
1372 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(wizard->window)->vbox),
1373 wizard->notebook, TRUE, TRUE, 0);
1375 wizard->pages = NULL;
1377 /*welcome page: 0 */
1379 page = create_page(wizard, _("Welcome to Claws Mail"));
1381 wizard->pages = g_slist_append(wizard->pages, page);
1382 widget = stock_pixmap_widget(wizard->window,
1383 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1385 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1387 text = g_strdup(_("Welcome to the Claws Mail setup wizard.\n\n"
1388 "We will begin by defining some basic "
1389 "information about you and your most common "
1390 "mail options so that you can start to use "
1391 "Claws Mail in less than five minutes."));
1392 widget = gtk_label_new(text);
1393 gtk_label_set_line_wrap(GTK_LABEL(widget), TRUE);
1394 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1400 widget = create_page (wizard, _("About You"));
1401 gtk_box_pack_start (GTK_BOX(widget), user_page(wizard), FALSE, FALSE, 0);
1402 PACK_WARNING(_("Bold fields must be completed"));
1404 wizard->pages = g_slist_append(wizard->pages, widget);
1406 /* recv+auth page: 2 */
1409 widget = create_page (wizard, _("Receiving mail"));
1410 gtk_box_pack_start (GTK_BOX(widget), recv_page(wizard), FALSE, FALSE, 0);
1411 PACK_WARNING(_("Bold fields must be completed"));
1413 wizard->pages = g_slist_append(wizard->pages, widget);
1418 widget = create_page (wizard, _("Sending mail"));
1419 gtk_box_pack_start (GTK_BOX(widget), smtp_page(wizard), FALSE, FALSE, 0);
1420 PACK_WARNING(_("Bold fields must be completed"));
1422 wizard->pages = g_slist_append(wizard->pages, widget);
1424 /* mailbox page: 4 */
1425 if (create_mailbox) {
1428 widget = create_page (wizard, _("Saving mail on disk"));
1429 gtk_box_pack_start (GTK_BOX(widget), mailbox_page(wizard), FALSE, FALSE, 0);
1430 PACK_WARNING(_("Bold fields must be completed"));
1432 wizard->pages = g_slist_append(wizard->pages, widget);
1438 page = create_page(wizard, _("Configuration finished"));
1440 wizard->pages = g_slist_append(wizard->pages, page);
1441 widget = stock_pixmap_widget(wizard->window,
1442 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1444 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1446 text = g_strdup(_("Claws Mail is now ready.\n\n"
1447 "Click Save to start."));
1448 widget = gtk_label_new(text);
1449 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1453 for (cur = wizard->pages; cur && cur->data; cur = cur->next) {
1454 gtk_notebook_append_page (GTK_NOTEBOOK(wizard->notebook),
1455 GTK_WIDGET(cur->data), NULL);
1458 g_signal_connect(G_OBJECT(wizard->window), "delete_event",
1459 G_CALLBACK(wizard_close_cb), wizard);
1460 gtk_widget_show_all (wizard->window);
1462 gtk_widget_hide(wizard->recv_imap_label);
1463 gtk_widget_hide(wizard->recv_imap_subdir);
1465 wizard_protocol_change(wizard, tmpl.recvtype);
1467 while (!wizard->finished)
1468 gtk_main_iteration();
1470 result = wizard->result;
1474 gtk_widget_show(mainwin->window);