2 * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2015 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/>.
22 #include "claws-features.h"
28 #include <glib/gi18n.h>
29 #include <gdk/gdkkeysyms.h>
41 #include "prefs_account.h"
42 #include "mainwindow.h"
43 #include "stock_pixmap.h"
46 #include "alertpanel.h"
51 #include "prefs_common.h"
62 int WELCOME_PAGE = -1;
66 int MAILBOX_PAGE = -1;
79 GtkWidget *organization;
81 GtkWidget *mailbox_name;
82 GtkWidget *mailbox_label;
84 GtkWidget *smtp_server;
86 GtkWidget *smtp_username;
87 GtkWidget *smtp_password;
88 GtkWidget *smtp_username_label;
89 GtkWidget *smtp_password_label;
92 GtkWidget *recv_label;
93 GtkWidget *recv_server;
94 GtkWidget *recv_username;
95 GtkWidget *recv_password;
96 GtkWidget *recv_username_label;
97 GtkWidget *recv_password_label;
98 GtkWidget *recv_imap_label;
99 GtkWidget *recv_imap_subdir;
100 GtkWidget *subsonly_checkbtn;
101 GtkWidget *no_imap_warning;
103 GtkWidget *smtp_use_ssl;
104 GtkWidget *recv_use_ssl;
105 GtkWidget *smtp_use_tls;
106 GtkWidget *recv_use_tls;
107 GtkWidget *smtp_ssl_cert_file;
108 GtkWidget *recv_ssl_cert_file;
109 GtkWidget *smtp_ssl_cert_pass;
110 GtkWidget *recv_ssl_cert_pass;
111 GtkWidget *smtp_cert_table;
112 GtkWidget *recv_cert_table;
114 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
115 GtkWidget *auto_configure_lbl;
116 GtkWidget *auto_configure_btn;
117 GtkWidget *auto_configure_cancel_btn;
119 gboolean create_mailbox;
125 typedef struct _AccountTemplate {
134 RecvProtocol recvtype;
146 gchar *smtpssl_cert_pass;
147 gchar *recvssl_cert_pass;
150 static AccountTemplate tmpl;
152 static PrefParam template_params[] = {
153 {"name", "$USERNAME",
154 &tmpl.name, P_STRING, NULL, NULL, NULL},
155 {"domain", "$DEFAULTDOMAIN",
156 &tmpl.domain, P_STRING, NULL, NULL, NULL},
157 {"email", "$NAME_MAIL@$DOMAIN",
158 &tmpl.email, P_STRING, NULL, NULL, NULL},
160 &tmpl.organization, P_STRING, NULL, NULL, NULL},
161 {"smtpserver", "smtp.$DOMAIN",
162 &tmpl.smtpserver, P_STRING, NULL, NULL, NULL},
163 {"smtpauth", "FALSE",
164 &tmpl.smtpauth, P_BOOL, NULL, NULL, NULL},
166 &tmpl.smtpuser, P_STRING, NULL, NULL, NULL},
168 &tmpl.smtppass, P_STRING, NULL, NULL, NULL},
170 &tmpl.recvtype, P_INT, NULL, NULL, NULL},
171 {"recvserver", "pop.$DOMAIN",
172 &tmpl.recvserver, P_STRING, NULL, NULL, NULL},
173 {"recvuser", "$LOGIN",
174 &tmpl.recvuser, P_STRING, NULL, NULL, NULL},
176 &tmpl.recvpass, P_STRING, NULL, NULL, NULL},
178 &tmpl.imapdir, P_STRING, NULL, NULL, NULL},
180 &tmpl.subsonly, P_BOOL, NULL, NULL, NULL},
181 {"mboxfile", "/var/mail/$LOGIN",
182 &tmpl.mboxfile, P_STRING, NULL, NULL, NULL},
184 &tmpl.mailbox, P_STRING, NULL, NULL, NULL},
186 &tmpl.smtpssl, P_INT, NULL, NULL, NULL},
188 &tmpl.recvssl, P_INT, NULL, NULL, NULL},
190 &tmpl.smtpssl_cert, P_STRING, NULL, NULL, NULL},
192 &tmpl.recvssl_cert, P_STRING, NULL, NULL, NULL},
193 {"smtpssl_cert_pass", "",
194 &tmpl.smtpssl_cert, P_STRING, NULL, NULL, NULL},
195 {"recvssl_cert_pass", "",
196 &tmpl.recvssl_cert, P_STRING, NULL, NULL, NULL},
197 {NULL, NULL, NULL, P_INT, NULL, NULL, NULL}
201 static gchar *accountrc_tmpl =
202 "[AccountTemplate]\n"
203 "#you can use $DEFAULTDOMAIN here\n"
204 "#domain must be defined before the variables that use it\n"
205 "#by default, domain is extracted from the hostname\n"
208 "#you can use $USERNAME for name (this is the default)\n"
211 "#you can use $LOGIN, $NAME_MAIL and $DOMAIN here \n"
212 "#$NAME_MAIL is the name without uppercase and with dots instead\n"
214 "#the default is $NAME_MAIL@$DOMAIN\n"
217 "#you can use $DOMAIN here\n"
218 "#the default organization is empty\n"
221 "#you can use $DOMAIN here \n"
222 "#the default is smtp.$DOMAIN\n"
225 "#Whether to use smtp authentication\n"
226 "#the default is 0 (no)\n"
230 "#you can use $LOGIN, $NAME_MAIL, $DOMAIN or $EMAIL here\n"
231 "#the default is empty (same as reception username)\n"
235 "#the default is empty (same as reception password)\n"
238 "#recvtype can be:\n"
241 "#5 for a local mbox file\n"
244 "#you can use $DOMAIN here \n"
245 "#the default is {pop,imap}.$DOMAIN\n"
248 "#you can use $LOGIN, $NAME_MAIL, $DOMAIN or $EMAIL here\n"
249 "#default is $LOGIN\n"
252 "#default is empty\n"
255 "#imap dir if imap (relative to the home on the server)\n"
256 "#default is empty\n"
259 "#show subscribed folders only, if imap\n"
263 "#mbox file if local\n"
264 "#you can use $LOGIN here\n"
265 "#default is /var/mail/$LOGIN\n"
268 "#mailbox name if pop3 or local\n"
269 "#relative path from the user's home\n"
270 "#default is \"Mail\"\n"
273 "#whether to use ssl on smtp connections\n"
274 "#default is 0, 1 is ssl, 2 is starttls\n"
277 "#whether to use ssl on pop or imap connections\n"
278 "#default is 0, 1 is ssl, 2 is starttls\n"
281 "#SSL client certificate path for SMTP\n"
282 "#default is empty (no certificate)\n"
285 "#SSL client certificate path for POP/IMAP\n"
286 "#default is empty (no certificate)\n"
289 "#SSL client certificate password for SMTP\n"
290 "#default is empty (no password)\n"
291 "#smtpssl_cert_pass=\n"
293 "#SSL client certificate password for POP/IMAP\n"
294 "#default is empty (no password)\n"
295 "#recvssl_cert_pass=\n"
298 static gchar *wizard_get_default_domain_name(void)
300 static gchar *domain_name = NULL;
302 if (domain_name == NULL) {
303 domain_name = g_strdup(get_domain_name());
304 if (strchr(domain_name, '.') != NULL
305 && strchr(domain_name, '.') != strrchr(domain_name, '.')
306 && strlen(strchr(domain_name, '.')) > 6) {
307 gchar *tmp = g_strdup(strchr(domain_name, '.')+1);
315 static gchar *get_name_for_mail(void)
318 if (tmpl.name == NULL)
320 name = g_utf8_strdown(tmpl.name, -1);
321 while(strstr(name, " "))
322 *strstr(name, " ")='.';
327 #define PARSE_DEFAULT(str) { \
328 gchar *tmp = NULL, *new = NULL; \
330 if (strstr(str, "$USERNAME")) { \
331 tmp = g_strdup(str); \
332 *strstr(tmp, "$USERNAME") = '\0'; \
333 new = g_strconcat(tmp, g_get_real_name(), \
334 strstr(str, "$USERNAME")+strlen("$USERNAME"), \
341 if (strstr(str, "$LOGIN")) { \
342 tmp = g_strdup(str); \
343 *strstr(tmp, "$LOGIN") = '\0'; \
344 new = g_strconcat(tmp, g_get_user_name(), \
345 strstr(str, "$LOGIN")+strlen("$LOGIN"), \
352 if (strstr(str, "$EMAIL")) { \
353 tmp = g_strdup(str); \
354 *strstr(tmp, "$EMAIL") = '\0'; \
355 new = g_strconcat(tmp, tmpl.email, \
356 strstr(str, "$EMAIL")+strlen("$EMAIL"), \
363 if (strstr(str, "$NAME_MAIL")) { \
364 tmp = g_strdup(str); \
365 *strstr(tmp, "$NAME_MAIL") = '\0'; \
366 new = g_strconcat(tmp, get_name_for_mail(), \
367 strstr(str, "$NAME_MAIL")+strlen("$NAME_MAIL"), \
374 if (strstr(str, "$DEFAULTDOMAIN")) { \
375 tmp = g_strdup(str); \
376 *strstr(tmp, "$DEFAULTDOMAIN") = '\0'; \
377 new = g_strconcat(tmp, wizard_get_default_domain_name(), \
378 strstr(str, "$DEFAULTDOMAIN")+strlen("$DEFAULTDOMAIN"), \
385 if (strstr(str, "$DOMAIN")) { \
386 tmp = g_strdup(str); \
387 *strstr(tmp, "$DOMAIN") = '\0'; \
388 new = g_strconcat(tmp, tmpl.domain, \
389 strstr(str, "$DOMAIN")+strlen("$DOMAIN"), \
398 static void wizard_read_defaults(void)
402 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, "accountrc.tmpl", NULL);
403 if (!is_file_exist(rcpath)) {
404 str_write_to_file(accountrc_tmpl, rcpath);
407 prefs_read_config(template_params, "AccountTemplate", rcpath, NULL);
409 PARSE_DEFAULT(tmpl.domain);
410 PARSE_DEFAULT(tmpl.name);
411 PARSE_DEFAULT(tmpl.email);
412 PARSE_DEFAULT(tmpl.organization);
413 PARSE_DEFAULT(tmpl.smtpserver);
414 PARSE_DEFAULT(tmpl.smtpuser);
415 PARSE_DEFAULT(tmpl.smtppass);
416 PARSE_DEFAULT(tmpl.recvserver);
417 PARSE_DEFAULT(tmpl.recvuser);
418 PARSE_DEFAULT(tmpl.recvpass);
419 PARSE_DEFAULT(tmpl.imapdir);
420 PARSE_DEFAULT(tmpl.mboxfile);
421 PARSE_DEFAULT(tmpl.mailbox);
424 "%s, %s, %s, %s, %s, %d, %s, %s, %s, %s, %s, %s, %d, %d\n",
425 tmpl.name,tmpl.domain,tmpl.email,tmpl.organization,tmpl.smtpserver,
426 tmpl.recvtype,tmpl.recvserver,tmpl.recvuser,tmpl.recvpass,
427 tmpl.imapdir,tmpl.mboxfile,tmpl.mailbox,tmpl.smtpssl,tmpl.recvssl);
432 static void initialize_fonts(WizardWindow *wizard)
434 GtkWidget *widget = wizard->email;
435 gint size = pango_font_description_get_size(
436 gtk_widget_get_style(widget)->font_desc)
440 PangoFontDescription *bold_desc;
441 gchar *curfont = pango_font_description_to_string(widget->style->font_desc);
442 g_free(prefs_common.smallfont);
443 g_free(prefs_common.normalfont);
444 g_free(prefs_common.boldfont);
445 prefs_common.smallfont = g_strdup(curfont);
446 prefs_common.normalfont = g_strdup(curfont);
447 bold_desc = pango_font_description_from_string(curfont);
448 pango_font_description_set_weight(bold_desc, PANGO_WEIGHT_BOLD);
449 prefs_common.boldfont = pango_font_description_to_string(bold_desc);
450 pango_font_description_free(bold_desc);
453 tmp = g_strdup(prefs_common.textfont);
454 if (strrchr(tmp, ' ')) {
455 *(strrchr(tmp, ' ')) = '\0';
456 new = g_strdup_printf("%s %d", tmp, size);
457 g_free(prefs_common.textfont);
458 prefs_common.textfont = new;
462 tmp = g_strdup(prefs_common.smallfont);
463 if (strrchr(tmp, ' ')) {
464 *(strrchr(tmp, ' ')) = '\0';
465 new = g_strdup_printf("%s %d", tmp, size);
466 g_free(prefs_common.smallfont);
467 prefs_common.smallfont = new;
471 tmp = g_strdup(prefs_common.normalfont);
472 if (strrchr(tmp, ' ')) {
473 *(strrchr(tmp, ' ')) = '\0';
474 new = g_strdup_printf("%s %d", tmp, size);
475 g_free(prefs_common.normalfont);
476 prefs_common.normalfont = new;
480 tmp = g_strdup(prefs_common.boldfont);
481 if (strrchr(tmp, ' ')) {
482 *(strrchr(tmp, ' ')) = '\0';
483 new = g_strdup_printf("%s %d", tmp, size);
484 g_free(prefs_common.boldfont);
485 prefs_common.boldfont = new;
490 #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"
491 #define FACE "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAM1BMVEUAAAAcJCI\n\
492 ONl1JUi0+Z4daY2NZciPabV9ykS5kj6Wsl2ybmZOBsMjZxK2wzN3Pzczs7OsCAGN0AAAAAXRSTlM\n\
493 AQObYZgAAAAFiS0dEAIgFHUgAAAIVSURBVEjH1ZbtlqMgDIaFECoGhPu/2s0b0Lais/NzN6d1OJ7\n\
494 3yReQzrL8B5Zy3rvl9At52Pf2tv1vSMjtYj8jaa8XUyI/yn3YD6sigj/2Tf5Bn069MIsTPHvx/t5\n\
495 /3rU/6JCIY3YwGe26r/cwUfE3cFe5T28L0K5rJAUHEeYAQxs8DHojjk3M9wECU4xxjXisI8RA0gy\n\
496 oczJZJOjxiTFZVTchAnIRJrgdmEGDyFfAI3UuG5FmYTkR9RDrIC4H0SqV4pzpEcUp0HNLjwBv+jA\n\
497 dikUE5g9iBvzmu3sH2oDk4lnHd829+2Q9gj6kDqDPg7hsGwBzH02fE3ZCt6ZHmlNKIMjMeRwra5I\n\
498 ecgNoBnLGPmzaHPJIwLY8Sq2M/tLUJfj0QcqmfVXAdLSStIYF8dzWjBBb2VgvDa4mO9oc651OiUo\n\
499 BEKbZokdPATF9E9oKAjQJcJOniaPXrVZRAnVWaqIyqRoNC8ZJvgCcW8XN39RqxVP1rS8Yd4WnCdN\n\
500 aRTo2jJRDbg3vtCpEUGffgDPhqKDaSuVqYtOplFIvIcx3HUI5/MuIWl6vKyBjNlqEru8hbFXqBPA\n\
501 5TpHGIUZOePeaIyzfQ/g9Xg0opU1AvdfXM9floYhv92pPAE96OZtkPV8eivgQi9RTfwPUU36I26n\n\
502 Hy+WuCJzAT7efMSeA1TNf2/VugDz+dN139xfA5ffxGZDD+MvcP/uvyB80wzZ76wbz8gAAAABJRU5\n\
505 static void write_welcome_email(WizardWindow *wizard)
511 const gchar *mailbox = gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name));
512 Folder *folder = folder_find_from_path(mailbox);
513 FolderItem *inbox = folder ? folder->inbox:NULL;
514 gchar *file = get_tmp_file();
515 gchar enc_from_name[BUFFSIZE], enc_to_name[BUFFSIZE], enc_subject[BUFFSIZE];
517 get_rfc822_date(buf_date, sizeof(buf_date));
519 conv_encode_header_full(enc_subject, sizeof(enc_subject),
520 C_("Welcome Mail Subject", "Welcome to Claws Mail"),
521 strlen("Subject: "), FALSE, CS_INTERNAL);
522 conv_encode_header_full(enc_to_name, sizeof(enc_to_name),
523 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)),
524 strlen("To: "), TRUE, CS_INTERNAL);
525 conv_encode_header_full(enc_from_name, sizeof(enc_from_name),
526 _("The Claws Mail Team"),
527 strlen("From: "), TRUE, CS_INTERNAL);
529 head = g_strdup_printf(
536 "Content-Type: text/plain; charset=UTF-8\n",
540 gtk_entry_get_text(GTK_ENTRY(wizard->email)),
541 buf_date, enc_subject, XFACE, FACE);
542 body = g_strdup_printf(
544 "Welcome to Claws Mail\n"
545 "---------------------\n"
547 "Now that you have set up your account you can fetch your\n"
548 "mail by clicking the 'Get Mail' button at the left of the\n"
551 "Claws Mail has lots of extra features accessible via plugins,\n"
552 "like anti-spam filtering and learning (via the Bogofilter or\n"
553 "SpamAssassin plugins), privacy protection (via PGP/Mime), an RSS\n"
554 "aggregator, a calendar, and much more. You can load them from\n"
555 "the menu entry '/Configuration/Plugins'.\n"
557 "You can change your Account Preferences by using the menu\n"
558 "entry '/Configuration/Preferences for current account'\n"
559 "and change the general Preferences by using\n"
560 "'/Configuration/Preferences'.\n"
562 "You can find further information in the Claws Mail manual,\n"
563 "which can be accessed by using the menu entry '/Help/Manual'\n"
564 "or online at the URL given below.\n"
572 "Mailing Lists: <%s>\n"
576 "Claws Mail is free software, released under the terms\n"
577 "of the GNU General Public License, version 3 or later, as\n"
578 "published by the Free Software Foundation, 51 Franklin Street,\n"
579 "Fifth Floor, Boston, MA 02110-1301, USA. The license can be\n"
584 "If you wish to donate to the Claws Mail project you can do\n"
586 HOMEPAGE_URI, MANUAL_URI, FAQ_URI, THEMES_URI, MAILING_LIST_URI,
587 GPL_URI, DONATE_URI);
589 msg = g_strconcat(head, body, NULL);
591 if (inbox && inbox->total_msgs == 0
592 && str_write_to_file(msg, file) >= 0) {
593 MsgFlags flags = { MSG_UNREAD|MSG_NEW, 0};
594 folder_item_add_msg(inbox, file, &flags, FALSE);
603 static gboolean wizard_write_config(WizardWindow *wizard)
605 static gboolean mailbox_ok = FALSE;
606 PrefsAccount *prefs_account = prefs_account_new();
607 GList *account_list = NULL;
608 gchar *smtp_server, *recv_server;
609 gint smtp_port, recv_port;
611 SSLType smtp_ssl_type, recv_ssl_type;
614 prefs_account->protocol = combobox_get_active_data(
615 GTK_COMBO_BOX(wizard->recv_type));
617 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4 &&
618 !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)))) {
619 alertpanel_error(_("Please enter the mailbox name."));
620 g_free(prefs_account);
621 gtk_notebook_set_current_page (
622 GTK_NOTEBOOK(wizard->notebook),
628 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
629 mailbox_ok = setup_write_mailbox_path(wizard->mainwin,
631 GTK_ENTRY(wizard->mailbox_name)));
637 /* alertpanel done by setup_write_mailbox_path */
638 g_free(prefs_account);
639 gtk_notebook_set_current_page (
640 GTK_NOTEBOOK(wizard->notebook),
645 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->full_name)))
646 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->email)))) {
647 alertpanel_error(_("Please enter your name and email address."));
648 g_free(prefs_account);
649 gtk_notebook_set_current_page (
650 GTK_NOTEBOOK(wizard->notebook),
655 if (prefs_account->protocol != A_LOCAL) {
656 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)))
657 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
658 alertpanel_error(_("Please enter your receiving server "
660 g_free(prefs_account);
661 gtk_notebook_set_current_page (
662 GTK_NOTEBOOK(wizard->notebook),
667 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
668 alertpanel_error(_("Please enter your username."));
669 g_free(prefs_account);
670 gtk_notebook_set_current_page (
671 GTK_NOTEBOOK(wizard->notebook),
677 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)))) {
678 alertpanel_error(_("Please enter your SMTP server."));
679 g_free(prefs_account);
680 gtk_notebook_set_current_page (
681 GTK_NOTEBOOK(wizard->notebook),
686 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
687 if (prefs_account->protocol == A_LOCAL
688 && !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)))) {
689 alertpanel_error(_("Please enter your SMTP username."));
690 g_free(prefs_account);
691 gtk_notebook_set_current_page (
692 GTK_NOTEBOOK(wizard->notebook),
695 } /* if it's not local we'll use the reception server */
698 if (prefs_account->protocol != A_LOCAL)
699 prefs_account->account_name = g_strdup_printf("%s@%s",
700 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)),
701 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
703 prefs_account->account_name = g_strdup_printf("%s",
704 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
706 recv_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
707 smtp_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)));
709 if (prefs_account->protocol != A_LOCAL && strstr(recv_server, ":")) {
710 recv_port = atoi(strstr(recv_server, ":")+1);
711 *(strstr(recv_server, ":")) = '\0';
712 if (prefs_account->protocol == A_IMAP4) {
713 prefs_account->set_imapport = TRUE;
714 prefs_account->imapport = recv_port;
715 } else if (prefs_account->protocol == A_POP3) {
716 prefs_account->set_popport = TRUE;
717 prefs_account->popport = recv_port;
720 if (strstr(smtp_server, ":")) {
721 smtp_port = atoi(strstr(smtp_server, ":")+1);
722 *(strstr(smtp_server, ":")) = '\0';
723 prefs_account->set_smtpport = TRUE;
724 prefs_account->smtpport = smtp_port;
727 prefs_account->name = g_strdup(
728 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)));
729 prefs_account->address = g_strdup(
730 gtk_entry_get_text(GTK_ENTRY(wizard->email)));
731 prefs_account->organization = g_strdup(
732 gtk_entry_get_text(GTK_ENTRY(wizard->organization)));
733 prefs_account->smtp_server = g_strdup(smtp_server);
735 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
737 tmp = g_path_get_basename(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)));
738 prefs_account->inbox = g_strdup_printf("#mh/%s/inbox",
739 (!strcmp("Mail", gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name))))
742 prefs_account->local_inbox = g_strdup(prefs_account->inbox);
743 } else if (prefs_account->protocol != A_IMAP4) {
744 if (folder_get_default_inbox())
745 prefs_account->local_inbox =
746 folder_item_get_identifier(folder_get_default_inbox());
749 if (prefs_account->protocol != A_LOCAL)
750 prefs_account->recv_server = g_strdup(recv_server);
752 prefs_account->local_mbox = g_strdup(recv_server);
757 prefs_account->userid = g_strdup(
758 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)));
759 prefs_account->passwd = g_strdup(
760 gtk_entry_get_text(GTK_ENTRY(wizard->recv_password)));
762 prefs_account->smtp_userid = g_strdup(
763 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)));
764 prefs_account->smtp_passwd = g_strdup(
765 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_password)));
766 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
767 prefs_account->use_smtp_auth = TRUE;
771 smtp_ssl_type = SSL_NONE;
772 recv_ssl_type = SSL_NONE;
774 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl))) {
775 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls)))
776 smtp_ssl_type = SSL_STARTTLS;
778 smtp_ssl_type = SSL_TUNNEL;
780 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl))) {
781 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls)))
782 recv_ssl_type = SSL_STARTTLS;
784 recv_ssl_type = SSL_TUNNEL;
787 prefs_account->ssl_smtp = smtp_ssl_type;
789 if (prefs_account->protocol == A_IMAP4)
790 prefs_account->ssl_imap = recv_ssl_type;
792 prefs_account->ssl_pop = recv_ssl_type;
794 prefs_account->out_ssl_client_cert_file = g_strdup(
795 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_ssl_cert_file)));
796 prefs_account->out_ssl_client_cert_pass = g_strdup(
797 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_ssl_cert_pass)));
798 prefs_account->in_ssl_client_cert_file = g_strdup(
799 gtk_entry_get_text(GTK_ENTRY(wizard->recv_ssl_cert_file)));
800 prefs_account->in_ssl_client_cert_pass = g_strdup(
801 gtk_entry_get_text(GTK_ENTRY(wizard->recv_ssl_cert_pass)));
803 if (prefs_account->protocol == A_IMAP4) {
804 gchar *directory = gtk_editable_get_chars(
805 GTK_EDITABLE(wizard->recv_imap_subdir), 0, -1);
806 if (directory && strlen(directory)) {
807 prefs_account->imap_dir = g_strdup(directory);
809 prefs_account->imap_subsonly =
810 gtk_toggle_button_get_active(
811 GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn));
815 account_list = g_list_append(account_list, prefs_account);
816 prefs_account_write_config_all(account_list);
817 prefs_account_free(prefs_account);
818 account_read_config_all();
820 initialize_fonts(wizard);
821 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4)
822 write_welcome_email(wizard);
825 plugin_load_standard_plugins();
830 static GtkWidget* create_page (WizardWindow *wizard, const char * title)
838 vbox = gtk_vbox_new (FALSE, 6);
839 gtk_container_set_border_width (GTK_CONTAINER(vbox), 10);
841 /* create the titlebar */
842 hbox = gtk_hbox_new (FALSE, 12);
843 image = stock_pixmap_widget(wizard->window,
844 STOCK_PIXMAP_CLAWS_MAIL_ICON);
845 gtk_box_pack_start (GTK_BOX(hbox), image, FALSE, FALSE, 0);
846 title_string = g_strconcat ("<span size=\"xx-large\" weight=\"ultrabold\">", title ? title : "", "</span>", NULL);
847 w = gtk_label_new (title_string);
848 gtk_label_set_use_markup (GTK_LABEL(w), TRUE);
849 g_free (title_string);
850 gtk_box_pack_start (GTK_BOX(hbox), w, FALSE, FALSE, 0);
852 /* pack the titlebar */
853 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
855 /* pack the separator */
856 gtk_box_pack_start (GTK_BOX(vbox), gtk_hseparator_new(), FALSE, FALSE, 0);
859 w = gtk_alignment_new (0, 0, 0, 0);
860 gtk_widget_set_size_request (w, 0, 6);
861 gtk_box_pack_start (GTK_BOX(vbox), w, FALSE, FALSE, 0);
866 #define PACK_BOX(hbox,text,entry) { \
867 GtkWidget *label = gtk_label_new(text); \
868 gtk_label_set_use_markup(GTK_LABEL(label), TRUE); \
869 if (GTK_IS_MISC(label)) \
870 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); \
871 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); \
872 gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); \
875 static gchar *get_default_server(WizardWindow * wizard, const gchar *type)
877 if (!strcmp(type, "smtp")) {
878 if (!tmpl.smtpserver || !strlen(tmpl.smtpserver))
879 return g_strconcat(type, ".", tmpl.domain, NULL);
881 return g_strdup(tmpl.smtpserver);
883 if (!tmpl.recvserver || !strlen(tmpl.recvserver))
884 return g_strconcat(type, ".", tmpl.domain, NULL);
886 return g_strdup(tmpl.recvserver);
890 static gchar *get_default_account(WizardWindow * wizard)
892 gchar *result = NULL;
894 if (!tmpl.recvuser || !strlen(tmpl.recvuser)) {
895 result = gtk_editable_get_chars(
896 GTK_EDITABLE(wizard->email), 0, -1);
898 if (strstr(result, "@")) {
899 *(strstr(result,"@")) = '\0';
902 result = g_strdup(tmpl.recvuser);
907 static gchar *get_default_smtp_account(WizardWindow * wizard)
909 gchar *result = NULL;
911 if (!tmpl.smtpuser || !strlen(tmpl.smtpuser)) {
914 result = g_strdup(tmpl.smtpuser);
919 static void wizard_email_changed(GtkWidget *widget, gpointer data)
921 WizardWindow *wizard = (WizardWindow *)data;
922 RecvProtocol protocol;
924 protocol = combobox_get_active_data(GTK_COMBO_BOX(wizard->recv_type));
926 text = get_default_server(wizard, "smtp");
927 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
930 text = get_default_account(wizard);
931 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
934 if (protocol == A_POP3) {
935 text = get_default_server(wizard, "pop");
936 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
938 } else if (protocol == A_IMAP4) {
939 text = get_default_server(wizard, "imap");
940 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
942 } else if (protocol == A_LOCAL) {
943 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
948 static GtkWidget* user_page (WizardWindow * wizard)
950 GtkWidget *table = gtk_table_new(1,1, FALSE);
953 GtkWidget *user_table;
955 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
956 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
958 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
959 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
961 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
962 GTK_EXPAND|GTK_FILL, 0, 0, 0);
964 user_table = gtk_table_new(3, 2, FALSE);
965 gtk_table_set_row_spacings(GTK_TABLE(user_table), VSPACING_NARROW);
966 gtk_box_pack_start(GTK_BOX(vbox), user_table, FALSE, FALSE, 0);
968 label = gtk_label_new(_("<span weight=\"bold\">Your name:</span>"));
969 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
970 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
971 gtk_table_attach(GTK_TABLE(user_table), label, 0,1,0,1,
972 GTK_FILL, 0, VSPACING_NARROW, 0);
973 wizard->full_name = gtk_entry_new();
974 gtk_entry_set_text(GTK_ENTRY(wizard->full_name), tmpl.name?tmpl.name:"");
975 gtk_table_attach(GTK_TABLE(user_table), wizard->full_name, 1,2,0,1,
976 GTK_EXPAND|GTK_FILL, 0, 0, 0);
978 label = gtk_label_new(_("<span weight=\"bold\">Your email address:</span>"));
979 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
980 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
981 gtk_table_attach(GTK_TABLE(user_table), label, 0,1,1,2,
982 GTK_FILL, 0, VSPACING_NARROW, 0);
983 wizard->email = gtk_entry_new();
984 gtk_entry_set_text(GTK_ENTRY(wizard->email), tmpl.email?tmpl.email:"");
985 gtk_table_attach(GTK_TABLE(user_table), wizard->email, 1,2,1,2,
986 GTK_EXPAND|GTK_FILL, 0, 0, 0);
988 label = gtk_label_new(_("Your organization:"));
989 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
990 gtk_table_attach(GTK_TABLE(user_table), label, 0,1,2,3,
991 GTK_FILL, 0, VSPACING_NARROW, 0);
992 wizard->organization = gtk_entry_new();
993 gtk_entry_set_text(GTK_ENTRY(wizard->organization), tmpl.organization?tmpl.organization:"");
994 gtk_table_attach(GTK_TABLE(user_table), wizard->organization, 1,2,2,3,
995 GTK_EXPAND|GTK_FILL, 0, 0, 0);
997 g_signal_connect(G_OBJECT(wizard->email), "changed",
998 G_CALLBACK(wizard_email_changed),
1003 static GtkWidget* mailbox_page (WizardWindow * wizard)
1005 GtkWidget *table = gtk_table_new(1,1, FALSE);
1009 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1010 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1012 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1013 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1015 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1016 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1018 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1019 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1021 wizard->mailbox_label = gtk_label_new(_("<span weight=\"bold\">Mailbox name:</span>"));
1022 gtk_label_set_use_markup(GTK_LABEL(wizard->mailbox_label), TRUE);
1023 if (GTK_IS_MISC(wizard->mailbox_label))
1024 gtk_misc_set_alignment(GTK_MISC(wizard->mailbox_label), 1, 0.5);
1025 wizard->mailbox_name = gtk_entry_new();
1027 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), tmpl.mailbox?tmpl.mailbox:"");
1029 CLAWS_SET_TIP(wizard->mailbox_name, _("You can also specify an absolute path, for example: "
1030 "\"/home/john/Documents/Mail\""));
1032 gtk_box_pack_start(GTK_BOX(hbox), wizard->mailbox_label, FALSE, FALSE, 0);
1033 gtk_box_pack_start(GTK_BOX(hbox), wizard->mailbox_name, TRUE, TRUE, 0);
1038 static void smtp_auth_changed (GtkWidget *btn, gpointer data)
1040 WizardWindow *wizard = (WizardWindow *)data;
1041 gboolean do_auth = gtk_toggle_button_get_active(
1042 GTK_TOGGLE_BUTTON(wizard->smtp_auth));
1043 gtk_widget_set_sensitive(wizard->smtp_username, do_auth);
1044 gtk_widget_set_sensitive(wizard->smtp_username_label, do_auth);
1045 gtk_widget_set_sensitive(wizard->smtp_password, do_auth);
1046 gtk_widget_set_sensitive(wizard->smtp_password_label, do_auth);
1050 static void cert_browse_cb(GtkWidget *widget, gpointer data)
1052 GtkEntry *dest = GTK_ENTRY(data);
1054 gchar *utf8_filename;
1056 filename = filesel_select_file_open(_("Select certificate file"), NULL);
1057 if (!filename) return;
1059 utf8_filename = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
1060 if (!utf8_filename) {
1061 g_warning("cert_browse_cb(): failed to convert character set.");
1062 utf8_filename = g_strdup(filename);
1064 gtk_entry_set_text(dest, utf8_filename);
1065 g_free(utf8_filename);
1069 static GtkWidget* smtp_page (WizardWindow * wizard)
1071 GtkWidget *table = gtk_table_new(1, 1, FALSE);
1074 GtkWidget *hbox_spc;
1075 GtkWidget *smtp_auth_table;
1079 GtkWidget *smtp_cert_table;
1083 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1084 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1086 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1087 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1089 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1090 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1092 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1093 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1094 wizard->smtp_server = gtk_entry_new();
1095 text = get_default_server(wizard, "smtp");
1096 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
1099 CLAWS_SET_TIP(wizard->smtp_server,
1100 _("You can specify the port number by appending it at the end: "
1101 "\"mail.example.com:25\""));
1103 PACK_BOX(hbox, _("<span weight=\"bold\">SMTP server address:</span>"),
1104 wizard->smtp_server);
1106 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1107 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1108 wizard->smtp_auth = gtk_check_button_new_with_label(
1109 _("Use authentication"));
1110 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth),
1112 g_signal_connect(G_OBJECT(wizard->smtp_auth), "toggled",
1113 G_CALLBACK(smtp_auth_changed),
1115 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_auth, FALSE, FALSE, 0);
1117 label = gtk_label_new(_("<span size=\"small\">(empty to use the same as receive)</span>"));
1118 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
1119 SET_TOGGLE_SENSITIVITY (wizard->smtp_auth, label);
1120 gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 0);
1122 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1123 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1124 hbox_spc = gtk_hbox_new (FALSE, 0);
1125 gtk_widget_set_size_request (hbox_spc, 12, -1);
1126 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1127 smtp_auth_table = gtk_table_new(2, 2, FALSE);
1128 SET_TOGGLE_SENSITIVITY (wizard->smtp_auth, smtp_auth_table);
1129 gtk_box_pack_start(GTK_BOX(hbox), smtp_auth_table, TRUE, TRUE, 0);
1131 wizard->smtp_username_label = gtk_label_new(_("SMTP username:"));
1132 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_username_label), 1, 0.5);
1133 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_username_label, 0,1,0,1,
1134 GTK_FILL, 0, VSPACING_NARROW, 0);
1135 text = get_default_smtp_account(wizard);
1136 wizard->smtp_username = gtk_entry_new();
1137 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_username), text);
1139 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_username, 1,2,0,1,
1140 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1142 wizard->smtp_password_label = gtk_label_new(_("SMTP password:"));
1143 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_password_label), 1, 0.5);
1144 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_password_label, 0,1,1,2,
1145 GTK_FILL, 0, VSPACING_NARROW, 0);
1146 wizard->smtp_password = gtk_entry_new();
1147 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_password), tmpl.smtppass?tmpl.smtppass:"");
1148 gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_password), FALSE);
1149 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_password, 1,2,1,2,
1150 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1152 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1153 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1154 wizard->smtp_use_ssl = gtk_check_button_new_with_label(
1155 _("Use SSL to connect to SMTP server"));
1156 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl),
1158 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_ssl, FALSE, FALSE, 0);
1160 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1161 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1162 hbox_spc = gtk_hbox_new (FALSE, 0);
1163 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1164 gtk_widget_set_size_request (hbox_spc, 12, -1);
1165 wizard->smtp_use_tls = gtk_check_button_new_with_label(
1166 _("Use SSL via STARTTLS"));
1167 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls),
1169 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_tls, FALSE, FALSE, 0);
1170 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, wizard->smtp_use_tls);
1172 smtp_cert_table = gtk_table_new(3,3, FALSE);
1173 gtk_box_pack_start (GTK_BOX(vbox), smtp_cert_table, FALSE, FALSE, 4);
1174 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1175 hbox_spc = gtk_hbox_new (FALSE, 0);
1176 gtk_widget_set_size_request (hbox_spc, 12, -1);
1177 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1178 label = gtk_label_new(_("Client SSL certificate (optional)"));
1179 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
1180 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1181 gtk_table_attach(GTK_TABLE(smtp_cert_table), hbox, 0, 3, 0, 1, GTK_FILL, 0, 0, 0);
1182 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1183 hbox_spc = gtk_hbox_new (FALSE, 0);
1184 gtk_widget_set_size_request (hbox_spc, 12, -1);
1185 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1186 label = gtk_label_new(_("File"));
1187 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1188 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1189 gtk_table_attach(GTK_TABLE(smtp_cert_table), hbox, 0, 1, 1, 2,
1190 GTK_FILL, 0, VSPACING_NARROW, 0);
1191 wizard->smtp_ssl_cert_file = gtk_entry_new();
1192 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_ssl_cert_file), tmpl.smtpssl_cert?tmpl.smtpssl_cert:"");
1193 gtk_table_attach(GTK_TABLE(smtp_cert_table), wizard->smtp_ssl_cert_file, 1, 2, 1, 2, GTK_FILL, 0, 0, 0);
1194 button = gtkut_get_browse_file_btn(_("Browse"));
1195 gtk_table_attach(GTK_TABLE(smtp_cert_table), button, 2, 3, 1, 2,
1196 GTK_FILL, 0, VSPACING_NARROW, 0);
1197 g_signal_connect(G_OBJECT(button), "clicked",
1198 G_CALLBACK(cert_browse_cb), wizard->smtp_ssl_cert_file);
1200 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1201 hbox_spc = gtk_hbox_new (FALSE, 0);
1202 gtk_widget_set_size_request (hbox_spc, 12, -1);
1203 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1204 label = gtk_label_new(_("Password"));
1205 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1206 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1207 gtk_table_attach(GTK_TABLE(smtp_cert_table), hbox, 0, 1, 2, 3,
1208 GTK_FILL, 0, VSPACING_NARROW, 0);
1209 wizard->smtp_ssl_cert_pass = gtk_entry_new();
1210 gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_ssl_cert_pass), FALSE);
1211 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_ssl_cert_pass), tmpl.smtpssl_cert_pass?tmpl.smtpssl_cert_pass:"");
1212 gtk_table_attach(GTK_TABLE(smtp_cert_table), wizard->smtp_ssl_cert_pass, 1, 2, 2, 3, GTK_FILL, 0, 0, 0);
1213 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, smtp_cert_table);
1214 wizard->smtp_cert_table = smtp_cert_table;
1216 smtp_auth_changed(NULL, wizard);
1220 static void wizard_protocol_change(WizardWindow *wizard, RecvProtocol protocol)
1224 if (protocol == A_POP3) {
1225 text = get_default_server(wizard, "pop");
1226 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1227 gtk_widget_hide(wizard->recv_imap_label);
1228 gtk_widget_hide(wizard->recv_imap_subdir);
1229 gtk_widget_hide(wizard->subsonly_checkbtn);
1230 gtk_widget_show(wizard->recv_username);
1231 gtk_widget_show(wizard->recv_password);
1232 gtk_widget_show(wizard->recv_username_label);
1233 gtk_widget_show(wizard->recv_password_label);
1234 gtk_widget_hide(wizard->no_imap_warning);
1236 gtk_widget_show(wizard->recv_use_ssl);
1237 gtk_widget_show(wizard->recv_use_tls);
1238 gtk_widget_show(wizard->recv_cert_table);
1240 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1241 gtk_widget_show(wizard->auto_configure_btn);
1242 gtk_widget_hide(wizard->auto_configure_cancel_btn);
1243 gtk_widget_show(wizard->auto_configure_lbl);
1245 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1246 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1247 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1249 if (wizard->create_mailbox) {
1250 gtk_widget_show(wizard->mailbox_label);
1251 gtk_widget_show(wizard->mailbox_name);
1253 } else if (protocol == A_IMAP4) {
1254 #ifdef HAVE_LIBETPAN
1255 text = get_default_server(wizard, "imap");
1256 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1257 gtk_widget_show(wizard->recv_imap_label);
1258 gtk_widget_show(wizard->recv_imap_subdir);
1259 gtk_widget_show(wizard->subsonly_checkbtn);
1260 gtk_widget_show(wizard->recv_username);
1261 gtk_widget_show(wizard->recv_password);
1262 gtk_widget_show(wizard->recv_username_label);
1263 gtk_widget_show(wizard->recv_password_label);
1264 gtk_widget_hide(wizard->no_imap_warning);
1266 gtk_widget_show(wizard->recv_use_ssl);
1267 gtk_widget_show(wizard->recv_use_tls);
1268 gtk_widget_show(wizard->recv_cert_table);
1270 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1271 gtk_widget_show(wizard->auto_configure_btn);
1272 gtk_widget_hide(wizard->auto_configure_cancel_btn);
1273 gtk_widget_show(wizard->auto_configure_lbl);
1275 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1276 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1277 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1279 if (wizard->create_mailbox) {
1280 gtk_widget_hide(wizard->mailbox_label);
1281 gtk_widget_hide(wizard->mailbox_name);
1284 gtk_widget_hide(wizard->recv_imap_label);
1285 gtk_widget_hide(wizard->recv_imap_subdir);
1286 gtk_widget_hide(wizard->subsonly_checkbtn);
1287 gtk_widget_hide(wizard->recv_username);
1288 gtk_widget_hide(wizard->recv_password);
1289 gtk_widget_hide(wizard->recv_username_label);
1290 gtk_widget_hide(wizard->recv_password_label);
1291 gtk_widget_show(wizard->no_imap_warning);
1292 if (wizard->create_mailbox) {
1293 gtk_widget_hide(wizard->mailbox_label);
1294 gtk_widget_hide(wizard->mailbox_name);
1297 gtk_widget_hide(wizard->recv_use_ssl);
1298 gtk_widget_hide(wizard->recv_use_tls);
1299 gtk_widget_hide(wizard->recv_cert_table);
1301 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, FALSE);
1303 } else if (protocol == A_LOCAL) {
1304 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
1305 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Local mailbox:</span>"));
1306 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1307 gtk_widget_hide(wizard->no_imap_warning);
1308 gtk_widget_hide(wizard->recv_imap_label);
1309 gtk_widget_hide(wizard->recv_imap_subdir);
1310 gtk_widget_hide(wizard->subsonly_checkbtn);
1311 gtk_widget_hide(wizard->recv_username);
1312 gtk_widget_hide(wizard->recv_password);
1313 gtk_widget_hide(wizard->recv_username_label);
1314 gtk_widget_hide(wizard->recv_password_label);
1315 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1316 gtk_widget_hide(wizard->auto_configure_btn);
1317 gtk_widget_hide(wizard->auto_configure_cancel_btn);
1318 gtk_widget_hide(wizard->auto_configure_lbl);
1321 gtk_widget_hide(wizard->recv_use_ssl);
1322 gtk_widget_hide(wizard->recv_use_tls);
1323 gtk_widget_hide(wizard->recv_cert_table);
1325 if (wizard->create_mailbox) {
1326 gtk_widget_show(wizard->mailbox_label);
1327 gtk_widget_show(wizard->mailbox_name);
1329 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1333 static void wizard_protocol_changed(GtkComboBox *combo, gpointer data)
1335 WizardWindow *wizard = (WizardWindow *)data;
1336 RecvProtocol protocol = combobox_get_active_data(combo);
1338 wizard_protocol_change(wizard, protocol);
1341 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1342 static void auto_configure_cb (GtkWidget *widget, gpointer data)
1344 gchar *address = NULL;
1345 AutoConfigureData *recv_data;
1346 AutoConfigureData *send_data;
1347 static GCancellable *recv_cancel = NULL;
1348 static GCancellable *send_cancel = NULL;
1349 WizardWindow *wizard = (WizardWindow *)data;
1350 RecvProtocol protocol = combobox_get_active_data(GTK_COMBO_BOX(wizard->recv_type));
1353 recv_cancel = g_cancellable_new();
1354 send_cancel = g_cancellable_new();
1357 if (widget == wizard->auto_configure_cancel_btn) {
1358 g_cancellable_cancel(recv_cancel);
1359 g_cancellable_cancel(send_cancel);
1360 g_object_unref(recv_cancel);
1361 g_object_unref(send_cancel);
1367 address = gtk_editable_get_chars(GTK_EDITABLE(wizard->email), 0, -1);
1369 if (strchr(address, '@') == NULL) {
1371 gtk_label_set_text(GTK_LABEL(wizard->auto_configure_lbl),
1372 _("Failed (wrong address)"));
1376 if (protocol == A_POP3 || protocol == A_IMAP4) {
1377 recv_data = g_new0(AutoConfigureData, 1);
1378 recv_data->configure_button = GTK_BUTTON(wizard->auto_configure_btn);
1379 recv_data->cancel_button = GTK_BUTTON(wizard->auto_configure_cancel_btn);
1380 recv_data->info_label = GTK_LABEL(wizard->auto_configure_lbl);
1381 recv_data->uid_entry = GTK_ENTRY(wizard->recv_username);
1382 recv_data->cancel = recv_cancel;
1385 recv_data->ssl_service = "pop3s";
1386 recv_data->tls_service = "pop3";
1387 recv_data->address = g_strdup(address);
1388 recv_data->hostname_entry = GTK_ENTRY(wizard->recv_server);
1389 recv_data->set_port = NULL;
1390 recv_data->port = NULL;
1391 recv_data->tls_checkbtn = GTK_TOGGLE_BUTTON(wizard->recv_use_tls);
1392 recv_data->ssl_checkbtn = GTK_TOGGLE_BUTTON(wizard->recv_use_ssl);
1393 recv_data->default_port = 110;
1394 recv_data->default_ssl_port = 995;
1397 recv_data->ssl_service = "imaps";
1398 recv_data->tls_service = "imap";
1399 recv_data->address = g_strdup(address);
1400 recv_data->hostname_entry = GTK_ENTRY(wizard->recv_server);
1401 recv_data->set_port = NULL;
1402 recv_data->port = NULL;
1403 recv_data->tls_checkbtn = GTK_TOGGLE_BUTTON(wizard->recv_use_tls);
1404 recv_data->ssl_checkbtn = GTK_TOGGLE_BUTTON(wizard->recv_use_ssl);
1405 recv_data->default_port = 143;
1406 recv_data->default_ssl_port = 993;
1409 cm_return_if_fail(FALSE);
1411 auto_configure_service(recv_data);
1414 send_data = g_new0(AutoConfigureData, 1);
1415 send_data->configure_button = GTK_BUTTON(wizard->auto_configure_btn);
1416 send_data->cancel_button = GTK_BUTTON(wizard->auto_configure_cancel_btn);
1417 send_data->info_label = GTK_LABEL(wizard->auto_configure_lbl);
1418 send_data->cancel = send_cancel;
1420 send_data->ssl_service = NULL;
1421 send_data->tls_service = "submission";
1422 send_data->address = g_strdup(address);
1423 send_data->hostname_entry = GTK_ENTRY(wizard->smtp_server);
1424 send_data->set_port = NULL;
1425 send_data->port = NULL;
1426 send_data->tls_checkbtn = GTK_TOGGLE_BUTTON(wizard->smtp_use_tls);
1427 send_data->ssl_checkbtn = GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl);
1428 send_data->default_port = 25;
1429 send_data->default_ssl_port = -1;
1430 send_data->auth_checkbtn = GTK_TOGGLE_BUTTON(wizard->smtp_auth);
1432 auto_configure_service(send_data);
1438 static GtkWidget* recv_page (WizardWindow * wizard)
1440 GtkWidget *table = gtk_table_new(1,1, FALSE);
1443 GtkWidget *hbox_spc;
1444 GtkWidget *recv_table;
1448 GtkWidget *recv_cert_table;
1450 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1451 GtkWidget *auto_configure_btn;
1452 GtkWidget *auto_configure_cancel_btn;
1453 GtkWidget *auto_configure_lbl;
1455 GtkListStore *store;
1460 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1461 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1463 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1464 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1466 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1467 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1469 recv_table = gtk_table_new(4, 2, FALSE);
1471 gtk_box_pack_start(GTK_BOX(vbox), recv_table, FALSE, FALSE, 0);
1473 label = gtk_label_new(_("<span weight=\"bold\">Server type:</span>"));
1474 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1475 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
1476 gtk_table_attach(GTK_TABLE(recv_table), label, 0,1,0,1,
1477 GTK_FILL, 0, VSPACING_NARROW, 0);
1478 wizard->recv_type = gtkut_sc_combobox_create(NULL, FALSE);
1479 store = GTK_LIST_STORE(gtk_combo_box_get_model(
1480 GTK_COMBO_BOX(wizard->recv_type)));
1482 COMBOBOX_ADD(store, _("POP3"), A_POP3);
1483 COMBOBOX_ADD(store, _("IMAP"), A_IMAP4);
1484 COMBOBOX_ADD(store, _("Local mbox file"), A_LOCAL);
1486 switch(tmpl.recvtype) {
1499 gtk_combo_box_set_active(GTK_COMBO_BOX (wizard->recv_type), index);
1500 g_signal_connect(G_OBJECT(wizard->recv_type), "changed",
1501 G_CALLBACK(wizard_protocol_changed),
1503 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_type, 1,2,0,1,
1504 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1506 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1507 auto_configure_btn = gtk_button_new_with_label(_("Auto-configure"));
1508 auto_configure_cancel_btn = gtk_button_new_with_label(_("Cancel"));
1509 gtk_table_attach(GTK_TABLE(recv_table), auto_configure_btn, 0,1,1,2,
1510 GTK_FILL, 0, VSPACING_NARROW, 0);
1511 auto_configure_lbl = gtk_label_new("");
1512 gtk_misc_set_alignment(GTK_MISC(auto_configure_lbl), 0, 0.5);
1513 gtk_table_attach(GTK_TABLE(recv_table), auto_configure_lbl, 1,2,1,2,
1514 GTK_FILL, 0, VSPACING_NARROW, 0);
1515 gtk_widget_show(auto_configure_btn);
1516 gtk_widget_show(auto_configure_lbl);
1517 wizard->auto_configure_lbl = auto_configure_lbl;
1518 wizard->auto_configure_btn = auto_configure_btn;
1519 wizard->auto_configure_cancel_btn = auto_configure_cancel_btn;
1520 g_signal_connect (G_OBJECT (auto_configure_btn), "clicked",
1521 G_CALLBACK (auto_configure_cb), wizard);
1522 g_signal_connect (G_OBJECT (auto_configure_cancel_btn), "clicked",
1523 G_CALLBACK (auto_configure_cb), wizard);
1526 wizard->recv_label = gtk_label_new(_("<span weight=\"bold\">Server address:</span>"));
1527 gtk_misc_set_alignment(GTK_MISC(wizard->recv_label), 1, 0.5);
1528 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1529 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_label, 0,1,2,3,
1530 GTK_FILL, 0, VSPACING_NARROW, 0);
1531 wizard->recv_server = gtk_entry_new();
1532 text = get_default_server(wizard, "pop");
1533 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1536 CLAWS_SET_TIP(wizard->recv_server,
1537 _("You can specify the port number by appending it at the end: "
1538 "\"mail.example.com:110\""));
1539 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_server, 1,2,2,3,
1540 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1542 wizard->recv_username_label = gtk_label_new(_("<span weight=\"bold\">Username:</span>"));
1543 gtk_misc_set_alignment(GTK_MISC(wizard->recv_username_label), 1, 0.5);
1544 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_username_label), TRUE);
1545 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_username_label, 0,1,3,4,
1546 GTK_FILL, 0, VSPACING_NARROW, 0);
1547 wizard->recv_username = gtk_entry_new();
1548 text = get_default_account(wizard);
1549 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
1551 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_username, 1,2,3,4,
1552 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1554 wizard->recv_password_label = gtk_label_new(_("Password:"));
1555 gtk_misc_set_alignment(GTK_MISC(wizard->recv_password_label), 1, 0.5);
1556 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_password_label, 0,1,4,5,
1557 GTK_FILL, 0, VSPACING_NARROW, 0);
1558 wizard->recv_password = gtk_entry_new();
1559 gtk_entry_set_text(GTK_ENTRY(wizard->recv_password), tmpl.recvpass?tmpl.recvpass:"");
1560 gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_password), FALSE);
1561 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_password, 1,2,4,5,
1562 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1564 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1565 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1566 wizard->recv_use_ssl = gtk_check_button_new_with_label(
1567 _("Use SSL to connect to receiving server"));
1568 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl),
1570 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_ssl, FALSE, FALSE, 0);
1572 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1573 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1574 hbox_spc = gtk_hbox_new (FALSE, 0);
1575 gtk_widget_set_size_request (hbox_spc, 12, -1);
1576 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1577 wizard->recv_use_tls = gtk_check_button_new_with_label(
1578 _("Use SSL via STARTTLS"));
1579 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls),
1581 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_tls, FALSE, FALSE, 0);
1582 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, wizard->recv_use_tls);
1584 recv_cert_table = gtk_table_new(3,3, FALSE);
1585 gtk_box_pack_start (GTK_BOX(vbox), recv_cert_table, FALSE, FALSE, 4);
1586 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1587 hbox_spc = gtk_hbox_new (FALSE, 0);
1588 gtk_widget_set_size_request (hbox_spc, 12, -1);
1589 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1590 label = gtk_label_new(_("Client SSL certificate (optional)"));
1591 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
1592 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1593 gtk_table_attach(GTK_TABLE(recv_cert_table), hbox, 0, 3, 0, 1, GTK_FILL, 0, 0, 0);
1594 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1595 hbox_spc = gtk_hbox_new (FALSE, 0);
1596 gtk_widget_set_size_request (hbox_spc, 12, -1);
1597 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1598 label = gtk_label_new(_("File"));
1599 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1600 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1601 gtk_table_attach(GTK_TABLE(recv_cert_table), hbox, 0, 1, 1, 2,
1602 GTK_FILL, 0, VSPACING_NARROW, 0);
1603 wizard->recv_ssl_cert_file = gtk_entry_new();
1604 gtk_entry_set_text(GTK_ENTRY(wizard->recv_ssl_cert_file), tmpl.recvssl_cert?tmpl.recvssl_cert:"");
1605 gtk_table_attach(GTK_TABLE(recv_cert_table), wizard->recv_ssl_cert_file, 1, 2, 1, 2, GTK_FILL, 0, 0, 0);
1606 button = gtkut_get_browse_file_btn(_("Browse"));
1607 gtk_table_attach(GTK_TABLE(recv_cert_table), button, 2, 3, 1, 2,
1608 GTK_FILL, 0, VSPACING_NARROW, 0);
1609 g_signal_connect(G_OBJECT(button), "clicked",
1610 G_CALLBACK(cert_browse_cb), wizard->recv_ssl_cert_file);
1612 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1613 hbox_spc = gtk_hbox_new (FALSE, 0);
1614 gtk_widget_set_size_request (hbox_spc, 12, -1);
1615 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1616 label = gtk_label_new(_("Password"));
1617 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1618 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1619 gtk_table_attach(GTK_TABLE(recv_cert_table), hbox, 0, 1, 2, 3,
1620 GTK_FILL, 0, VSPACING_NARROW, 0);
1621 wizard->recv_ssl_cert_pass = gtk_entry_new();
1622 gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_ssl_cert_pass), FALSE);
1623 gtk_entry_set_text(GTK_ENTRY(wizard->recv_ssl_cert_pass), tmpl.recvssl_cert_pass?tmpl.recvssl_cert_pass:"");
1624 gtk_table_attach(GTK_TABLE(recv_cert_table), wizard->recv_ssl_cert_pass, 1, 2, 2, 3, GTK_FILL, 0, 0, 0);
1625 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, recv_cert_table);
1626 wizard->recv_cert_table = recv_cert_table;
1628 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1629 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1630 wizard->recv_imap_subdir = gtk_entry_new();
1631 gtk_entry_set_text(GTK_ENTRY(wizard->recv_imap_subdir), tmpl.imapdir?tmpl.imapdir:"");
1632 wizard->recv_imap_label = gtk_label_new(_("IMAP server directory:"));
1633 gtk_misc_set_alignment(GTK_MISC(wizard->recv_imap_label), 1, 0.5);
1634 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_label, FALSE, FALSE, 0);
1635 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_subdir, TRUE, TRUE, 0);
1637 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1638 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1639 hbox_spc = gtk_hbox_new (FALSE, 0);
1640 gtk_widget_set_size_request (hbox_spc, 12, -1);
1641 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1642 wizard->subsonly_checkbtn = gtk_check_button_new_with_label(
1643 _("Show only subscribed folders"));
1644 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn),
1646 gtk_box_pack_start(GTK_BOX(hbox), wizard->subsonly_checkbtn, FALSE, FALSE, 0);
1648 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1649 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1650 wizard->no_imap_warning = gtk_label_new(_(
1651 "<span weight=\"bold\">Warning: this version of Claws Mail\n"
1652 "has been built without IMAP support.</span>"));
1653 gtk_label_set_use_markup(GTK_LABEL(wizard->no_imap_warning), TRUE);
1654 gtk_box_pack_start(GTK_BOX(hbox), wizard->no_imap_warning, FALSE, FALSE, 0);
1660 wizard_response_cb (GtkDialog * dialog, int response, gpointer data)
1662 WizardWindow * wizard = (WizardWindow *)data;
1663 int current_page, num_pages;
1664 gboolean skip_mailbox_page = FALSE;
1665 gint protocol = combobox_get_active_data(GTK_COMBO_BOX(wizard->recv_type));
1667 if (protocol == A_IMAP4) {
1668 skip_mailbox_page = TRUE;
1671 num_pages = g_slist_length(wizard->pages);
1673 current_page = gtk_notebook_get_current_page (
1674 GTK_NOTEBOOK(wizard->notebook));
1675 if (response == CANCEL)
1677 wizard->result = FALSE;
1678 wizard->finished = TRUE;
1679 gtk_widget_destroy (GTK_WIDGET(dialog));
1681 else if (response == FINISHED)
1683 if (!wizard_write_config(wizard)) {
1684 current_page = gtk_notebook_get_current_page (
1685 GTK_NOTEBOOK(wizard->notebook));
1688 wizard->result = TRUE;
1689 wizard->finished = TRUE;
1690 gtk_widget_destroy (GTK_WIDGET(dialog));
1694 if (response == GO_BACK)
1696 if (current_page > 0) {
1698 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1702 gtk_notebook_set_current_page (
1703 GTK_NOTEBOOK(wizard->notebook),
1707 else if (response == GO_FORWARD)
1709 if (current_page < (num_pages-1)) {
1711 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1715 gtk_notebook_set_current_page (
1716 GTK_NOTEBOOK(wizard->notebook),
1721 gtk_dialog_set_response_sensitive (dialog, GO_BACK,
1723 gtk_dialog_set_response_sensitive (dialog, GO_FORWARD,
1724 current_page < (num_pages - 1));
1725 if (current_page == (num_pages -1)) {
1726 gtk_dialog_set_response_sensitive (dialog, FINISHED, TRUE);
1727 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), FINISHED);
1729 gtk_dialog_set_response_sensitive (dialog, FINISHED, FALSE);
1730 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), GO_FORWARD);
1736 static gint wizard_close_cb(GtkWidget *widget, GdkEventAny *event,
1739 WizardWindow *wizard = (WizardWindow *)data;
1740 wizard->result = FALSE;
1741 wizard->finished = TRUE;
1746 #define PACK_WARNING(text) { \
1747 label = gtk_label_new(text); \
1748 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); \
1749 gtk_box_pack_end(GTK_BOX(widget), label, FALSE, FALSE, 0); \
1752 gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) {
1753 WizardWindow *wizard = g_new0(WizardWindow, 1);
1757 GtkWidget *scrolled_window;
1762 wizard->mainwin = mainwin;
1763 wizard->create_mailbox = create_mailbox;
1765 gtk_widget_hide(mainwin->window);
1767 wizard_read_defaults();
1769 wizard->window = gtk_dialog_new_with_buttons (_("Claws Mail Setup Wizard"),
1771 GTK_STOCK_GO_BACK, GO_BACK,
1772 GTK_STOCK_GO_FORWARD, GO_FORWARD,
1773 GTK_STOCK_SAVE, FINISHED,
1774 GTK_STOCK_CANCEL, CANCEL,
1776 gtk_widget_set_size_request(wizard->window, -1, 480);
1777 gtk_window_set_position(GTK_WINDOW(wizard->window), GTK_WIN_POS_CENTER);
1779 g_signal_connect(wizard->window, "response",
1780 G_CALLBACK(wizard_response_cb), wizard);
1781 gtk_widget_realize(wizard->window);
1782 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window),
1784 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1786 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1788 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1790 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1793 wizard->notebook = gtk_notebook_new();
1794 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(wizard->notebook), FALSE);
1795 gtk_notebook_set_show_border(GTK_NOTEBOOK(wizard->notebook), FALSE);
1796 gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(wizard->window))),
1797 wizard->notebook, TRUE, TRUE, 0);
1799 wizard->pages = NULL;
1801 /*welcome page: 0 */
1803 page = create_page(wizard, _("Welcome to Claws Mail"));
1805 wizard->pages = g_slist_append(wizard->pages, page);
1806 widget = stock_pixmap_widget(wizard->window,
1807 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1809 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1811 text = g_strdup(_("Welcome to the Claws Mail setup wizard.\n\n"
1812 "We will begin by defining some basic "
1813 "information about you and your most common "
1814 "mail options so that you can start to use "
1815 "Claws Mail in less than five minutes."));
1816 widget = gtk_label_new(text);
1817 gtk_label_set_line_wrap(GTK_LABEL(widget), TRUE);
1818 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1824 widget = create_page (wizard, _("About You"));
1825 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1826 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1827 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1828 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1830 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1832 PACK_WARNING(_("Bold fields must be completed"));
1834 wizard->pages = g_slist_append(wizard->pages, widget);
1836 /* recv+auth page: 2 */
1839 widget = create_page (wizard, _("Receiving mail"));
1840 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1841 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1842 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1843 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1845 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1847 PACK_WARNING(_("Bold fields must be completed"));
1849 wizard->pages = g_slist_append(wizard->pages, widget);
1854 widget = create_page (wizard, _("Sending mail"));
1855 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1856 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1857 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1858 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1860 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1862 PACK_WARNING(_("Bold fields must be completed"));
1864 wizard->pages = g_slist_append(wizard->pages, widget);
1866 /* mailbox page: 4 */
1867 if (create_mailbox) {
1870 widget = create_page (wizard, _("Saving mail on disk"));
1871 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1872 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1873 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1874 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1876 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1877 mailbox_page(wizard));
1878 PACK_WARNING(_("Bold fields must be completed"));
1880 wizard->pages = g_slist_append(wizard->pages, widget);
1886 page = create_page(wizard, _("Configuration finished"));
1888 wizard->pages = g_slist_append(wizard->pages, page);
1889 widget = stock_pixmap_widget(wizard->window,
1890 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1892 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1894 text = g_strdup(_("Claws Mail is now ready.\n"
1895 "Click Save to start."));
1896 widget = gtk_label_new(text);
1897 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1901 for (cur = wizard->pages; cur && cur->data; cur = cur->next) {
1902 gtk_notebook_append_page (GTK_NOTEBOOK(wizard->notebook),
1903 GTK_WIDGET(cur->data), NULL);
1906 g_signal_connect(G_OBJECT(wizard->window), "delete_event",
1907 G_CALLBACK(wizard_close_cb), wizard);
1908 gtk_widget_show_all (wizard->window);
1910 gtk_widget_hide(wizard->recv_imap_label);
1911 gtk_widget_hide(wizard->recv_imap_subdir);
1912 gtk_widget_hide(wizard->subsonly_checkbtn);
1913 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1914 gtk_widget_hide(wizard->auto_configure_cancel_btn);
1916 wizard_protocol_change(wizard, tmpl.recvtype);
1918 while (!wizard->finished)
1919 gtk_main_iteration();
1921 result = wizard->result;
1925 gtk_widget_show(mainwin->window);