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 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 *subsonly_checkbtn;
111 GtkWidget *no_imap_warning;
113 GtkWidget *smtp_use_ssl;
114 GtkWidget *recv_use_ssl;
115 GtkWidget *smtp_use_tls;
116 GtkWidget *recv_use_tls;
119 gboolean create_mailbox;
125 typedef struct _AccountTemplate {
134 RecvProtocol recvtype;
146 static AccountTemplate tmpl;
148 static PrefParam template_params[] = {
149 {"name", "$USERNAME",
150 &tmpl.name, P_STRING, NULL, NULL, NULL},
151 {"domain", "$DEFAULTDOMAIN",
152 &tmpl.domain, P_STRING, NULL, NULL, NULL},
153 {"email", "$NAME_MAIL@$DOMAIN",
154 &tmpl.email, P_STRING, NULL, NULL, NULL},
156 &tmpl.organization, P_STRING, NULL, NULL, NULL},
157 {"smtpserver", "smtp.$DOMAIN",
158 &tmpl.smtpserver, P_STRING, NULL, NULL, NULL},
159 {"smtpauth", "FALSE",
160 &tmpl.smtpauth, P_BOOL, NULL, NULL, NULL},
162 &tmpl.smtpuser, P_STRING, NULL, NULL, NULL},
164 &tmpl.smtppass, P_STRING, NULL, NULL, NULL},
166 &tmpl.recvtype, P_INT, NULL, NULL, NULL},
167 {"recvserver", "pop.$DOMAIN",
168 &tmpl.recvserver, P_STRING, NULL, NULL, NULL},
169 {"recvuser", "$LOGIN",
170 &tmpl.recvuser, P_STRING, NULL, NULL, NULL},
172 &tmpl.recvpass, P_STRING, NULL, NULL, NULL},
174 &tmpl.imapdir, P_STRING, NULL, NULL, NULL},
176 &tmpl.subsonly, P_BOOL, NULL, NULL, NULL},
177 {"mboxfile", "/var/mail/$LOGIN",
178 &tmpl.mboxfile, P_STRING, NULL, NULL, NULL},
180 &tmpl.mailbox, P_STRING, NULL, NULL, NULL},
182 &tmpl.smtpssl, P_INT, NULL, NULL, NULL},
184 &tmpl.recvssl, P_INT, NULL, NULL, NULL},
185 {NULL, NULL, NULL, P_INT, NULL, NULL, NULL}
189 static gchar *accountrc_tmpl =
190 "[AccountTemplate]\n"
191 "#you can use $DEFAULTDOMAIN here\n"
192 "#domain must be defined before the variables that use it\n"
193 "#by default, domain is extracted from the hostname\n"
196 "#you can use $USERNAME for name (this is the default)\n"
199 "#you can use $LOGIN, $NAME_MAIL and $DOMAIN here \n"
200 "#$NAME_MAIL is the name without uppercase and with dots instead\n"
202 "#the default is $NAME_MAIL@$DOMAIN\n"
205 "#you can use $DOMAIN here\n"
206 "#the default organization is empty\n"
209 "#you can use $DOMAIN here \n"
210 "#the default is stmp.$DOMAIN\n"
213 "#Whether to use smtp authentication\n"
214 "#the default is 0 (no)\n"
218 "#you can use $LOGIN, $NAME_MAIL, $DOMAIN or $EMAIL here\n"
219 "#the default is empty (same as reception username)\n"
223 "#the default is empty (same as reception password)\n"
226 "#recvtype can be:\n"
229 "#5 for a local mbox file\n"
232 "#you can use $DOMAIN here \n"
233 "#the default is {pop,imap}.$DOMAIN\n"
236 "#you can use $LOGIN, $NAME_MAIL, $DOMAIN or $EMAIL here\n"
237 "#default is $LOGIN\n"
240 "#default is empty\n"
243 "#imap dir if imap (relative to the home on the server)\n"
244 "#default is empty\n"
247 "#show subscribed folders only, if imap\n"
251 "#mbox file if local\n"
252 "#you can use $LOGIN here\n"
253 "#default is /var/mail/$LOGIN\n"
256 "#mailbox name if pop3 or local\n"
257 "#relative path from the user's home\n"
258 "#default is \"Mail\"\n"
261 "#whether to use ssl on STMP connections\n"
262 "#default is 0, 1 is ssl, 2 is starttls\n"
265 "#whether to use ssl on pop or imap connections\n"
266 "#default is 0, 1 is ssl, 2 is starttls\n"
269 static gchar *wizard_get_default_domain_name(void)
271 static gchar *domain_name = NULL;
273 if (domain_name == NULL) {
274 domain_name = g_strdup(get_domain_name());
275 if (strchr(domain_name, '.') != strrchr(domain_name, '.')
276 && strlen(strchr(domain_name, '.')) > 6) {
277 gchar *tmp = g_strdup(strchr(domain_name, '.')+1);
285 static gchar *get_name_for_mail(void)
287 gchar *name = g_strdup(tmpl.name);
291 while(strstr(name, " "))
292 *strstr(name, " ")='.';
297 #define PARSE_DEFAULT(str) { \
298 gchar *tmp = NULL, *new = NULL; \
300 tmp = g_strdup(str); \
301 if (strstr(str, "$USERNAME")) { \
302 tmp = g_strdup(str); \
303 *strstr(tmp, "$USERNAME") = '\0'; \
304 new = g_strconcat(tmp, g_get_real_name(), \
305 strstr(str, "$USERNAME")+strlen("$USERNAME"), \
312 if (strstr(str, "$LOGIN")) { \
313 tmp = g_strdup(str); \
314 *strstr(tmp, "$LOGIN") = '\0'; \
315 new = g_strconcat(tmp, g_get_user_name(), \
316 strstr(str, "$LOGIN")+strlen("$LOGIN"), \
323 if (strstr(str, "$EMAIL")) { \
324 tmp = g_strdup(str); \
325 *strstr(tmp, "$EMAIL") = '\0'; \
326 new = g_strconcat(tmp, tmpl.email, \
327 strstr(str, "$EMAIL")+strlen("$EMAIL"), \
334 if (strstr(str, "$NAME_MAIL")) { \
335 tmp = g_strdup(str); \
336 *strstr(tmp, "$NAME_MAIL") = '\0'; \
337 new = g_strconcat(tmp, get_name_for_mail(), \
338 strstr(str, "$NAME_MAIL")+strlen("$NAME_MAIL"), \
345 if (strstr(str, "$DEFAULTDOMAIN")) { \
346 tmp = g_strdup(str); \
347 *strstr(tmp, "$DEFAULTDOMAIN") = '\0'; \
348 new = g_strconcat(tmp, wizard_get_default_domain_name(), \
349 strstr(str, "$DEFAULTDOMAIN")+strlen("$DEFAULTDOMAIN"), \
356 if (strstr(str, "$DOMAIN")) { \
357 tmp = g_strdup(str); \
358 *strstr(tmp, "$DOMAIN") = '\0'; \
359 new = g_strconcat(tmp, tmpl.domain, \
360 strstr(str, "$DOMAIN")+strlen("$DOMAIN"), \
369 static void wizard_read_defaults(void)
373 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, "accountrc.tmpl", NULL);
374 if (!is_file_exist(rcpath)) {
375 str_write_to_file(accountrc_tmpl, rcpath);
378 prefs_read_config(template_params, "AccountTemplate", rcpath, NULL);
380 PARSE_DEFAULT(tmpl.domain);
381 PARSE_DEFAULT(tmpl.name);
382 PARSE_DEFAULT(tmpl.email);
383 PARSE_DEFAULT(tmpl.organization);
384 PARSE_DEFAULT(tmpl.smtpserver);
385 PARSE_DEFAULT(tmpl.smtpuser);
386 PARSE_DEFAULT(tmpl.smtppass);
387 PARSE_DEFAULT(tmpl.recvserver);
388 PARSE_DEFAULT(tmpl.recvuser);
389 PARSE_DEFAULT(tmpl.recvpass);
390 PARSE_DEFAULT(tmpl.imapdir);
391 PARSE_DEFAULT(tmpl.mboxfile);
392 PARSE_DEFAULT(tmpl.mailbox);
395 "%s, %s, %s, %s, %s, %d, %s, %s, %s, %s, %s, %s, %d, %d\n",
396 tmpl.name,tmpl.domain,tmpl.email,tmpl.organization,tmpl.smtpserver,
397 tmpl.recvtype,tmpl.recvserver,tmpl.recvuser,tmpl.recvpass,
398 tmpl.imapdir,tmpl.mboxfile,tmpl.mailbox,tmpl.smtpssl,tmpl.recvssl);
403 static void initialize_fonts(WizardWindow *wizard)
405 GtkWidget *widget = wizard->email;
406 gint size = pango_font_description_get_size(
407 widget->style->font_desc)
411 tmp = g_strdup(prefs_common.textfont);
412 if (strrchr(tmp, ' ')) {
413 *(strrchr(tmp, ' ')) = '\0';
414 new = g_strdup_printf("%s %d", tmp, size);
415 g_free(prefs_common.textfont);
416 prefs_common.textfont = new;
420 tmp = g_strdup(prefs_common.smallfont);
421 if (strrchr(tmp, ' ')) {
422 *(strrchr(tmp, ' ')) = '\0';
423 new = g_strdup_printf("%s %d", tmp, size);
424 g_free(prefs_common.smallfont);
425 prefs_common.smallfont = new;
429 tmp = g_strdup(prefs_common.normalfont);
430 if (strrchr(tmp, ' ')) {
431 *(strrchr(tmp, ' ')) = '\0';
432 new = g_strdup_printf("%s %d", tmp, size);
433 g_free(prefs_common.normalfont);
434 prefs_common.normalfont = new;
439 #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"
440 #define FACE "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAJ1BMVEUTGBYnS3BCUE9KVC9acyRy\n\
441 kC6LjITZdGiumnF/p7yrq6jJzc/5+vf7GI+IAAACZ0lEQVQ4y5XUvW/UMBQA8LRl6VZ3QLqNNhVS\n\
442 YSnKFfExEg9lbJNK3QqVoiPHzgpFnAIs5Do9ORNDVOwuFVIgduZWOfuP4vlyybVVkeCdTpHe7z1/\n\
443 RHYc85dw/gEUxi2gS5ZlDKqbUDcpzarroMEOpDU2VtcAmFKlxn+t2VWQUNa1BmAlGrsCqWKMwetv\n\
444 MMbnFaixFn9rh47DFCuzDs6hxPyrxXuOA7WqWQcp2Fhx7gTOcga6bGHSS6FHCHFouLcMJptuaQbp\n\
445 +kff90P6Yn0TMpXN4DxNVz+FQZ8Gob8DGWSsBUIG23seDXwaBBnU0EJKVhNvqx/6aHTHrmMGhNw9\n\
446 XlqkgbdEX/gh1PUcVj84G4HnuHTXDQ+6Dk3IyqFL/UfEpXvj7RChaoEsUX9rYeGE7o83wp0WcCjS\n\
447 9/01AifhLrj0oINeuuJ53kIP+uF+7uL03eQpGWx5yzDu05fM3Z53AJDkvdODwvOfmbH3uOuwcLz+\n\
448 UBWLR8/N+MHnDsoeG4zecDl5Mhqa74NR90p+VEYmo+ioSEan8WnytANhDB8kX06TJFZJcowvfrZz\n\
449 XIMS2vxMIlHJfHMTRLOqC7TovlJFEVVGF7yafFVTkGgij+I851hZCHP5Tk8BWXObjuxhl2fm8pdu\n\
450 O0wluZDKHgJ91nVMKhuKN6cZQf9uQAs85lrjGDYmwmqzDynwClRKTCF/OwfDub0dQyzHxVUt6DzK\n\
451 eY5NseIxb8abwoVSMpZDhJyL9kJamGAxplC7izkHyaXM5/nZHFiNeRHfBFNwLjhOr+fAmw1G3OYl\n\
452 bwoijGGzD40pdeu3ROv/+Pr8AWPP4vVXbP0VAAAAAElFTkSuQmCC"
454 static void write_welcome_email(WizardWindow *wizard)
460 const gchar *mailbox = gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name));
461 Folder *folder = folder_find_from_path(mailbox);
462 FolderItem *inbox = folder ? folder->inbox:NULL;
463 gchar *file = get_tmp_file();
464 gchar enc_from_name[BUFFSIZE], enc_to_name[BUFFSIZE], enc_subject[BUFFSIZE];
466 get_rfc822_date(buf_date, sizeof(buf_date));
468 conv_encode_header_full(enc_subject, sizeof(enc_subject),
469 Q_("Welcome Mail Subject|Welcome to Claws Mail"),
470 strlen("Subject: "), FALSE, CS_INTERNAL);
471 conv_encode_header_full(enc_to_name, sizeof(enc_to_name),
472 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)),
473 strlen("To: "), TRUE, CS_INTERNAL);
474 conv_encode_header_full(enc_from_name, sizeof(enc_from_name),
475 _("The Claws Mail Team"),
476 strlen("From: "), TRUE, CS_INTERNAL);
478 head = g_strdup_printf(
485 "Content-Type: text/plain; charset=UTF-8\n",
489 gtk_entry_get_text(GTK_ENTRY(wizard->email)),
490 buf_date, enc_subject, XFACE, FACE);
491 body = g_strdup_printf(
493 "Welcome to Claws Mail\n"
494 "---------------------\n"
496 "Now that you have set up your account you can fetch your\n"
497 "mail by clicking the 'Get Mail' button at the left of the\n"
500 "Claws Mail has lots of extra features accessible via plugins,\n"
501 "like anti-spam filtering and learning (via the Bogofilter or\n"
502 "SpamAssassin plugins), privacy protection (via PGP/Mime), an RSS\n"
503 "aggregator, a calendar, and much more. You can load them from\n"
504 "the menu entry '/Configuration/Plugins'.\n"
506 "You can change your Account Preferences by using the menu\n"
507 "entry '/Configuration/Preferences for current account'\n"
508 "and change the general Preferences by using\n"
509 "'/Configuration/Preferences'.\n"
511 "You can find further information in the Claws Mail manual,\n"
512 "which can be accessed by using the menu entry '/Help/Manual'\n"
513 "or online at the URL given below.\n"
521 "Mailing Lists: <%s>\n"
525 "Claws Mail is free software, released under the terms\n"
526 "of the GNU General Public License, version 2 or later, as\n"
527 "published by the Free Software Foundation, 51 Franklin Street,\n"
528 "Fifth Floor, Boston, MA 02110-1301, USA. The license can be\n"
533 "If you wish to donate to the Claws Mail project you can do\n"
535 HOMEPAGE_URI, MANUAL_URI, FAQ_URI, THEMES_URI, MAILING_LIST_URI,
536 GPL_URI, DONATE_URI);
538 msg = g_strconcat(head, body, NULL);
540 if (inbox && inbox->total_msgs == 0
541 && str_write_to_file(msg, file) >= 0) {
542 MsgFlags flags = { MSG_UNREAD|MSG_NEW, 0};
543 folder_item_add_msg(inbox, file, &flags, FALSE);
552 static gboolean wizard_write_config(WizardWindow *wizard)
554 static gboolean mailbox_ok = FALSE;
555 PrefsAccount *prefs_account = prefs_account_new();
556 GList *account_list = NULL;
557 GtkWidget *menu, *menuitem;
558 gchar *smtp_server, *recv_server;
559 gint smtp_port, recv_port;
561 SSLType smtp_ssl_type, recv_ssl_type;
564 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(wizard->recv_type));
565 menuitem = gtk_menu_get_active(GTK_MENU(menu));
566 prefs_account->protocol = GPOINTER_TO_INT
567 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
570 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4 &&
571 !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)))) {
572 alertpanel_error(_("Please enter the mailbox name."));
573 g_free(prefs_account);
574 gtk_notebook_set_current_page (
575 GTK_NOTEBOOK(wizard->notebook),
581 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
582 mailbox_ok = setup_write_mailbox_path(wizard->mainwin,
584 GTK_ENTRY(wizard->mailbox_name)));
590 /* alertpanel done by setup_write_mailbox_path */
591 g_free(prefs_account);
592 gtk_notebook_set_current_page (
593 GTK_NOTEBOOK(wizard->notebook),
598 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->full_name)))
599 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->email)))) {
600 alertpanel_error(_("Please enter your name and email address."));
601 g_free(prefs_account);
602 gtk_notebook_set_current_page (
603 GTK_NOTEBOOK(wizard->notebook),
608 if (prefs_account->protocol != A_LOCAL) {
609 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)))
610 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
611 alertpanel_error(_("Please enter your receiving server "
613 g_free(prefs_account);
614 gtk_notebook_set_current_page (
615 GTK_NOTEBOOK(wizard->notebook),
620 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
621 alertpanel_error(_("Please enter your username."));
622 g_free(prefs_account);
623 gtk_notebook_set_current_page (
624 GTK_NOTEBOOK(wizard->notebook),
630 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)))) {
631 alertpanel_error(_("Please enter your SMTP server."));
632 g_free(prefs_account);
633 gtk_notebook_set_current_page (
634 GTK_NOTEBOOK(wizard->notebook),
639 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
640 if (prefs_account->protocol == A_LOCAL
641 && !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)))) {
642 alertpanel_error(_("Please enter your SMTP username."));
643 g_free(prefs_account);
644 gtk_notebook_set_current_page (
645 GTK_NOTEBOOK(wizard->notebook),
648 } /* if it's not local we'll use the reception server */
651 if (prefs_account->protocol != A_LOCAL)
652 prefs_account->account_name = g_strdup_printf("%s@%s",
653 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)),
654 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
656 prefs_account->account_name = g_strdup_printf("%s",
657 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
659 recv_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
660 smtp_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)));
662 if (prefs_account->protocol != A_LOCAL && strstr(recv_server, ":")) {
663 recv_port = atoi(strstr(recv_server, ":")+1);
664 *(strstr(recv_server, ":")) = '\0';
665 if (prefs_account->protocol == A_IMAP4) {
666 prefs_account->set_imapport = TRUE;
667 prefs_account->imapport = recv_port;
668 } else if (prefs_account->protocol == A_POP3) {
669 prefs_account->set_popport = TRUE;
670 prefs_account->popport = recv_port;
673 if (strstr(smtp_server, ":")) {
674 smtp_port = atoi(strstr(smtp_server, ":")+1);
675 *(strstr(smtp_server, ":")) = '\0';
676 prefs_account->set_smtpport = TRUE;
677 prefs_account->smtpport = smtp_port;
680 prefs_account->name = g_strdup(
681 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)));
682 prefs_account->address = g_strdup(
683 gtk_entry_get_text(GTK_ENTRY(wizard->email)));
684 prefs_account->organization = g_strdup(
685 gtk_entry_get_text(GTK_ENTRY(wizard->organization)));
686 prefs_account->smtp_server = g_strdup(smtp_server);
688 if (prefs_account->protocol != A_LOCAL)
689 prefs_account->recv_server = g_strdup(recv_server);
691 prefs_account->local_mbox = g_strdup(recv_server);
696 prefs_account->userid = g_strdup(
697 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)));
698 prefs_account->passwd = g_strdup(
699 gtk_entry_get_text(GTK_ENTRY(wizard->recv_password)));
701 prefs_account->smtp_userid = g_strdup(
702 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)));
703 prefs_account->smtp_passwd = g_strdup(
704 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_password)));
705 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
706 prefs_account->use_smtp_auth = TRUE;
710 smtp_ssl_type = SSL_NONE;
711 recv_ssl_type = SSL_NONE;
713 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl))) {
714 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls)))
715 smtp_ssl_type = SSL_STARTTLS;
717 smtp_ssl_type = SSL_TUNNEL;
719 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl))) {
720 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls)))
721 recv_ssl_type = SSL_STARTTLS;
723 recv_ssl_type = SSL_TUNNEL;
726 prefs_account->ssl_smtp = smtp_ssl_type;
728 if (prefs_account->protocol == A_IMAP4)
729 prefs_account->ssl_imap = recv_ssl_type;
731 prefs_account->ssl_pop = recv_ssl_type;
734 if (prefs_account->protocol == A_IMAP4) {
735 gchar *directory = gtk_editable_get_chars(
736 GTK_EDITABLE(wizard->recv_imap_subdir), 0, -1);
737 if (directory && strlen(directory)) {
738 prefs_account->imap_dir = g_strdup(directory);
740 prefs_account->imap_subsonly =
741 gtk_toggle_button_get_active(
742 GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn));
746 account_list = g_list_append(account_list, prefs_account);
747 prefs_account_write_config_all(account_list);
748 prefs_account_free(prefs_account);
749 account_read_config_all();
751 initialize_fonts(wizard);
752 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4)
753 write_welcome_email(wizard);
756 plugin_load_standard_plugins();
761 static GtkWidget* create_page (WizardWindow *wizard, const char * title)
769 vbox = gtk_vbox_new (FALSE, 6);
770 gtk_container_set_border_width (GTK_CONTAINER(vbox), 10);
772 /* create the titlebar */
773 hbox = gtk_hbox_new (FALSE, 12);
774 image = stock_pixmap_widget(wizard->window,
775 STOCK_PIXMAP_CLAWS_MAIL_ICON);
776 gtk_box_pack_start (GTK_BOX(hbox), image, FALSE, FALSE, 0);
777 title_string = g_strconcat ("<span size=\"xx-large\" weight=\"ultrabold\">", title ? title : "", "</span>", NULL);
778 w = gtk_label_new (title_string);
779 gtk_label_set_use_markup (GTK_LABEL(w), TRUE);
780 g_free (title_string);
781 gtk_box_pack_start (GTK_BOX(hbox), w, FALSE, FALSE, 0);
783 /* pack the titlebar */
784 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
786 /* pack the separator */
787 gtk_box_pack_start (GTK_BOX(vbox), gtk_hseparator_new(), FALSE, FALSE, 0);
790 w = gtk_alignment_new (0, 0, 0, 0);
791 gtk_widget_set_size_request (w, 0, 6);
792 gtk_box_pack_start (GTK_BOX(vbox), w, FALSE, FALSE, 0);
797 #define GTK_TABLE_ADD_ROW_AT(table,text,entry,i) { \
798 GtkWidget *label = gtk_label_new(text); \
799 gtk_table_attach(GTK_TABLE(table), label, \
800 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0); \
801 gtk_label_set_use_markup(GTK_LABEL(label), TRUE); \
802 if (GTK_IS_MISC(label)) \
803 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); \
804 gtk_table_attach(GTK_TABLE(table), entry, \
805 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0); \
808 static gchar *get_default_server(WizardWindow * wizard, const gchar *type)
810 if (!strcmp(type, "smtp")) {
811 if (!tmpl.smtpserver || !strlen(tmpl.smtpserver))
812 return g_strconcat(type, ".", tmpl.domain, NULL);
814 return g_strdup(tmpl.smtpserver);
816 if (!tmpl.recvserver || !strlen(tmpl.recvserver))
817 return g_strconcat(type, ".", tmpl.domain, NULL);
819 return g_strdup(tmpl.recvserver);
823 static gchar *get_default_account(WizardWindow * wizard)
825 gchar *result = NULL;
827 if (!tmpl.recvuser || !strlen(tmpl.recvuser)) {
828 result = gtk_editable_get_chars(
829 GTK_EDITABLE(wizard->email), 0, -1);
831 if (strstr(result, "@")) {
832 *(strstr(result,"@")) = '\0';
835 result = g_strdup(tmpl.recvuser);
840 static gchar *get_default_smtp_account(WizardWindow * wizard)
842 gchar *result = NULL;
844 if (!tmpl.smtpuser || !strlen(tmpl.smtpuser)) {
847 result = g_strdup(tmpl.smtpuser);
852 static void wizard_email_changed(GtkWidget *widget, gpointer data)
854 WizardWindow *wizard = (WizardWindow *)data;
855 RecvProtocol protocol;
857 protocol = GPOINTER_TO_INT
858 (g_object_get_data(G_OBJECT(wizard->recv_type), MENU_VAL_ID));
860 text = get_default_server(wizard, "smtp");
861 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
864 text = get_default_account(wizard);
865 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
868 if (protocol == A_POP3) {
869 text = get_default_server(wizard, "pop");
870 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
872 } else if (protocol == A_IMAP4) {
873 text = get_default_server(wizard, "imap");
874 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
876 } else if (protocol == A_LOCAL) {
877 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
882 static GtkWidget* user_page (WizardWindow * wizard)
884 GtkWidget *table = gtk_table_new(3,2, FALSE);
887 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
888 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
890 wizard->full_name = gtk_entry_new();
891 gtk_entry_set_text(GTK_ENTRY(wizard->full_name), tmpl.name?tmpl.name:"");
892 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">Your name:</span>"),
893 wizard->full_name, i); i++;
895 wizard->email = gtk_entry_new();
896 gtk_entry_set_text(GTK_ENTRY(wizard->email), tmpl.email?tmpl.email:"");
897 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">Your email address:</span>"),
898 wizard->email, i); i++;
900 wizard->organization = gtk_entry_new();
901 GTK_TABLE_ADD_ROW_AT(table, _("Your organization:"),
902 wizard->organization, i); i++;
903 gtk_entry_set_text(GTK_ENTRY(wizard->organization), tmpl.organization?tmpl.organization:"");
905 g_signal_connect(G_OBJECT(wizard->email), "changed",
906 G_CALLBACK(wizard_email_changed),
911 static GtkWidget* mailbox_page (WizardWindow * wizard)
913 GtkWidget *table = gtk_table_new(1,2, FALSE);
915 GtkTooltips *tips = gtk_tooltips_new();
917 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
918 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
920 wizard->mailbox_name = gtk_entry_new();
921 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), tmpl.mailbox?tmpl.mailbox:"");
923 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->mailbox_name,
924 _("You can also specify an absolute path, for example: "
925 "\"/home/john/Documents/Mail\""),
928 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">Mailbox name:</span>"),
929 wizard->mailbox_name, i); i++;
934 static void smtp_auth_changed (GtkWidget *btn, gpointer data)
936 WizardWindow *wizard = (WizardWindow *)data;
937 gboolean do_auth = gtk_toggle_button_get_active(
938 GTK_TOGGLE_BUTTON(wizard->smtp_auth));
939 gtk_widget_set_sensitive(wizard->smtp_username, do_auth);
940 gtk_widget_set_sensitive(wizard->smtp_username_label, do_auth);
941 gtk_widget_set_sensitive(wizard->smtp_password, do_auth);
942 gtk_widget_set_sensitive(wizard->smtp_password_label, do_auth);
945 static GtkWidget* smtp_page (WizardWindow * wizard)
948 GtkWidget *table = gtk_table_new(6, 2, FALSE);
950 GtkWidget *table = gtk_table_new(4, 2, FALSE);
952 GtkTooltips *tips = gtk_tooltips_new();
956 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
957 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
959 wizard->smtp_server = gtk_entry_new();
960 text = get_default_server(wizard, "smtp");
961 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
964 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->smtp_server,
965 _("You can specify the port number by appending it at the end: "
966 "\"mail.example.com:25\""),
969 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">SMTP server address:</span>"),
970 wizard->smtp_server, i); i++;
971 wizard->smtp_auth = gtk_check_button_new_with_label(
972 _("Use authentication"));
973 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth),
975 g_signal_connect(G_OBJECT(wizard->smtp_auth), "toggled",
976 G_CALLBACK(smtp_auth_changed),
978 gtk_table_attach(GTK_TABLE(table), wizard->smtp_auth,
979 0,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0); i++;
981 text = get_default_smtp_account(wizard);
983 wizard->smtp_username = gtk_entry_new();
984 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_username), text);
986 wizard->smtp_username_label = gtk_label_new(_("SMTP username:\n"
987 "<span size=\"small\">(empty to use the same as reception)</span>"));
988 gtk_label_set_use_markup(GTK_LABEL(wizard->smtp_username_label), TRUE);
989 gtk_table_attach(GTK_TABLE(table), wizard->smtp_username_label,
990 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
991 if (GTK_IS_MISC(wizard->smtp_username_label))
992 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_username_label), 1, 0.5);
993 gtk_table_attach(GTK_TABLE(table), wizard->smtp_username,
994 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
996 wizard->smtp_password = gtk_entry_new();
997 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_password), tmpl.smtppass?tmpl.smtppass:"");
998 gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_password), FALSE);
999 wizard->smtp_password_label = gtk_label_new(_("SMTP password:\n"
1000 "<span size=\"small\">(empty to use the same as reception)</span>"));
1001 gtk_label_set_use_markup(GTK_LABEL(wizard->smtp_password_label), TRUE);
1002 gtk_table_attach(GTK_TABLE(table), wizard->smtp_password_label,
1003 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1004 if (GTK_IS_MISC(wizard->smtp_password_label))
1005 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_password_label), 1, 0.5);
1006 gtk_table_attach(GTK_TABLE(table), wizard->smtp_password,
1007 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1010 wizard->smtp_use_ssl = gtk_check_button_new_with_label(
1011 _("Use SSL to connect to SMTP server"));
1012 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl),
1014 gtk_table_attach(GTK_TABLE(table), wizard->smtp_use_ssl,
1015 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1017 wizard->smtp_use_tls = gtk_check_button_new_with_label(
1018 _("Use SSL via STARTTLS"));
1019 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls),
1021 gtk_table_attach(GTK_TABLE(table), wizard->smtp_use_tls,
1022 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 16, 0);
1024 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, wizard->smtp_use_tls);
1026 smtp_auth_changed(NULL, wizard);
1030 static void wizard_protocol_change(WizardWindow *wizard, RecvProtocol protocol)
1034 if (protocol == A_POP3) {
1035 text = get_default_server(wizard, "pop");
1036 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1037 gtk_widget_hide(wizard->recv_imap_label);
1038 gtk_widget_hide(wizard->recv_imap_subdir);
1039 gtk_widget_hide(wizard->subsonly_checkbtn);
1040 gtk_widget_show(wizard->recv_username);
1041 gtk_widget_show(wizard->recv_password);
1042 gtk_widget_show(wizard->recv_username_label);
1043 gtk_widget_show(wizard->recv_password_label);
1044 gtk_widget_hide(wizard->no_imap_warning);
1046 gtk_widget_show(wizard->recv_use_ssl);
1047 gtk_widget_show(wizard->recv_use_tls);
1049 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1050 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1051 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1053 } else if (protocol == A_IMAP4) {
1054 #ifdef HAVE_LIBETPAN
1055 text = get_default_server(wizard, "imap");
1056 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1057 gtk_widget_show(wizard->recv_imap_label);
1058 gtk_widget_show(wizard->recv_imap_subdir);
1059 gtk_widget_show(wizard->subsonly_checkbtn);
1060 gtk_widget_show(wizard->recv_username);
1061 gtk_widget_show(wizard->recv_password);
1062 gtk_widget_show(wizard->recv_username_label);
1063 gtk_widget_show(wizard->recv_password_label);
1064 gtk_widget_hide(wizard->no_imap_warning);
1066 gtk_widget_show(wizard->recv_use_ssl);
1067 gtk_widget_show(wizard->recv_use_tls);
1069 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1070 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1071 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1074 gtk_widget_hide(wizard->recv_imap_label);
1075 gtk_widget_hide(wizard->recv_imap_subdir);
1076 gtk_widget_hide(wizard->subsonly_checkbtn);
1077 gtk_widget_hide(wizard->recv_username);
1078 gtk_widget_hide(wizard->recv_password);
1079 gtk_widget_hide(wizard->recv_username_label);
1080 gtk_widget_hide(wizard->recv_password_label);
1081 gtk_widget_show(wizard->no_imap_warning);
1083 gtk_widget_hide(wizard->recv_use_ssl);
1084 gtk_widget_hide(wizard->recv_use_tls);
1086 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, FALSE);
1088 } else if (protocol == A_LOCAL) {
1089 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
1090 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Local mailbox:</span>"));
1091 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1092 gtk_widget_hide(wizard->no_imap_warning);
1093 gtk_widget_hide(wizard->recv_imap_label);
1094 gtk_widget_hide(wizard->recv_imap_subdir);
1095 gtk_widget_hide(wizard->subsonly_checkbtn);
1096 gtk_widget_hide(wizard->recv_username);
1097 gtk_widget_hide(wizard->recv_password);
1098 gtk_widget_hide(wizard->recv_username_label);
1099 gtk_widget_hide(wizard->recv_password_label);
1101 gtk_widget_hide(wizard->recv_use_ssl);
1102 gtk_widget_hide(wizard->recv_use_tls);
1104 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1108 static void wizard_protocol_changed(GtkMenuItem *menuitem, gpointer data)
1110 WizardWindow *wizard = (WizardWindow *)data;
1111 RecvProtocol protocol;
1112 protocol = GPOINTER_TO_INT
1113 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
1115 wizard_protocol_change(wizard, protocol);
1118 static GtkWidget* recv_page (WizardWindow * wizard)
1121 GtkWidget *table = gtk_table_new(8,2, FALSE);
1123 GtkWidget *table = gtk_table_new(6,2, FALSE);
1125 GtkWidget *menu = gtk_menu_new();
1126 GtkWidget *menuitem;
1127 GtkTooltips *tips = gtk_tooltips_new();
1132 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1133 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1135 wizard->recv_type = gtk_option_menu_new();
1137 MENUITEM_ADD (menu, menuitem, _("POP3"), A_POP3);
1138 g_signal_connect(G_OBJECT(menuitem), "activate",
1139 G_CALLBACK(wizard_protocol_changed),
1142 MENUITEM_ADD (menu, menuitem, _("IMAP"), A_IMAP4);
1143 g_signal_connect(G_OBJECT(menuitem), "activate",
1144 G_CALLBACK(wizard_protocol_changed),
1147 MENUITEM_ADD (menu, menuitem, _("Local mbox file"), A_LOCAL);
1148 g_signal_connect(G_OBJECT(menuitem), "activate",
1149 G_CALLBACK(wizard_protocol_changed),
1152 gtk_option_menu_set_menu (GTK_OPTION_MENU (wizard->recv_type), menu);
1153 switch(tmpl.recvtype) {
1166 gtk_option_menu_set_history(GTK_OPTION_MENU (wizard->recv_type), index);
1167 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">Server type:</span>"),
1168 wizard->recv_type, i); i++;
1170 wizard->recv_server = gtk_entry_new();
1171 text = get_default_server(wizard, "pop");
1172 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1175 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->recv_server,
1176 _("You can specify the port number by appending it at the end: "
1177 "\"mail.example.com:110\""),
1180 wizard->recv_label = gtk_label_new(_("<span weight=\"bold\">Server address:</span>"));
1181 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1182 gtk_table_attach(GTK_TABLE(table), wizard->recv_label,
1183 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1184 if (GTK_IS_MISC(wizard->recv_label))
1185 gtk_misc_set_alignment(GTK_MISC(wizard->recv_label), 1, 0.5);
1186 gtk_table_attach(GTK_TABLE(table), wizard->recv_server,
1187 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1190 wizard->recv_username = gtk_entry_new();
1191 wizard->recv_username_label = gtk_label_new(_("<span weight=\"bold\">Username:</span>"));
1192 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_username_label), TRUE);
1193 gtk_table_attach(GTK_TABLE(table), wizard->recv_username_label,
1194 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1195 if (GTK_IS_MISC(wizard->recv_username_label))
1196 gtk_misc_set_alignment(GTK_MISC(wizard->recv_username_label), 1, 0.5);
1197 gtk_table_attach(GTK_TABLE(table), wizard->recv_username,
1198 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1201 text = get_default_account(wizard);
1202 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
1205 wizard->recv_password = gtk_entry_new();
1206 gtk_entry_set_text(GTK_ENTRY(wizard->recv_password), tmpl.recvpass?tmpl.recvpass:"");
1207 wizard->recv_password_label = gtk_label_new(_("Password:"));
1208 gtk_table_attach(GTK_TABLE(table), wizard->recv_password_label,
1209 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1210 if (GTK_IS_MISC(wizard->recv_password_label))
1211 gtk_misc_set_alignment(GTK_MISC(wizard->recv_password_label), 1, 0.5);
1212 gtk_table_attach(GTK_TABLE(table), wizard->recv_password,
1213 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1214 gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_password), FALSE);
1217 wizard->recv_imap_subdir = gtk_entry_new();
1218 gtk_entry_set_text(GTK_ENTRY(wizard->recv_imap_subdir), tmpl.imapdir?tmpl.imapdir:"");
1219 wizard->recv_imap_label = gtk_label_new(_("IMAP server directory:"));
1221 gtk_table_attach(GTK_TABLE(table), wizard->recv_imap_label,
1222 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1223 if (GTK_IS_MISC(wizard->recv_imap_label))
1224 gtk_misc_set_alignment(GTK_MISC(wizard->recv_imap_label), 1, 0.5);
1225 gtk_table_attach(GTK_TABLE(table), wizard->recv_imap_subdir,
1226 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1230 wizard->subsonly_checkbtn = gtk_check_button_new_with_label(
1231 _("Show only subscribed folders"));
1232 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn),
1234 gtk_table_attach(GTK_TABLE(table), wizard->subsonly_checkbtn,
1235 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1240 wizard->no_imap_warning = gtk_label_new(_(
1241 "<span weight=\"bold\">Warning: this version of Claws Mail\n"
1242 "has been built without IMAP support.</span>"));
1243 gtk_label_set_use_markup(GTK_LABEL(wizard->no_imap_warning), TRUE);
1244 gtk_table_attach(GTK_TABLE(table), wizard->no_imap_warning,
1245 0,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1247 wizard->recv_use_ssl = gtk_check_button_new_with_label(
1248 _("Use SSL to connect to receiving server"));
1249 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl),
1251 gtk_table_attach(GTK_TABLE(table), wizard->recv_use_ssl,
1252 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1254 wizard->recv_use_tls = gtk_check_button_new_with_label(
1255 _("Use SSL via STARTTLS"));
1256 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls),
1258 gtk_table_attach(GTK_TABLE(table), wizard->recv_use_tls,
1259 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 16, 0);
1261 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, wizard->recv_use_tls);
1267 wizard_response_cb (GtkDialog * dialog, int response, gpointer data)
1269 WizardWindow * wizard = (WizardWindow *)data;
1270 int current_page, num_pages;
1271 GtkWidget *menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(wizard->recv_type));
1272 GtkWidget *menuitem = gtk_menu_get_active(GTK_MENU(menu));
1273 gint protocol = GPOINTER_TO_INT
1274 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
1275 gboolean skip_mailbox_page = FALSE;
1277 if (protocol == A_IMAP4) {
1278 skip_mailbox_page = TRUE;
1281 num_pages = g_slist_length(wizard->pages);
1283 current_page = gtk_notebook_get_current_page (
1284 GTK_NOTEBOOK(wizard->notebook));
1285 if (response == CANCEL)
1287 wizard->result = FALSE;
1288 wizard->finished = TRUE;
1289 gtk_widget_destroy (GTK_WIDGET(dialog));
1291 else if (response == FINISHED)
1293 if (!wizard_write_config(wizard)) {
1294 current_page = gtk_notebook_get_current_page (
1295 GTK_NOTEBOOK(wizard->notebook));
1298 wizard->result = TRUE;
1299 wizard->finished = TRUE;
1300 gtk_widget_destroy (GTK_WIDGET(dialog));
1304 if (response == GO_BACK)
1306 if (current_page > 0) {
1308 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1312 gtk_notebook_set_current_page (
1313 GTK_NOTEBOOK(wizard->notebook),
1317 else if (response == GO_FORWARD)
1319 if (current_page < (num_pages-1)) {
1321 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1325 gtk_notebook_set_current_page (
1326 GTK_NOTEBOOK(wizard->notebook),
1331 gtk_dialog_set_response_sensitive (dialog, GO_BACK,
1333 gtk_dialog_set_response_sensitive (dialog, GO_FORWARD,
1334 current_page < (num_pages - 1));
1335 gtk_dialog_set_response_sensitive (dialog, FINISHED,
1336 current_page == (num_pages - 1));
1340 static gint wizard_close_cb(GtkWidget *widget, GdkEventAny *event,
1343 WizardWindow *wizard = (WizardWindow *)data;
1344 wizard->result = FALSE;
1345 wizard->finished = TRUE;
1350 #define PACK_WARNING(text) { \
1351 label = gtk_label_new(text); \
1352 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); \
1353 gtk_box_pack_end(GTK_BOX(widget), label, FALSE, FALSE, 0); \
1356 gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) {
1357 WizardWindow *wizard = g_new0(WizardWindow, 1);
1365 wizard->mainwin = mainwin;
1366 wizard->create_mailbox = create_mailbox;
1368 gtk_widget_hide(mainwin->window);
1370 wizard_read_defaults();
1372 wizard->window = gtk_dialog_new_with_buttons (_("Claws Mail Setup Wizard"),
1374 GTK_STOCK_GO_BACK, GO_BACK,
1375 GTK_STOCK_GO_FORWARD, GO_FORWARD,
1376 GTK_STOCK_SAVE, FINISHED,
1377 GTK_STOCK_CANCEL, CANCEL,
1380 g_signal_connect(wizard->window, "response",
1381 G_CALLBACK(wizard_response_cb), wizard);
1382 gtk_widget_realize(wizard->window);
1383 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window),
1385 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1387 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1389 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1391 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1394 wizard->notebook = gtk_notebook_new();
1395 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(wizard->notebook), FALSE);
1396 gtk_notebook_set_show_border(GTK_NOTEBOOK(wizard->notebook), FALSE);
1397 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(wizard->window)->vbox),
1398 wizard->notebook, TRUE, TRUE, 0);
1400 wizard->pages = NULL;
1402 /*welcome page: 0 */
1404 page = create_page(wizard, _("Welcome to Claws Mail"));
1406 wizard->pages = g_slist_append(wizard->pages, page);
1407 widget = stock_pixmap_widget(wizard->window,
1408 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1410 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1412 text = g_strdup(_("Welcome to the Claws Mail setup wizard.\n\n"
1413 "We will begin by defining some basic "
1414 "information about you and your most common "
1415 "mail options so that you can start to use "
1416 "Claws Mail in less than five minutes."));
1417 widget = gtk_label_new(text);
1418 gtk_label_set_line_wrap(GTK_LABEL(widget), TRUE);
1419 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1425 widget = create_page (wizard, _("About You"));
1426 gtk_box_pack_start (GTK_BOX(widget), user_page(wizard), FALSE, FALSE, 0);
1427 PACK_WARNING(_("Bold fields must be completed"));
1429 wizard->pages = g_slist_append(wizard->pages, widget);
1431 /* recv+auth page: 2 */
1434 widget = create_page (wizard, _("Receiving mail"));
1435 gtk_box_pack_start (GTK_BOX(widget), recv_page(wizard), FALSE, FALSE, 0);
1436 PACK_WARNING(_("Bold fields must be completed"));
1438 wizard->pages = g_slist_append(wizard->pages, widget);
1443 widget = create_page (wizard, _("Sending mail"));
1444 gtk_box_pack_start (GTK_BOX(widget), smtp_page(wizard), FALSE, FALSE, 0);
1445 PACK_WARNING(_("Bold fields must be completed"));
1447 wizard->pages = g_slist_append(wizard->pages, widget);
1449 /* mailbox page: 4 */
1450 if (create_mailbox) {
1453 widget = create_page (wizard, _("Saving mail on disk"));
1454 gtk_box_pack_start (GTK_BOX(widget), mailbox_page(wizard), FALSE, FALSE, 0);
1455 PACK_WARNING(_("Bold fields must be completed"));
1457 wizard->pages = g_slist_append(wizard->pages, widget);
1463 page = create_page(wizard, _("Configuration finished"));
1465 wizard->pages = g_slist_append(wizard->pages, page);
1466 widget = stock_pixmap_widget(wizard->window,
1467 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1469 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1471 text = g_strdup(_("Claws Mail is now ready.\n\n"
1472 "Click Save to start."));
1473 widget = gtk_label_new(text);
1474 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1478 for (cur = wizard->pages; cur && cur->data; cur = cur->next) {
1479 gtk_notebook_append_page (GTK_NOTEBOOK(wizard->notebook),
1480 GTK_WIDGET(cur->data), NULL);
1483 g_signal_connect(G_OBJECT(wizard->window), "delete_event",
1484 G_CALLBACK(wizard_close_cb), wizard);
1485 gtk_widget_show_all (wizard->window);
1487 gtk_widget_hide(wizard->recv_imap_label);
1488 gtk_widget_hide(wizard->recv_imap_subdir);
1489 gtk_widget_hide(wizard->subsonly_checkbtn);
1491 wizard_protocol_change(wizard, tmpl.recvtype);
1493 while (!wizard->finished)
1494 gtk_main_iteration();
1496 result = wizard->result;
1500 gtk_widget_show(mainwin->window);