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"
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 "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAM1BMVEUAAAAcJCI\n\
441 ONl1JUi0+Z4daY2NZciPabV9ykS5kj6Wsl2ybmZOBsMjZxK2wzN3Pzczs7OsCAGN0AAAAAXRSTlM\n\
442 AQObYZgAAAAFiS0dEAIgFHUgAAAIVSURBVEjH1ZbtlqMgDIaFECoGhPu/2s0b0Lais/NzN6d1OJ7\n\
443 3yReQzrL8B5Zy3rvl9At52Pf2tv1vSMjtYj8jaa8XUyI/yn3YD6sigj/2Tf5Bn069MIsTPHvx/t5\n\
444 /3rU/6JCIY3YwGe26r/cwUfE3cFe5T28L0K5rJAUHEeYAQxs8DHojjk3M9wECU4xxjXisI8RA0gy\n\
445 oczJZJOjxiTFZVTchAnIRJrgdmEGDyFfAI3UuG5FmYTkR9RDrIC4H0SqV4pzpEcUp0HNLjwBv+jA\n\
446 dikUE5g9iBvzmu3sH2oDk4lnHd829+2Q9gj6kDqDPg7hsGwBzH02fE3ZCt6ZHmlNKIMjMeRwra5I\n\
447 ecgNoBnLGPmzaHPJIwLY8Sq2M/tLUJfj0QcqmfVXAdLSStIYF8dzWjBBb2VgvDa4mO9oc651OiUo\n\
448 BEKbZokdPATF9E9oKAjQJcJOniaPXrVZRAnVWaqIyqRoNC8ZJvgCcW8XN39RqxVP1rS8Yd4WnCdN\n\
449 aRTo2jJRDbg3vtCpEUGffgDPhqKDaSuVqYtOplFIvIcx3HUI5/MuIWl6vKyBjNlqEru8hbFXqBPA\n\
450 5TpHGIUZOePeaIyzfQ/g9Xg0opU1AvdfXM9floYhv92pPAE96OZtkPV8eivgQi9RTfwPUU36I26n\n\
451 Hy+WuCJzAT7efMSeA1TNf2/VugDz+dN139xfA5ffxGZDD+MvcP/uvyB80wzZ76wbz8gAAAABJRU5\n\
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 3 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;
560 gint smtp_port, recv_port;
562 SSLType smtp_ssl_type, recv_ssl_type;
565 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(wizard->recv_type));
566 menuitem = gtk_menu_get_active(GTK_MENU(menu));
567 prefs_account->protocol = GPOINTER_TO_INT
568 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
571 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4 &&
572 !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)))) {
573 alertpanel_error(_("Please enter the mailbox name."));
574 g_free(prefs_account);
575 gtk_notebook_set_current_page (
576 GTK_NOTEBOOK(wizard->notebook),
582 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
583 mailbox_ok = setup_write_mailbox_path(wizard->mainwin,
585 GTK_ENTRY(wizard->mailbox_name)));
591 /* alertpanel done by setup_write_mailbox_path */
592 g_free(prefs_account);
593 gtk_notebook_set_current_page (
594 GTK_NOTEBOOK(wizard->notebook),
599 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->full_name)))
600 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->email)))) {
601 alertpanel_error(_("Please enter your name and email address."));
602 g_free(prefs_account);
603 gtk_notebook_set_current_page (
604 GTK_NOTEBOOK(wizard->notebook),
609 if (prefs_account->protocol != A_LOCAL) {
610 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)))
611 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
612 alertpanel_error(_("Please enter your receiving server "
614 g_free(prefs_account);
615 gtk_notebook_set_current_page (
616 GTK_NOTEBOOK(wizard->notebook),
621 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
622 alertpanel_error(_("Please enter your username."));
623 g_free(prefs_account);
624 gtk_notebook_set_current_page (
625 GTK_NOTEBOOK(wizard->notebook),
631 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)))) {
632 alertpanel_error(_("Please enter your SMTP server."));
633 g_free(prefs_account);
634 gtk_notebook_set_current_page (
635 GTK_NOTEBOOK(wizard->notebook),
640 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
641 if (prefs_account->protocol == A_LOCAL
642 && !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)))) {
643 alertpanel_error(_("Please enter your SMTP username."));
644 g_free(prefs_account);
645 gtk_notebook_set_current_page (
646 GTK_NOTEBOOK(wizard->notebook),
649 } /* if it's not local we'll use the reception server */
652 if (prefs_account->protocol != A_LOCAL)
653 prefs_account->account_name = g_strdup_printf("%s@%s",
654 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)),
655 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
657 prefs_account->account_name = g_strdup_printf("%s",
658 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
660 recv_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
661 smtp_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)));
663 if (prefs_account->protocol != A_LOCAL && strstr(recv_server, ":")) {
664 recv_port = atoi(strstr(recv_server, ":")+1);
665 *(strstr(recv_server, ":")) = '\0';
666 if (prefs_account->protocol == A_IMAP4) {
667 prefs_account->set_imapport = TRUE;
668 prefs_account->imapport = recv_port;
669 } else if (prefs_account->protocol == A_POP3) {
670 prefs_account->set_popport = TRUE;
671 prefs_account->popport = recv_port;
674 if (strstr(smtp_server, ":")) {
675 smtp_port = atoi(strstr(smtp_server, ":")+1);
676 *(strstr(smtp_server, ":")) = '\0';
677 prefs_account->set_smtpport = TRUE;
678 prefs_account->smtpport = smtp_port;
681 prefs_account->name = g_strdup(
682 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)));
683 prefs_account->address = g_strdup(
684 gtk_entry_get_text(GTK_ENTRY(wizard->email)));
685 prefs_account->organization = g_strdup(
686 gtk_entry_get_text(GTK_ENTRY(wizard->organization)));
687 prefs_account->smtp_server = g_strdup(smtp_server);
689 tmp = g_path_get_basename(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)));
690 prefs_account->inbox = g_strdup_printf("#mh/%s/inbox",
691 (!strcmp("Mail", gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name))))
694 prefs_account->local_inbox = g_strdup(prefs_account->inbox);
696 if (prefs_account->protocol != A_LOCAL)
697 prefs_account->recv_server = g_strdup(recv_server);
699 prefs_account->local_mbox = g_strdup(recv_server);
704 prefs_account->userid = g_strdup(
705 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)));
706 prefs_account->passwd = g_strdup(
707 gtk_entry_get_text(GTK_ENTRY(wizard->recv_password)));
709 prefs_account->smtp_userid = g_strdup(
710 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)));
711 prefs_account->smtp_passwd = g_strdup(
712 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_password)));
713 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
714 prefs_account->use_smtp_auth = TRUE;
718 smtp_ssl_type = SSL_NONE;
719 recv_ssl_type = SSL_NONE;
721 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl))) {
722 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls)))
723 smtp_ssl_type = SSL_STARTTLS;
725 smtp_ssl_type = SSL_TUNNEL;
727 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl))) {
728 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls)))
729 recv_ssl_type = SSL_STARTTLS;
731 recv_ssl_type = SSL_TUNNEL;
734 prefs_account->ssl_smtp = smtp_ssl_type;
736 if (prefs_account->protocol == A_IMAP4)
737 prefs_account->ssl_imap = recv_ssl_type;
739 prefs_account->ssl_pop = recv_ssl_type;
742 if (prefs_account->protocol == A_IMAP4) {
743 gchar *directory = gtk_editable_get_chars(
744 GTK_EDITABLE(wizard->recv_imap_subdir), 0, -1);
745 if (directory && strlen(directory)) {
746 prefs_account->imap_dir = g_strdup(directory);
748 prefs_account->imap_subsonly =
749 gtk_toggle_button_get_active(
750 GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn));
754 account_list = g_list_append(account_list, prefs_account);
755 prefs_account_write_config_all(account_list);
756 prefs_account_free(prefs_account);
757 account_read_config_all();
759 initialize_fonts(wizard);
760 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4)
761 write_welcome_email(wizard);
764 plugin_load_standard_plugins();
769 static GtkWidget* create_page (WizardWindow *wizard, const char * title)
777 vbox = gtk_vbox_new (FALSE, 6);
778 gtk_container_set_border_width (GTK_CONTAINER(vbox), 10);
780 /* create the titlebar */
781 hbox = gtk_hbox_new (FALSE, 12);
782 image = stock_pixmap_widget(wizard->window,
783 STOCK_PIXMAP_CLAWS_MAIL_ICON);
784 gtk_box_pack_start (GTK_BOX(hbox), image, FALSE, FALSE, 0);
785 title_string = g_strconcat ("<span size=\"xx-large\" weight=\"ultrabold\">", title ? title : "", "</span>", NULL);
786 w = gtk_label_new (title_string);
787 gtk_label_set_use_markup (GTK_LABEL(w), TRUE);
788 g_free (title_string);
789 gtk_box_pack_start (GTK_BOX(hbox), w, FALSE, FALSE, 0);
791 /* pack the titlebar */
792 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
794 /* pack the separator */
795 gtk_box_pack_start (GTK_BOX(vbox), gtk_hseparator_new(), FALSE, FALSE, 0);
798 w = gtk_alignment_new (0, 0, 0, 0);
799 gtk_widget_set_size_request (w, 0, 6);
800 gtk_box_pack_start (GTK_BOX(vbox), w, FALSE, FALSE, 0);
805 #define PACK_BOX(hbox,text,entry) { \
806 GtkWidget *label = gtk_label_new(text); \
807 gtk_label_set_use_markup(GTK_LABEL(label), TRUE); \
808 if (GTK_IS_MISC(label)) \
809 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); \
810 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); \
811 gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); \
814 static gchar *get_default_server(WizardWindow * wizard, const gchar *type)
816 if (!strcmp(type, "smtp")) {
817 if (!tmpl.smtpserver || !strlen(tmpl.smtpserver))
818 return g_strconcat(type, ".", tmpl.domain, NULL);
820 return g_strdup(tmpl.smtpserver);
822 if (!tmpl.recvserver || !strlen(tmpl.recvserver))
823 return g_strconcat(type, ".", tmpl.domain, NULL);
825 return g_strdup(tmpl.recvserver);
829 static gchar *get_default_account(WizardWindow * wizard)
831 gchar *result = NULL;
833 if (!tmpl.recvuser || !strlen(tmpl.recvuser)) {
834 result = gtk_editable_get_chars(
835 GTK_EDITABLE(wizard->email), 0, -1);
837 if (strstr(result, "@")) {
838 *(strstr(result,"@")) = '\0';
841 result = g_strdup(tmpl.recvuser);
846 static gchar *get_default_smtp_account(WizardWindow * wizard)
848 gchar *result = NULL;
850 if (!tmpl.smtpuser || !strlen(tmpl.smtpuser)) {
853 result = g_strdup(tmpl.smtpuser);
858 static void wizard_email_changed(GtkWidget *widget, gpointer data)
860 WizardWindow *wizard = (WizardWindow *)data;
861 RecvProtocol protocol;
863 protocol = GPOINTER_TO_INT
864 (g_object_get_data(G_OBJECT(wizard->recv_type), MENU_VAL_ID));
866 text = get_default_server(wizard, "smtp");
867 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
870 text = get_default_account(wizard);
871 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
874 if (protocol == A_POP3) {
875 text = get_default_server(wizard, "pop");
876 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
878 } else if (protocol == A_IMAP4) {
879 text = get_default_server(wizard, "imap");
880 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
882 } else if (protocol == A_LOCAL) {
883 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
888 static GtkWidget* user_page (WizardWindow * wizard)
890 GtkWidget *table = gtk_table_new(1,1, FALSE);
894 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
895 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
897 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
898 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
900 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
901 GTK_EXPAND|GTK_FILL, 0, 0, 0);
903 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
904 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
905 wizard->full_name = gtk_entry_new();
906 gtk_entry_set_text(GTK_ENTRY(wizard->full_name), tmpl.name?tmpl.name:"");
907 PACK_BOX(hbox, _("<span weight=\"bold\">Your name:</span>"),
910 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
911 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
912 wizard->email = gtk_entry_new();
913 gtk_entry_set_text(GTK_ENTRY(wizard->email), tmpl.email?tmpl.email:"");
914 PACK_BOX(hbox, _("<span weight=\"bold\">Your email address:</span>"),
917 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
918 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
919 wizard->organization = gtk_entry_new();
920 gtk_entry_set_text(GTK_ENTRY(wizard->organization), tmpl.organization?tmpl.organization:"");
921 PACK_BOX(hbox, _("Your organization:"), wizard->organization);
923 g_signal_connect(G_OBJECT(wizard->email), "changed",
924 G_CALLBACK(wizard_email_changed),
929 static GtkWidget* mailbox_page (WizardWindow * wizard)
931 GtkWidget *table = gtk_table_new(1,1, FALSE);
934 GtkTooltips *tips = gtk_tooltips_new();
936 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
937 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
939 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
940 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
942 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
943 GTK_EXPAND|GTK_FILL, 0, 0, 0);
945 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
946 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
947 wizard->mailbox_name = gtk_entry_new();
948 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), tmpl.mailbox?tmpl.mailbox:"");
950 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->mailbox_name,
951 _("You can also specify an absolute path, for example: "
952 "\"/home/john/Documents/Mail\""),
955 PACK_BOX(hbox, _("<span weight=\"bold\">Mailbox name:</span>"),
956 wizard->mailbox_name);
961 static void smtp_auth_changed (GtkWidget *btn, gpointer data)
963 WizardWindow *wizard = (WizardWindow *)data;
964 gboolean do_auth = gtk_toggle_button_get_active(
965 GTK_TOGGLE_BUTTON(wizard->smtp_auth));
966 gtk_widget_set_sensitive(wizard->smtp_username, do_auth);
967 gtk_widget_set_sensitive(wizard->smtp_username_label, do_auth);
968 gtk_widget_set_sensitive(wizard->smtp_password, do_auth);
969 gtk_widget_set_sensitive(wizard->smtp_password_label, do_auth);
972 static GtkWidget* smtp_page (WizardWindow * wizard)
974 GtkWidget *table = gtk_table_new(1, 1, FALSE);
977 GtkTooltips *tips = gtk_tooltips_new();
980 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
981 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
983 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
984 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
986 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
987 GTK_EXPAND|GTK_FILL, 0, 0, 0);
989 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
990 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
991 wizard->smtp_server = gtk_entry_new();
992 text = get_default_server(wizard, "smtp");
993 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
996 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->smtp_server,
997 _("You can specify the port number by appending it at the end: "
998 "\"mail.example.com:25\""),
1001 PACK_BOX(hbox, _("<span weight=\"bold\">SMTP server address:</span>"),
1002 wizard->smtp_server);
1005 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1006 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1007 wizard->smtp_auth = gtk_check_button_new_with_label(
1008 _("Use authentication"));
1009 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth),
1011 g_signal_connect(G_OBJECT(wizard->smtp_auth), "toggled",
1012 G_CALLBACK(smtp_auth_changed),
1014 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_auth, FALSE, FALSE, 0);
1016 text = get_default_smtp_account(wizard);
1018 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1019 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1020 wizard->smtp_username = gtk_entry_new();
1021 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_username), text);
1023 wizard->smtp_username_label = gtk_label_new(_("SMTP username:\n"
1024 "<span size=\"small\">(empty to use the same as receive)</span>"));
1025 gtk_label_set_use_markup(GTK_LABEL(wizard->smtp_username_label), TRUE);
1026 if (GTK_IS_MISC(wizard->smtp_username_label))
1027 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_username_label), 1, 0.5);
1028 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_username_label, FALSE, FALSE, 0);
1029 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_username, TRUE, TRUE, 0);
1031 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1032 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1033 wizard->smtp_password = gtk_entry_new();
1034 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_password), tmpl.smtppass?tmpl.smtppass:"");
1035 gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_password), FALSE);
1036 wizard->smtp_password_label = gtk_label_new(_("SMTP password:\n"
1037 "<span size=\"small\">(empty to use the same as receive)</span>"));
1038 gtk_label_set_use_markup(GTK_LABEL(wizard->smtp_password_label), TRUE);
1039 if (GTK_IS_MISC(wizard->smtp_password_label))
1040 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_password_label), 1, 0.5);
1041 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_password_label, FALSE, FALSE, 0);
1042 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_password, TRUE, TRUE, 0);
1044 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1045 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1046 wizard->smtp_use_ssl = gtk_check_button_new_with_label(
1047 _("Use SSL to connect to SMTP server"));
1048 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl),
1050 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_ssl, FALSE, FALSE, 0);
1052 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1053 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1054 wizard->smtp_use_tls = gtk_check_button_new_with_label(
1055 _("Use SSL via STARTTLS"));
1056 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls),
1058 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_tls, FALSE, FALSE, 0);
1059 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, wizard->smtp_use_tls);
1061 smtp_auth_changed(NULL, wizard);
1065 static void wizard_protocol_change(WizardWindow *wizard, RecvProtocol protocol)
1069 if (protocol == A_POP3) {
1070 text = get_default_server(wizard, "pop");
1071 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1072 gtk_widget_hide(wizard->recv_imap_label);
1073 gtk_widget_hide(wizard->recv_imap_subdir);
1074 gtk_widget_hide(wizard->subsonly_checkbtn);
1075 gtk_widget_show(wizard->recv_username);
1076 gtk_widget_show(wizard->recv_password);
1077 gtk_widget_show(wizard->recv_username_label);
1078 gtk_widget_show(wizard->recv_password_label);
1079 gtk_widget_hide(wizard->no_imap_warning);
1081 gtk_widget_show(wizard->recv_use_ssl);
1082 gtk_widget_show(wizard->recv_use_tls);
1084 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1085 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1086 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1088 } else if (protocol == A_IMAP4) {
1089 #ifdef HAVE_LIBETPAN
1090 text = get_default_server(wizard, "imap");
1091 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1092 gtk_widget_show(wizard->recv_imap_label);
1093 gtk_widget_show(wizard->recv_imap_subdir);
1094 gtk_widget_show(wizard->subsonly_checkbtn);
1095 gtk_widget_show(wizard->recv_username);
1096 gtk_widget_show(wizard->recv_password);
1097 gtk_widget_show(wizard->recv_username_label);
1098 gtk_widget_show(wizard->recv_password_label);
1099 gtk_widget_hide(wizard->no_imap_warning);
1101 gtk_widget_show(wizard->recv_use_ssl);
1102 gtk_widget_show(wizard->recv_use_tls);
1104 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1105 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1106 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1109 gtk_widget_hide(wizard->recv_imap_label);
1110 gtk_widget_hide(wizard->recv_imap_subdir);
1111 gtk_widget_hide(wizard->subsonly_checkbtn);
1112 gtk_widget_hide(wizard->recv_username);
1113 gtk_widget_hide(wizard->recv_password);
1114 gtk_widget_hide(wizard->recv_username_label);
1115 gtk_widget_hide(wizard->recv_password_label);
1116 gtk_widget_show(wizard->no_imap_warning);
1118 gtk_widget_hide(wizard->recv_use_ssl);
1119 gtk_widget_hide(wizard->recv_use_tls);
1121 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, FALSE);
1123 } else if (protocol == A_LOCAL) {
1124 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
1125 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Local mailbox:</span>"));
1126 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1127 gtk_widget_hide(wizard->no_imap_warning);
1128 gtk_widget_hide(wizard->recv_imap_label);
1129 gtk_widget_hide(wizard->recv_imap_subdir);
1130 gtk_widget_hide(wizard->subsonly_checkbtn);
1131 gtk_widget_hide(wizard->recv_username);
1132 gtk_widget_hide(wizard->recv_password);
1133 gtk_widget_hide(wizard->recv_username_label);
1134 gtk_widget_hide(wizard->recv_password_label);
1136 gtk_widget_hide(wizard->recv_use_ssl);
1137 gtk_widget_hide(wizard->recv_use_tls);
1139 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1143 static void wizard_protocol_changed(GtkMenuItem *menuitem, gpointer data)
1145 WizardWindow *wizard = (WizardWindow *)data;
1146 RecvProtocol protocol;
1147 protocol = GPOINTER_TO_INT
1148 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
1150 wizard_protocol_change(wizard, protocol);
1153 static GtkWidget* recv_page (WizardWindow * wizard)
1155 GtkWidget *table = gtk_table_new(1,1, FALSE);
1156 GtkWidget *menu = gtk_menu_new();
1157 GtkWidget *menuitem;
1158 GtkTooltips *tips = gtk_tooltips_new();
1164 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1165 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1167 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1168 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1170 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1171 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1173 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1174 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1175 wizard->recv_type = gtk_option_menu_new();
1177 MENUITEM_ADD (menu, menuitem, _("POP3"), A_POP3);
1178 g_signal_connect(G_OBJECT(menuitem), "activate",
1179 G_CALLBACK(wizard_protocol_changed),
1182 MENUITEM_ADD (menu, menuitem, _("IMAP"), A_IMAP4);
1183 g_signal_connect(G_OBJECT(menuitem), "activate",
1184 G_CALLBACK(wizard_protocol_changed),
1187 MENUITEM_ADD (menu, menuitem, _("Local mbox file"), A_LOCAL);
1188 g_signal_connect(G_OBJECT(menuitem), "activate",
1189 G_CALLBACK(wizard_protocol_changed),
1192 gtk_option_menu_set_menu (GTK_OPTION_MENU (wizard->recv_type), menu);
1193 switch(tmpl.recvtype) {
1206 gtk_option_menu_set_history(GTK_OPTION_MENU (wizard->recv_type), index);
1207 PACK_BOX(hbox, _("<span weight=\"bold\">Server type:</span>"),
1210 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1211 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1212 wizard->recv_server = gtk_entry_new();
1213 text = get_default_server(wizard, "pop");
1214 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1217 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->recv_server,
1218 _("You can specify the port number by appending it at the end: "
1219 "\"mail.example.com:110\""),
1222 wizard->recv_label = gtk_label_new(_("<span weight=\"bold\">Server address:</span>"));
1223 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1224 if (GTK_IS_MISC(wizard->recv_label))
1225 gtk_misc_set_alignment(GTK_MISC(wizard->recv_label), 1, 0.5);
1226 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_label, FALSE, FALSE, 0);
1227 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_server, TRUE, TRUE, 0);
1229 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1230 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1231 wizard->recv_username = gtk_entry_new();
1232 wizard->recv_username_label = gtk_label_new(_("<span weight=\"bold\">Username:</span>"));
1233 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_username_label), TRUE);
1234 if (GTK_IS_MISC(wizard->recv_username_label))
1235 gtk_misc_set_alignment(GTK_MISC(wizard->recv_username_label), 1, 0.5);
1236 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_username_label, FALSE, FALSE, 0);
1237 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_username, TRUE, TRUE, 0);
1239 text = get_default_account(wizard);
1240 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
1243 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1244 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1245 wizard->recv_password = gtk_entry_new();
1246 gtk_entry_set_text(GTK_ENTRY(wizard->recv_password), tmpl.recvpass?tmpl.recvpass:"");
1247 wizard->recv_password_label = gtk_label_new(_("Password:"));
1248 if (GTK_IS_MISC(wizard->recv_password_label))
1249 gtk_misc_set_alignment(GTK_MISC(wizard->recv_password_label), 1, 0.5);
1250 gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_password), FALSE);
1251 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_password_label, FALSE, FALSE, 0);
1252 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_password, TRUE, TRUE, 0);
1255 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1256 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1257 wizard->recv_use_ssl = gtk_check_button_new_with_label(
1258 _("Use SSL to connect to receiving server"));
1259 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl),
1261 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_ssl, FALSE, FALSE, 0);
1263 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1264 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1265 wizard->recv_use_tls = gtk_check_button_new_with_label(
1266 _("Use SSL via STARTTLS"));
1267 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls),
1269 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_tls, FALSE, FALSE, 0);
1270 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, wizard->recv_use_tls);
1272 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1273 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1274 wizard->recv_imap_subdir = gtk_entry_new();
1275 gtk_entry_set_text(GTK_ENTRY(wizard->recv_imap_subdir), tmpl.imapdir?tmpl.imapdir:"");
1276 wizard->recv_imap_label = gtk_label_new(_("IMAP server directory:"));
1277 if (GTK_IS_MISC(wizard->recv_imap_label))
1278 gtk_misc_set_alignment(GTK_MISC(wizard->recv_imap_label), 1, 0.5);
1279 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_label, FALSE, FALSE, 0);
1280 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_subdir, TRUE, TRUE, 0);
1282 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1283 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1284 wizard->subsonly_checkbtn = gtk_check_button_new_with_label(
1285 _("Show only subscribed folders"));
1286 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn),
1288 gtk_box_pack_start(GTK_BOX(hbox), wizard->subsonly_checkbtn, FALSE, FALSE, 0);
1290 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1291 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1292 wizard->no_imap_warning = gtk_label_new(_(
1293 "<span weight=\"bold\">Warning: this version of Claws Mail\n"
1294 "has been built without IMAP support.</span>"));
1295 gtk_label_set_use_markup(GTK_LABEL(wizard->no_imap_warning), TRUE);
1296 gtk_box_pack_start(GTK_BOX(hbox), wizard->no_imap_warning, FALSE, FALSE, 0);
1302 wizard_response_cb (GtkDialog * dialog, int response, gpointer data)
1304 WizardWindow * wizard = (WizardWindow *)data;
1305 int current_page, num_pages;
1306 GtkWidget *menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(wizard->recv_type));
1307 GtkWidget *menuitem = gtk_menu_get_active(GTK_MENU(menu));
1308 gint protocol = GPOINTER_TO_INT
1309 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
1310 gboolean skip_mailbox_page = FALSE;
1312 if (protocol == A_IMAP4) {
1313 skip_mailbox_page = TRUE;
1316 num_pages = g_slist_length(wizard->pages);
1318 current_page = gtk_notebook_get_current_page (
1319 GTK_NOTEBOOK(wizard->notebook));
1320 if (response == CANCEL)
1322 wizard->result = FALSE;
1323 wizard->finished = TRUE;
1324 gtk_widget_destroy (GTK_WIDGET(dialog));
1326 else if (response == FINISHED)
1328 if (!wizard_write_config(wizard)) {
1329 current_page = gtk_notebook_get_current_page (
1330 GTK_NOTEBOOK(wizard->notebook));
1333 wizard->result = TRUE;
1334 wizard->finished = TRUE;
1335 gtk_widget_destroy (GTK_WIDGET(dialog));
1339 if (response == GO_BACK)
1341 if (current_page > 0) {
1343 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1347 gtk_notebook_set_current_page (
1348 GTK_NOTEBOOK(wizard->notebook),
1352 else if (response == GO_FORWARD)
1354 if (current_page < (num_pages-1)) {
1356 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1360 gtk_notebook_set_current_page (
1361 GTK_NOTEBOOK(wizard->notebook),
1366 gtk_dialog_set_response_sensitive (dialog, GO_BACK,
1368 gtk_dialog_set_response_sensitive (dialog, GO_FORWARD,
1369 current_page < (num_pages - 1));
1370 if (current_page == (num_pages -1)) {
1371 gtk_dialog_set_response_sensitive (dialog, FINISHED, TRUE);
1372 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), FINISHED);
1374 gtk_dialog_set_response_sensitive (dialog, FINISHED, FALSE);
1375 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), GO_FORWARD);
1381 static gint wizard_close_cb(GtkWidget *widget, GdkEventAny *event,
1384 WizardWindow *wizard = (WizardWindow *)data;
1385 wizard->result = FALSE;
1386 wizard->finished = TRUE;
1391 #define PACK_WARNING(text) { \
1392 label = gtk_label_new(text); \
1393 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); \
1394 gtk_box_pack_end(GTK_BOX(widget), label, FALSE, FALSE, 0); \
1397 gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) {
1398 WizardWindow *wizard = g_new0(WizardWindow, 1);
1402 GtkWidget *scrolled_window;
1407 wizard->mainwin = mainwin;
1408 wizard->create_mailbox = create_mailbox;
1410 gtk_widget_hide(mainwin->window);
1412 wizard_read_defaults();
1414 wizard->window = gtk_dialog_new_with_buttons (_("Claws Mail Setup Wizard"),
1416 GTK_STOCK_GO_BACK, GO_BACK,
1417 GTK_STOCK_GO_FORWARD, GO_FORWARD,
1418 GTK_STOCK_SAVE, FINISHED,
1419 GTK_STOCK_CANCEL, CANCEL,
1422 g_signal_connect(wizard->window, "response",
1423 G_CALLBACK(wizard_response_cb), wizard);
1424 gtk_widget_realize(wizard->window);
1425 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window),
1427 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1429 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1431 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1433 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1436 wizard->notebook = gtk_notebook_new();
1437 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(wizard->notebook), FALSE);
1438 gtk_notebook_set_show_border(GTK_NOTEBOOK(wizard->notebook), FALSE);
1439 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(wizard->window)->vbox),
1440 wizard->notebook, TRUE, TRUE, 0);
1442 wizard->pages = NULL;
1444 /*welcome page: 0 */
1446 page = create_page(wizard, _("Welcome to Claws Mail"));
1448 wizard->pages = g_slist_append(wizard->pages, page);
1449 widget = stock_pixmap_widget(wizard->window,
1450 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1452 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1454 text = g_strdup(_("Welcome to the Claws Mail setup wizard.\n\n"
1455 "We will begin by defining some basic "
1456 "information about you and your most common "
1457 "mail options so that you can start to use "
1458 "Claws Mail in less than five minutes."));
1459 widget = gtk_label_new(text);
1460 gtk_label_set_line_wrap(GTK_LABEL(widget), TRUE);
1461 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1467 widget = create_page (wizard, _("About You"));
1468 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1469 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1470 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1471 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1473 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1475 PACK_WARNING(_("Bold fields must be completed"));
1477 wizard->pages = g_slist_append(wizard->pages, widget);
1479 /* recv+auth page: 2 */
1482 widget = create_page (wizard, _("Receiving mail"));
1483 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1484 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1485 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1486 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1488 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1490 PACK_WARNING(_("Bold fields must be completed"));
1492 wizard->pages = g_slist_append(wizard->pages, widget);
1497 widget = create_page (wizard, _("Sending mail"));
1498 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1499 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1500 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1501 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1503 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1505 PACK_WARNING(_("Bold fields must be completed"));
1507 wizard->pages = g_slist_append(wizard->pages, widget);
1509 /* mailbox page: 4 */
1510 if (create_mailbox) {
1513 widget = create_page (wizard, _("Saving mail on disk"));
1514 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1515 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1516 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1517 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1519 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1520 mailbox_page(wizard));
1521 PACK_WARNING(_("Bold fields must be completed"));
1523 wizard->pages = g_slist_append(wizard->pages, widget);
1529 page = create_page(wizard, _("Configuration finished"));
1531 wizard->pages = g_slist_append(wizard->pages, page);
1532 widget = stock_pixmap_widget(wizard->window,
1533 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1535 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1537 text = g_strdup(_("Claws Mail is now ready.\n"
1538 "Click Save to start."));
1539 widget = gtk_label_new(text);
1540 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1544 for (cur = wizard->pages; cur && cur->data; cur = cur->next) {
1545 gtk_notebook_append_page (GTK_NOTEBOOK(wizard->notebook),
1546 GTK_WIDGET(cur->data), NULL);
1549 g_signal_connect(G_OBJECT(wizard->window), "delete_event",
1550 G_CALLBACK(wizard_close_cb), wizard);
1551 gtk_widget_show_all (wizard->window);
1553 gtk_widget_hide(wizard->recv_imap_label);
1554 gtk_widget_hide(wizard->recv_imap_subdir);
1555 gtk_widget_hide(wizard->subsonly_checkbtn);
1557 wizard_protocol_change(wizard, tmpl.recvtype);
1559 while (!wizard->finished)
1560 gtk_main_iteration();
1562 result = wizard->result;
1566 gtk_widget_show(mainwin->window);