2 * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2013 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/>.
23 #include "claws-features.h"
29 #include <glib/gi18n.h>
30 #include <gdk/gdkkeysyms.h>
42 #include "prefs_account.h"
43 #include "mainwindow.h"
44 #include "stock_pixmap.h"
47 #include "alertpanel.h"
52 #include "prefs_common.h"
63 int WELCOME_PAGE = -1;
67 int MAILBOX_PAGE = -1;
80 GtkWidget *organization;
82 GtkWidget *mailbox_name;
83 GtkWidget *mailbox_label;
85 GtkWidget *smtp_server;
87 GtkWidget *smtp_username;
88 GtkWidget *smtp_password;
89 GtkWidget *smtp_username_label;
90 GtkWidget *smtp_password_label;
93 GtkWidget *recv_label;
94 GtkWidget *recv_server;
95 GtkWidget *recv_username;
96 GtkWidget *recv_password;
97 GtkWidget *recv_username_label;
98 GtkWidget *recv_password_label;
99 GtkWidget *recv_imap_label;
100 GtkWidget *recv_imap_subdir;
101 GtkWidget *subsonly_checkbtn;
102 GtkWidget *no_imap_warning;
104 GtkWidget *smtp_use_ssl;
105 GtkWidget *recv_use_ssl;
106 GtkWidget *smtp_use_tls;
107 GtkWidget *recv_use_tls;
108 GtkWidget *smtp_ssl_cert_file;
109 GtkWidget *recv_ssl_cert_file;
110 GtkWidget *smtp_ssl_cert_pass;
111 GtkWidget *recv_ssl_cert_pass;
112 GtkWidget *smtp_cert_table;
113 GtkWidget *recv_cert_table;
115 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
116 GtkWidget *auto_configure_lbl;
117 GtkWidget *auto_configure_btn;
118 GtkWidget *auto_configure_cancel_btn;
120 gboolean create_mailbox;
126 typedef struct _AccountTemplate {
135 RecvProtocol recvtype;
147 gchar *smtpssl_cert_pass;
148 gchar *recvssl_cert_pass;
151 static AccountTemplate tmpl;
153 static PrefParam template_params[] = {
154 {"name", "$USERNAME",
155 &tmpl.name, P_STRING, NULL, NULL, NULL},
156 {"domain", "$DEFAULTDOMAIN",
157 &tmpl.domain, P_STRING, NULL, NULL, NULL},
158 {"email", "$NAME_MAIL@$DOMAIN",
159 &tmpl.email, P_STRING, NULL, NULL, NULL},
161 &tmpl.organization, P_STRING, NULL, NULL, NULL},
162 {"smtpserver", "smtp.$DOMAIN",
163 &tmpl.smtpserver, P_STRING, NULL, NULL, NULL},
164 {"smtpauth", "FALSE",
165 &tmpl.smtpauth, P_BOOL, NULL, NULL, NULL},
167 &tmpl.smtpuser, P_STRING, NULL, NULL, NULL},
169 &tmpl.smtppass, P_STRING, NULL, NULL, NULL},
171 &tmpl.recvtype, P_INT, NULL, NULL, NULL},
172 {"recvserver", "pop.$DOMAIN",
173 &tmpl.recvserver, P_STRING, NULL, NULL, NULL},
174 {"recvuser", "$LOGIN",
175 &tmpl.recvuser, P_STRING, NULL, NULL, NULL},
177 &tmpl.recvpass, P_STRING, NULL, NULL, NULL},
179 &tmpl.imapdir, P_STRING, NULL, NULL, NULL},
181 &tmpl.subsonly, P_BOOL, NULL, NULL, NULL},
182 {"mboxfile", "/var/mail/$LOGIN",
183 &tmpl.mboxfile, P_STRING, NULL, NULL, NULL},
185 &tmpl.mailbox, P_STRING, NULL, NULL, NULL},
187 &tmpl.smtpssl, P_INT, NULL, NULL, NULL},
189 &tmpl.recvssl, P_INT, NULL, NULL, NULL},
191 &tmpl.smtpssl_cert, P_STRING, NULL, NULL, NULL},
193 &tmpl.recvssl_cert, P_STRING, NULL, NULL, NULL},
194 {"smtpssl_cert_pass", "",
195 &tmpl.smtpssl_cert, P_STRING, NULL, NULL, NULL},
196 {"recvssl_cert_pass", "",
197 &tmpl.recvssl_cert, P_STRING, NULL, NULL, NULL},
198 {NULL, NULL, NULL, P_INT, NULL, NULL, NULL}
202 static gchar *accountrc_tmpl =
203 "[AccountTemplate]\n"
204 "#you can use $DEFAULTDOMAIN here\n"
205 "#domain must be defined before the variables that use it\n"
206 "#by default, domain is extracted from the hostname\n"
209 "#you can use $USERNAME for name (this is the default)\n"
212 "#you can use $LOGIN, $NAME_MAIL and $DOMAIN here \n"
213 "#$NAME_MAIL is the name without uppercase and with dots instead\n"
215 "#the default is $NAME_MAIL@$DOMAIN\n"
218 "#you can use $DOMAIN here\n"
219 "#the default organization is empty\n"
222 "#you can use $DOMAIN here \n"
223 "#the default is smtp.$DOMAIN\n"
226 "#Whether to use smtp authentication\n"
227 "#the default is 0 (no)\n"
231 "#you can use $LOGIN, $NAME_MAIL, $DOMAIN or $EMAIL here\n"
232 "#the default is empty (same as reception username)\n"
236 "#the default is empty (same as reception password)\n"
239 "#recvtype can be:\n"
242 "#5 for a local mbox file\n"
245 "#you can use $DOMAIN here \n"
246 "#the default is {pop,imap}.$DOMAIN\n"
249 "#you can use $LOGIN, $NAME_MAIL, $DOMAIN or $EMAIL here\n"
250 "#default is $LOGIN\n"
253 "#default is empty\n"
256 "#imap dir if imap (relative to the home on the server)\n"
257 "#default is empty\n"
260 "#show subscribed folders only, if imap\n"
264 "#mbox file if local\n"
265 "#you can use $LOGIN here\n"
266 "#default is /var/mail/$LOGIN\n"
269 "#mailbox name if pop3 or local\n"
270 "#relative path from the user's home\n"
271 "#default is \"Mail\"\n"
274 "#whether to use ssl on smtp connections\n"
275 "#default is 0, 1 is ssl, 2 is starttls\n"
278 "#whether to use ssl on pop or imap connections\n"
279 "#default is 0, 1 is ssl, 2 is starttls\n"
282 "#SSL client certificate path for SMTP\n"
283 "#default is empty (no certificate)\n"
286 "#SSL client certificate path for POP/IMAP\n"
287 "#default is empty (no certificate)\n"
290 "#SSL client certificate password for SMTP\n"
291 "#default is empty (no password)\n"
292 "#smtpssl_cert_pass=\n"
294 "#SSL client certificate password for POP/IMAP\n"
295 "#default is empty (no password)\n"
296 "#recvssl_cert_pass=\n"
299 static gchar *wizard_get_default_domain_name(void)
301 static gchar *domain_name = NULL;
303 if (domain_name == NULL) {
304 domain_name = g_strdup(get_domain_name());
305 if (strchr(domain_name, '.') != NULL
306 && strchr(domain_name, '.') != strrchr(domain_name, '.')
307 && strlen(strchr(domain_name, '.')) > 6) {
308 gchar *tmp = g_strdup(strchr(domain_name, '.')+1);
316 static gchar *get_name_for_mail(void)
319 if (tmpl.name == NULL)
321 name = g_utf8_strdown(tmpl.name, -1);
322 while(strstr(name, " "))
323 *strstr(name, " ")='.';
328 #define PARSE_DEFAULT(str) { \
329 gchar *tmp = NULL, *new = NULL; \
331 tmp = g_strdup(str); \
332 if (strstr(str, "$USERNAME")) { \
333 tmp = g_strdup(str); \
334 *strstr(tmp, "$USERNAME") = '\0'; \
335 new = g_strconcat(tmp, g_get_real_name(), \
336 strstr(str, "$USERNAME")+strlen("$USERNAME"), \
343 if (strstr(str, "$LOGIN")) { \
344 tmp = g_strdup(str); \
345 *strstr(tmp, "$LOGIN") = '\0'; \
346 new = g_strconcat(tmp, g_get_user_name(), \
347 strstr(str, "$LOGIN")+strlen("$LOGIN"), \
354 if (strstr(str, "$EMAIL")) { \
355 tmp = g_strdup(str); \
356 *strstr(tmp, "$EMAIL") = '\0'; \
357 new = g_strconcat(tmp, tmpl.email, \
358 strstr(str, "$EMAIL")+strlen("$EMAIL"), \
365 if (strstr(str, "$NAME_MAIL")) { \
366 tmp = g_strdup(str); \
367 *strstr(tmp, "$NAME_MAIL") = '\0'; \
368 new = g_strconcat(tmp, get_name_for_mail(), \
369 strstr(str, "$NAME_MAIL")+strlen("$NAME_MAIL"), \
376 if (strstr(str, "$DEFAULTDOMAIN")) { \
377 tmp = g_strdup(str); \
378 *strstr(tmp, "$DEFAULTDOMAIN") = '\0'; \
379 new = g_strconcat(tmp, wizard_get_default_domain_name(), \
380 strstr(str, "$DEFAULTDOMAIN")+strlen("$DEFAULTDOMAIN"), \
387 if (strstr(str, "$DOMAIN")) { \
388 tmp = g_strdup(str); \
389 *strstr(tmp, "$DOMAIN") = '\0'; \
390 new = g_strconcat(tmp, tmpl.domain, \
391 strstr(str, "$DOMAIN")+strlen("$DOMAIN"), \
400 static void wizard_read_defaults(void)
404 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, "accountrc.tmpl", NULL);
405 if (!is_file_exist(rcpath)) {
406 str_write_to_file(accountrc_tmpl, rcpath);
409 prefs_read_config(template_params, "AccountTemplate", rcpath, NULL);
411 PARSE_DEFAULT(tmpl.domain);
412 PARSE_DEFAULT(tmpl.name);
413 PARSE_DEFAULT(tmpl.email);
414 PARSE_DEFAULT(tmpl.organization);
415 PARSE_DEFAULT(tmpl.smtpserver);
416 PARSE_DEFAULT(tmpl.smtpuser);
417 PARSE_DEFAULT(tmpl.smtppass);
418 PARSE_DEFAULT(tmpl.recvserver);
419 PARSE_DEFAULT(tmpl.recvuser);
420 PARSE_DEFAULT(tmpl.recvpass);
421 PARSE_DEFAULT(tmpl.imapdir);
422 PARSE_DEFAULT(tmpl.mboxfile);
423 PARSE_DEFAULT(tmpl.mailbox);
426 "%s, %s, %s, %s, %s, %d, %s, %s, %s, %s, %s, %s, %d, %d\n",
427 tmpl.name,tmpl.domain,tmpl.email,tmpl.organization,tmpl.smtpserver,
428 tmpl.recvtype,tmpl.recvserver,tmpl.recvuser,tmpl.recvpass,
429 tmpl.imapdir,tmpl.mboxfile,tmpl.mailbox,tmpl.smtpssl,tmpl.recvssl);
434 static void initialize_fonts(WizardWindow *wizard)
436 GtkWidget *widget = wizard->email;
437 gint size = pango_font_description_get_size(
438 gtk_widget_get_style(widget)->font_desc)
442 PangoFontDescription *bold_desc;
443 gchar *curfont = pango_font_description_to_string(widget->style->font_desc);
444 g_free(prefs_common.smallfont);
445 g_free(prefs_common.normalfont);
446 g_free(prefs_common.boldfont);
447 prefs_common.smallfont = g_strdup(curfont);
448 prefs_common.normalfont = g_strdup(curfont);
449 bold_desc = pango_font_description_from_string(curfont);
450 pango_font_description_set_weight(bold_desc, PANGO_WEIGHT_BOLD);
451 prefs_common.boldfont = pango_font_description_to_string(bold_desc);
452 pango_font_description_free(bold_desc);
455 tmp = g_strdup(prefs_common.textfont);
456 if (strrchr(tmp, ' ')) {
457 *(strrchr(tmp, ' ')) = '\0';
458 new = g_strdup_printf("%s %d", tmp, size);
459 g_free(prefs_common.textfont);
460 prefs_common.textfont = new;
464 tmp = g_strdup(prefs_common.smallfont);
465 if (strrchr(tmp, ' ')) {
466 *(strrchr(tmp, ' ')) = '\0';
467 new = g_strdup_printf("%s %d", tmp, size);
468 g_free(prefs_common.smallfont);
469 prefs_common.smallfont = new;
473 tmp = g_strdup(prefs_common.normalfont);
474 if (strrchr(tmp, ' ')) {
475 *(strrchr(tmp, ' ')) = '\0';
476 new = g_strdup_printf("%s %d", tmp, size);
477 g_free(prefs_common.normalfont);
478 prefs_common.normalfont = new;
482 tmp = g_strdup(prefs_common.boldfont);
483 if (strrchr(tmp, ' ')) {
484 *(strrchr(tmp, ' ')) = '\0';
485 new = g_strdup_printf("%s %d", tmp, size);
486 g_free(prefs_common.boldfont);
487 prefs_common.boldfont = new;
492 #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"
493 #define FACE "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAM1BMVEUAAAAcJCI\n\
494 ONl1JUi0+Z4daY2NZciPabV9ykS5kj6Wsl2ybmZOBsMjZxK2wzN3Pzczs7OsCAGN0AAAAAXRSTlM\n\
495 AQObYZgAAAAFiS0dEAIgFHUgAAAIVSURBVEjH1ZbtlqMgDIaFECoGhPu/2s0b0Lais/NzN6d1OJ7\n\
496 3yReQzrL8B5Zy3rvl9At52Pf2tv1vSMjtYj8jaa8XUyI/yn3YD6sigj/2Tf5Bn069MIsTPHvx/t5\n\
497 /3rU/6JCIY3YwGe26r/cwUfE3cFe5T28L0K5rJAUHEeYAQxs8DHojjk3M9wECU4xxjXisI8RA0gy\n\
498 oczJZJOjxiTFZVTchAnIRJrgdmEGDyFfAI3UuG5FmYTkR9RDrIC4H0SqV4pzpEcUp0HNLjwBv+jA\n\
499 dikUE5g9iBvzmu3sH2oDk4lnHd829+2Q9gj6kDqDPg7hsGwBzH02fE3ZCt6ZHmlNKIMjMeRwra5I\n\
500 ecgNoBnLGPmzaHPJIwLY8Sq2M/tLUJfj0QcqmfVXAdLSStIYF8dzWjBBb2VgvDa4mO9oc651OiUo\n\
501 BEKbZokdPATF9E9oKAjQJcJOniaPXrVZRAnVWaqIyqRoNC8ZJvgCcW8XN39RqxVP1rS8Yd4WnCdN\n\
502 aRTo2jJRDbg3vtCpEUGffgDPhqKDaSuVqYtOplFIvIcx3HUI5/MuIWl6vKyBjNlqEru8hbFXqBPA\n\
503 5TpHGIUZOePeaIyzfQ/g9Xg0opU1AvdfXM9floYhv92pPAE96OZtkPV8eivgQi9RTfwPUU36I26n\n\
504 Hy+WuCJzAT7efMSeA1TNf2/VugDz+dN139xfA5ffxGZDD+MvcP/uvyB80wzZ76wbz8gAAAABJRU5\n\
507 static void write_welcome_email(WizardWindow *wizard)
513 const gchar *mailbox = gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name));
514 Folder *folder = folder_find_from_path(mailbox);
515 FolderItem *inbox = folder ? folder->inbox:NULL;
516 gchar *file = get_tmp_file();
517 gchar enc_from_name[BUFFSIZE], enc_to_name[BUFFSIZE], enc_subject[BUFFSIZE];
519 get_rfc822_date(buf_date, sizeof(buf_date));
521 conv_encode_header_full(enc_subject, sizeof(enc_subject),
522 C_("Welcome Mail Subject", "Welcome to Claws Mail"),
523 strlen("Subject: "), FALSE, CS_INTERNAL);
524 conv_encode_header_full(enc_to_name, sizeof(enc_to_name),
525 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)),
526 strlen("To: "), TRUE, CS_INTERNAL);
527 conv_encode_header_full(enc_from_name, sizeof(enc_from_name),
528 _("The Claws Mail Team"),
529 strlen("From: "), TRUE, CS_INTERNAL);
531 head = g_strdup_printf(
538 "Content-Type: text/plain; charset=UTF-8\n",
542 gtk_entry_get_text(GTK_ENTRY(wizard->email)),
543 buf_date, enc_subject, XFACE, FACE);
544 body = g_strdup_printf(
546 "Welcome to Claws Mail\n"
547 "---------------------\n"
549 "Now that you have set up your account you can fetch your\n"
550 "mail by clicking the 'Get Mail' button at the left of the\n"
553 "Claws Mail has lots of extra features accessible via plugins,\n"
554 "like anti-spam filtering and learning (via the Bogofilter or\n"
555 "SpamAssassin plugins), privacy protection (via PGP/Mime), an RSS\n"
556 "aggregator, a calendar, and much more. You can load them from\n"
557 "the menu entry '/Configuration/Plugins'.\n"
559 "You can change your Account Preferences by using the menu\n"
560 "entry '/Configuration/Preferences for current account'\n"
561 "and change the general Preferences by using\n"
562 "'/Configuration/Preferences'.\n"
564 "You can find further information in the Claws Mail manual,\n"
565 "which can be accessed by using the menu entry '/Help/Manual'\n"
566 "or online at the URL given below.\n"
574 "Mailing Lists: <%s>\n"
578 "Claws Mail is free software, released under the terms\n"
579 "of the GNU General Public License, version 3 or later, as\n"
580 "published by the Free Software Foundation, 51 Franklin Street,\n"
581 "Fifth Floor, Boston, MA 02110-1301, USA. The license can be\n"
586 "If you wish to donate to the Claws Mail project you can do\n"
588 HOMEPAGE_URI, MANUAL_URI, FAQ_URI, THEMES_URI, MAILING_LIST_URI,
589 GPL_URI, DONATE_URI);
591 msg = g_strconcat(head, body, NULL);
593 if (inbox && inbox->total_msgs == 0
594 && str_write_to_file(msg, file) >= 0) {
595 MsgFlags flags = { MSG_UNREAD|MSG_NEW, 0};
596 folder_item_add_msg(inbox, file, &flags, FALSE);
605 static gboolean wizard_write_config(WizardWindow *wizard)
607 static gboolean mailbox_ok = FALSE;
608 PrefsAccount *prefs_account = prefs_account_new();
609 GList *account_list = NULL;
610 gchar *smtp_server, *recv_server;
611 gint smtp_port, recv_port;
613 SSLType smtp_ssl_type, recv_ssl_type;
616 prefs_account->protocol = combobox_get_active_data(
617 GTK_COMBO_BOX(wizard->recv_type));
619 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4 &&
620 !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)))) {
621 alertpanel_error(_("Please enter the mailbox name."));
622 g_free(prefs_account);
623 gtk_notebook_set_current_page (
624 GTK_NOTEBOOK(wizard->notebook),
630 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
631 mailbox_ok = setup_write_mailbox_path(wizard->mainwin,
633 GTK_ENTRY(wizard->mailbox_name)));
639 /* alertpanel done by setup_write_mailbox_path */
640 g_free(prefs_account);
641 gtk_notebook_set_current_page (
642 GTK_NOTEBOOK(wizard->notebook),
647 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->full_name)))
648 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->email)))) {
649 alertpanel_error(_("Please enter your name and email address."));
650 g_free(prefs_account);
651 gtk_notebook_set_current_page (
652 GTK_NOTEBOOK(wizard->notebook),
657 if (prefs_account->protocol != A_LOCAL) {
658 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)))
659 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
660 alertpanel_error(_("Please enter your receiving server "
662 g_free(prefs_account);
663 gtk_notebook_set_current_page (
664 GTK_NOTEBOOK(wizard->notebook),
669 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
670 alertpanel_error(_("Please enter your username."));
671 g_free(prefs_account);
672 gtk_notebook_set_current_page (
673 GTK_NOTEBOOK(wizard->notebook),
679 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)))) {
680 alertpanel_error(_("Please enter your SMTP server."));
681 g_free(prefs_account);
682 gtk_notebook_set_current_page (
683 GTK_NOTEBOOK(wizard->notebook),
688 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
689 if (prefs_account->protocol == A_LOCAL
690 && !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)))) {
691 alertpanel_error(_("Please enter your SMTP username."));
692 g_free(prefs_account);
693 gtk_notebook_set_current_page (
694 GTK_NOTEBOOK(wizard->notebook),
697 } /* if it's not local we'll use the reception server */
700 if (prefs_account->protocol != A_LOCAL)
701 prefs_account->account_name = g_strdup_printf("%s@%s",
702 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)),
703 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
705 prefs_account->account_name = g_strdup_printf("%s",
706 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
708 recv_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
709 smtp_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)));
711 if (prefs_account->protocol != A_LOCAL && strstr(recv_server, ":")) {
712 recv_port = atoi(strstr(recv_server, ":")+1);
713 *(strstr(recv_server, ":")) = '\0';
714 if (prefs_account->protocol == A_IMAP4) {
715 prefs_account->set_imapport = TRUE;
716 prefs_account->imapport = recv_port;
717 } else if (prefs_account->protocol == A_POP3) {
718 prefs_account->set_popport = TRUE;
719 prefs_account->popport = recv_port;
722 if (strstr(smtp_server, ":")) {
723 smtp_port = atoi(strstr(smtp_server, ":")+1);
724 *(strstr(smtp_server, ":")) = '\0';
725 prefs_account->set_smtpport = TRUE;
726 prefs_account->smtpport = smtp_port;
729 prefs_account->name = g_strdup(
730 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)));
731 prefs_account->address = g_strdup(
732 gtk_entry_get_text(GTK_ENTRY(wizard->email)));
733 prefs_account->organization = g_strdup(
734 gtk_entry_get_text(GTK_ENTRY(wizard->organization)));
735 prefs_account->smtp_server = g_strdup(smtp_server);
737 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
739 tmp = g_path_get_basename(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)));
740 prefs_account->inbox = g_strdup_printf("#mh/%s/inbox",
741 (!strcmp("Mail", gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name))))
744 prefs_account->local_inbox = g_strdup(prefs_account->inbox);
745 } else if (prefs_account->protocol != A_IMAP4) {
746 if (folder_get_default_inbox())
747 prefs_account->local_inbox =
748 folder_item_get_identifier(folder_get_default_inbox());
751 if (prefs_account->protocol != A_LOCAL)
752 prefs_account->recv_server = g_strdup(recv_server);
754 prefs_account->local_mbox = g_strdup(recv_server);
759 prefs_account->userid = g_strdup(
760 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)));
761 prefs_account->passwd = g_strdup(
762 gtk_entry_get_text(GTK_ENTRY(wizard->recv_password)));
764 prefs_account->smtp_userid = g_strdup(
765 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)));
766 prefs_account->smtp_passwd = g_strdup(
767 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_password)));
768 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
769 prefs_account->use_smtp_auth = TRUE;
773 smtp_ssl_type = SSL_NONE;
774 recv_ssl_type = SSL_NONE;
776 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl))) {
777 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls)))
778 smtp_ssl_type = SSL_STARTTLS;
780 smtp_ssl_type = SSL_TUNNEL;
782 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl))) {
783 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls)))
784 recv_ssl_type = SSL_STARTTLS;
786 recv_ssl_type = SSL_TUNNEL;
789 prefs_account->ssl_smtp = smtp_ssl_type;
791 if (prefs_account->protocol == A_IMAP4)
792 prefs_account->ssl_imap = recv_ssl_type;
794 prefs_account->ssl_pop = recv_ssl_type;
796 prefs_account->out_ssl_client_cert_file = g_strdup(
797 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_ssl_cert_file)));
798 prefs_account->out_ssl_client_cert_pass = g_strdup(
799 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_ssl_cert_pass)));
800 prefs_account->in_ssl_client_cert_file = g_strdup(
801 gtk_entry_get_text(GTK_ENTRY(wizard->recv_ssl_cert_file)));
802 prefs_account->in_ssl_client_cert_pass = g_strdup(
803 gtk_entry_get_text(GTK_ENTRY(wizard->recv_ssl_cert_pass)));
805 if (prefs_account->protocol == A_IMAP4) {
806 gchar *directory = gtk_editable_get_chars(
807 GTK_EDITABLE(wizard->recv_imap_subdir), 0, -1);
808 if (directory && strlen(directory)) {
809 prefs_account->imap_dir = g_strdup(directory);
811 prefs_account->imap_subsonly =
812 gtk_toggle_button_get_active(
813 GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn));
817 account_list = g_list_append(account_list, prefs_account);
818 prefs_account_write_config_all(account_list);
819 prefs_account_free(prefs_account);
820 account_read_config_all();
822 initialize_fonts(wizard);
823 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4)
824 write_welcome_email(wizard);
827 plugin_load_standard_plugins();
832 static GtkWidget* create_page (WizardWindow *wizard, const char * title)
840 vbox = gtk_vbox_new (FALSE, 6);
841 gtk_container_set_border_width (GTK_CONTAINER(vbox), 10);
843 /* create the titlebar */
844 hbox = gtk_hbox_new (FALSE, 12);
845 image = stock_pixmap_widget(wizard->window,
846 STOCK_PIXMAP_CLAWS_MAIL_ICON);
847 gtk_box_pack_start (GTK_BOX(hbox), image, FALSE, FALSE, 0);
848 title_string = g_strconcat ("<span size=\"xx-large\" weight=\"ultrabold\">", title ? title : "", "</span>", NULL);
849 w = gtk_label_new (title_string);
850 gtk_label_set_use_markup (GTK_LABEL(w), TRUE);
851 g_free (title_string);
852 gtk_box_pack_start (GTK_BOX(hbox), w, FALSE, FALSE, 0);
854 /* pack the titlebar */
855 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
857 /* pack the separator */
858 gtk_box_pack_start (GTK_BOX(vbox), gtk_hseparator_new(), FALSE, FALSE, 0);
861 w = gtk_alignment_new (0, 0, 0, 0);
862 gtk_widget_set_size_request (w, 0, 6);
863 gtk_box_pack_start (GTK_BOX(vbox), w, FALSE, FALSE, 0);
868 #define PACK_BOX(hbox,text,entry) { \
869 GtkWidget *label = gtk_label_new(text); \
870 gtk_label_set_use_markup(GTK_LABEL(label), TRUE); \
871 if (GTK_IS_MISC(label)) \
872 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); \
873 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); \
874 gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); \
877 static gchar *get_default_server(WizardWindow * wizard, const gchar *type)
879 if (!strcmp(type, "smtp")) {
880 if (!tmpl.smtpserver || !strlen(tmpl.smtpserver))
881 return g_strconcat(type, ".", tmpl.domain, NULL);
883 return g_strdup(tmpl.smtpserver);
885 if (!tmpl.recvserver || !strlen(tmpl.recvserver))
886 return g_strconcat(type, ".", tmpl.domain, NULL);
888 return g_strdup(tmpl.recvserver);
892 static gchar *get_default_account(WizardWindow * wizard)
894 gchar *result = NULL;
896 if (!tmpl.recvuser || !strlen(tmpl.recvuser)) {
897 result = gtk_editable_get_chars(
898 GTK_EDITABLE(wizard->email), 0, -1);
900 if (strstr(result, "@")) {
901 *(strstr(result,"@")) = '\0';
904 result = g_strdup(tmpl.recvuser);
909 static gchar *get_default_smtp_account(WizardWindow * wizard)
911 gchar *result = NULL;
913 if (!tmpl.smtpuser || !strlen(tmpl.smtpuser)) {
916 result = g_strdup(tmpl.smtpuser);
921 static void wizard_email_changed(GtkWidget *widget, gpointer data)
923 WizardWindow *wizard = (WizardWindow *)data;
924 RecvProtocol protocol;
926 protocol = combobox_get_active_data(GTK_COMBO_BOX(wizard->recv_type));
928 text = get_default_server(wizard, "smtp");
929 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
932 text = get_default_account(wizard);
933 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
936 if (protocol == A_POP3) {
937 text = get_default_server(wizard, "pop");
938 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
940 } else if (protocol == A_IMAP4) {
941 text = get_default_server(wizard, "imap");
942 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
944 } else if (protocol == A_LOCAL) {
945 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
950 static GtkWidget* user_page (WizardWindow * wizard)
952 GtkWidget *table = gtk_table_new(1,1, FALSE);
955 GtkWidget *user_table;
957 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
958 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
960 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
961 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
963 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
964 GTK_EXPAND|GTK_FILL, 0, 0, 0);
966 user_table = gtk_table_new(3, 2, FALSE);
967 gtk_table_set_row_spacings(GTK_TABLE(user_table), VSPACING_NARROW);
968 gtk_box_pack_start(GTK_BOX(vbox), user_table, FALSE, FALSE, 0);
970 label = gtk_label_new(_("<span weight=\"bold\">Your name:</span>"));
971 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
972 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
973 gtk_table_attach(GTK_TABLE(user_table), label, 0,1,0,1,
974 GTK_FILL, 0, VSPACING_NARROW, 0);
975 wizard->full_name = gtk_entry_new();
976 gtk_entry_set_text(GTK_ENTRY(wizard->full_name), tmpl.name?tmpl.name:"");
977 gtk_table_attach(GTK_TABLE(user_table), wizard->full_name, 1,2,0,1,
978 GTK_EXPAND|GTK_FILL, 0, 0, 0);
980 label = gtk_label_new(_("<span weight=\"bold\">Your email address:</span>"));
981 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
982 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
983 gtk_table_attach(GTK_TABLE(user_table), label, 0,1,1,2,
984 GTK_FILL, 0, VSPACING_NARROW, 0);
985 wizard->email = gtk_entry_new();
986 gtk_entry_set_text(GTK_ENTRY(wizard->email), tmpl.email?tmpl.email:"");
987 gtk_table_attach(GTK_TABLE(user_table), wizard->email, 1,2,1,2,
988 GTK_EXPAND|GTK_FILL, 0, 0, 0);
990 label = gtk_label_new(_("Your organization:"));
991 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
992 gtk_table_attach(GTK_TABLE(user_table), label, 0,1,2,3,
993 GTK_FILL, 0, VSPACING_NARROW, 0);
994 wizard->organization = gtk_entry_new();
995 gtk_entry_set_text(GTK_ENTRY(wizard->organization), tmpl.organization?tmpl.organization:"");
996 gtk_table_attach(GTK_TABLE(user_table), wizard->organization, 1,2,2,3,
997 GTK_EXPAND|GTK_FILL, 0, 0, 0);
999 g_signal_connect(G_OBJECT(wizard->email), "changed",
1000 G_CALLBACK(wizard_email_changed),
1005 static GtkWidget* mailbox_page (WizardWindow * wizard)
1007 GtkWidget *table = gtk_table_new(1,1, FALSE);
1011 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1012 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1014 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1015 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1017 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1018 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1020 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1021 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1023 wizard->mailbox_label = gtk_label_new(_("<span weight=\"bold\">Mailbox name:</span>"));
1024 gtk_label_set_use_markup(GTK_LABEL(wizard->mailbox_label), TRUE);
1025 if (GTK_IS_MISC(wizard->mailbox_label))
1026 gtk_misc_set_alignment(GTK_MISC(wizard->mailbox_label), 1, 0.5);
1027 wizard->mailbox_name = gtk_entry_new();
1029 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), tmpl.mailbox?tmpl.mailbox:"");
1031 CLAWS_SET_TIP(wizard->mailbox_name, _("You can also specify an absolute path, for example: "
1032 "\"/home/john/Documents/Mail\""));
1034 gtk_box_pack_start(GTK_BOX(hbox), wizard->mailbox_label, FALSE, FALSE, 0);
1035 gtk_box_pack_start(GTK_BOX(hbox), wizard->mailbox_name, TRUE, TRUE, 0);
1040 static void smtp_auth_changed (GtkWidget *btn, gpointer data)
1042 WizardWindow *wizard = (WizardWindow *)data;
1043 gboolean do_auth = gtk_toggle_button_get_active(
1044 GTK_TOGGLE_BUTTON(wizard->smtp_auth));
1045 gtk_widget_set_sensitive(wizard->smtp_username, do_auth);
1046 gtk_widget_set_sensitive(wizard->smtp_username_label, do_auth);
1047 gtk_widget_set_sensitive(wizard->smtp_password, do_auth);
1048 gtk_widget_set_sensitive(wizard->smtp_password_label, do_auth);
1052 static void cert_browse_cb(GtkWidget *widget, gpointer data)
1054 GtkEntry *dest = GTK_ENTRY(data);
1056 gchar *utf8_filename;
1058 filename = filesel_select_file_open(_("Select certificate file"), NULL);
1059 if (!filename) return;
1061 utf8_filename = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
1062 if (!utf8_filename) {
1063 g_warning("cert_browse_cb(): failed to convert character set.");
1064 utf8_filename = g_strdup(filename);
1066 gtk_entry_set_text(dest, utf8_filename);
1067 g_free(utf8_filename);
1071 static GtkWidget* smtp_page (WizardWindow * wizard)
1073 GtkWidget *table = gtk_table_new(1, 1, FALSE);
1076 GtkWidget *hbox_spc;
1077 GtkWidget *smtp_auth_table;
1081 GtkWidget *smtp_cert_table;
1085 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1086 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1088 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1089 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1091 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1092 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1094 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1095 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1096 wizard->smtp_server = gtk_entry_new();
1097 text = get_default_server(wizard, "smtp");
1098 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
1101 CLAWS_SET_TIP(wizard->smtp_server,
1102 _("You can specify the port number by appending it at the end: "
1103 "\"mail.example.com:25\""));
1105 PACK_BOX(hbox, _("<span weight=\"bold\">SMTP server address:</span>"),
1106 wizard->smtp_server);
1108 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1109 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1110 wizard->smtp_auth = gtk_check_button_new_with_label(
1111 _("Use authentication"));
1112 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth),
1114 g_signal_connect(G_OBJECT(wizard->smtp_auth), "toggled",
1115 G_CALLBACK(smtp_auth_changed),
1117 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_auth, FALSE, FALSE, 0);
1119 label = gtk_label_new(_("<span size=\"small\">(empty to use the same as receive)</span>"));
1120 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
1121 SET_TOGGLE_SENSITIVITY (wizard->smtp_auth, label);
1122 gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 0);
1124 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1125 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1126 hbox_spc = gtk_hbox_new (FALSE, 0);
1127 gtk_widget_set_size_request (hbox_spc, 12, -1);
1128 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1129 smtp_auth_table = gtk_table_new(2, 2, FALSE);
1130 SET_TOGGLE_SENSITIVITY (wizard->smtp_auth, smtp_auth_table);
1131 gtk_box_pack_start(GTK_BOX(hbox), smtp_auth_table, TRUE, TRUE, 0);
1133 wizard->smtp_username_label = gtk_label_new(_("SMTP username:"));
1134 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_username_label), 1, 0.5);
1135 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_username_label, 0,1,0,1,
1136 GTK_FILL, 0, VSPACING_NARROW, 0);
1137 text = get_default_smtp_account(wizard);
1138 wizard->smtp_username = gtk_entry_new();
1139 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_username), text);
1141 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_username, 1,2,0,1,
1142 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1144 wizard->smtp_password_label = gtk_label_new(_("SMTP password:"));
1145 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_password_label), 1, 0.5);
1146 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_password_label, 0,1,1,2,
1147 GTK_FILL, 0, VSPACING_NARROW, 0);
1148 wizard->smtp_password = gtk_entry_new();
1149 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_password), tmpl.smtppass?tmpl.smtppass:"");
1150 gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_password), FALSE);
1151 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_password, 1,2,1,2,
1152 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1154 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1155 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1156 wizard->smtp_use_ssl = gtk_check_button_new_with_label(
1157 _("Use SSL to connect to SMTP server"));
1158 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl),
1160 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_ssl, FALSE, FALSE, 0);
1162 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1163 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1164 hbox_spc = gtk_hbox_new (FALSE, 0);
1165 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1166 gtk_widget_set_size_request (hbox_spc, 12, -1);
1167 wizard->smtp_use_tls = gtk_check_button_new_with_label(
1168 _("Use SSL via STARTTLS"));
1169 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls),
1171 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_tls, FALSE, FALSE, 0);
1172 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, wizard->smtp_use_tls);
1174 smtp_cert_table = gtk_table_new(3,3, FALSE);
1175 gtk_box_pack_start (GTK_BOX(vbox), smtp_cert_table, FALSE, FALSE, 4);
1176 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1177 hbox_spc = gtk_hbox_new (FALSE, 0);
1178 gtk_widget_set_size_request (hbox_spc, 12, -1);
1179 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1180 label = gtk_label_new(_("Client SSL certificate (optional)"));
1181 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
1182 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1183 gtk_table_attach(GTK_TABLE(smtp_cert_table), hbox, 0, 3, 0, 1, GTK_FILL, 0, 0, 0);
1184 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1185 hbox_spc = gtk_hbox_new (FALSE, 0);
1186 gtk_widget_set_size_request (hbox_spc, 12, -1);
1187 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1188 label = gtk_label_new(_("File"));
1189 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1190 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1191 gtk_table_attach(GTK_TABLE(smtp_cert_table), hbox, 0, 1, 1, 2,
1192 GTK_FILL, 0, VSPACING_NARROW, 0);
1193 wizard->smtp_ssl_cert_file = gtk_entry_new();
1194 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_ssl_cert_file), tmpl.smtpssl_cert?tmpl.smtpssl_cert:"");
1195 gtk_table_attach(GTK_TABLE(smtp_cert_table), wizard->smtp_ssl_cert_file, 1, 2, 1, 2, GTK_FILL, 0, 0, 0);
1196 button = gtkut_get_browse_file_btn(_("Browse"));
1197 gtk_table_attach(GTK_TABLE(smtp_cert_table), button, 2, 3, 1, 2,
1198 GTK_FILL, 0, VSPACING_NARROW, 0);
1199 g_signal_connect(G_OBJECT(button), "clicked",
1200 G_CALLBACK(cert_browse_cb), wizard->smtp_ssl_cert_file);
1202 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1203 hbox_spc = gtk_hbox_new (FALSE, 0);
1204 gtk_widget_set_size_request (hbox_spc, 12, -1);
1205 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1206 label = gtk_label_new(_("Password"));
1207 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1208 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1209 gtk_table_attach(GTK_TABLE(smtp_cert_table), hbox, 0, 1, 2, 3,
1210 GTK_FILL, 0, VSPACING_NARROW, 0);
1211 wizard->smtp_ssl_cert_pass = gtk_entry_new();
1212 gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_ssl_cert_pass), FALSE);
1213 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_ssl_cert_pass), tmpl.smtpssl_cert_pass?tmpl.smtpssl_cert_pass:"");
1214 gtk_table_attach(GTK_TABLE(smtp_cert_table), wizard->smtp_ssl_cert_pass, 1, 2, 2, 3, GTK_FILL, 0, 0, 0);
1215 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, smtp_cert_table);
1216 wizard->smtp_cert_table = smtp_cert_table;
1218 smtp_auth_changed(NULL, wizard);
1222 static void wizard_protocol_change(WizardWindow *wizard, RecvProtocol protocol)
1226 if (protocol == A_POP3) {
1227 text = get_default_server(wizard, "pop");
1228 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1229 gtk_widget_hide(wizard->recv_imap_label);
1230 gtk_widget_hide(wizard->recv_imap_subdir);
1231 gtk_widget_hide(wizard->subsonly_checkbtn);
1232 gtk_widget_show(wizard->recv_username);
1233 gtk_widget_show(wizard->recv_password);
1234 gtk_widget_show(wizard->recv_username_label);
1235 gtk_widget_show(wizard->recv_password_label);
1236 gtk_widget_hide(wizard->no_imap_warning);
1238 gtk_widget_show(wizard->recv_use_ssl);
1239 gtk_widget_show(wizard->recv_use_tls);
1240 gtk_widget_show(wizard->recv_cert_table);
1242 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1243 gtk_widget_show(wizard->auto_configure_btn);
1244 gtk_widget_hide(wizard->auto_configure_cancel_btn);
1245 gtk_widget_show(wizard->auto_configure_lbl);
1247 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1248 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1249 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1251 if (wizard->create_mailbox) {
1252 gtk_widget_show(wizard->mailbox_label);
1253 gtk_widget_show(wizard->mailbox_name);
1255 } else if (protocol == A_IMAP4) {
1256 #ifdef HAVE_LIBETPAN
1257 text = get_default_server(wizard, "imap");
1258 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1259 gtk_widget_show(wizard->recv_imap_label);
1260 gtk_widget_show(wizard->recv_imap_subdir);
1261 gtk_widget_show(wizard->subsonly_checkbtn);
1262 gtk_widget_show(wizard->recv_username);
1263 gtk_widget_show(wizard->recv_password);
1264 gtk_widget_show(wizard->recv_username_label);
1265 gtk_widget_show(wizard->recv_password_label);
1266 gtk_widget_hide(wizard->no_imap_warning);
1268 gtk_widget_show(wizard->recv_use_ssl);
1269 gtk_widget_show(wizard->recv_use_tls);
1270 gtk_widget_show(wizard->recv_cert_table);
1272 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1273 gtk_widget_show(wizard->auto_configure_btn);
1274 gtk_widget_hide(wizard->auto_configure_cancel_btn);
1275 gtk_widget_show(wizard->auto_configure_lbl);
1277 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1278 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1279 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1281 if (wizard->create_mailbox) {
1282 gtk_widget_hide(wizard->mailbox_label);
1283 gtk_widget_hide(wizard->mailbox_name);
1286 gtk_widget_hide(wizard->recv_imap_label);
1287 gtk_widget_hide(wizard->recv_imap_subdir);
1288 gtk_widget_hide(wizard->subsonly_checkbtn);
1289 gtk_widget_hide(wizard->recv_username);
1290 gtk_widget_hide(wizard->recv_password);
1291 gtk_widget_hide(wizard->recv_username_label);
1292 gtk_widget_hide(wizard->recv_password_label);
1293 gtk_widget_show(wizard->no_imap_warning);
1294 if (wizard->create_mailbox) {
1295 gtk_widget_hide(wizard->mailbox_label);
1296 gtk_widget_hide(wizard->mailbox_name);
1299 gtk_widget_hide(wizard->recv_use_ssl);
1300 gtk_widget_hide(wizard->recv_use_tls);
1301 gtk_widget_hide(wizard->recv_cert_table);
1303 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, FALSE);
1305 } else if (protocol == A_LOCAL) {
1306 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
1307 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Local mailbox:</span>"));
1308 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1309 gtk_widget_hide(wizard->no_imap_warning);
1310 gtk_widget_hide(wizard->recv_imap_label);
1311 gtk_widget_hide(wizard->recv_imap_subdir);
1312 gtk_widget_hide(wizard->subsonly_checkbtn);
1313 gtk_widget_hide(wizard->recv_username);
1314 gtk_widget_hide(wizard->recv_password);
1315 gtk_widget_hide(wizard->recv_username_label);
1316 gtk_widget_hide(wizard->recv_password_label);
1317 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1318 gtk_widget_hide(wizard->auto_configure_btn);
1319 gtk_widget_hide(wizard->auto_configure_cancel_btn);
1320 gtk_widget_hide(wizard->auto_configure_lbl);
1323 gtk_widget_hide(wizard->recv_use_ssl);
1324 gtk_widget_hide(wizard->recv_use_tls);
1325 gtk_widget_hide(wizard->recv_cert_table);
1327 if (wizard->create_mailbox) {
1328 gtk_widget_show(wizard->mailbox_label);
1329 gtk_widget_show(wizard->mailbox_name);
1331 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1335 static void wizard_protocol_changed(GtkComboBox *combo, gpointer data)
1337 WizardWindow *wizard = (WizardWindow *)data;
1338 RecvProtocol protocol = combobox_get_active_data(combo);
1340 wizard_protocol_change(wizard, protocol);
1343 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1344 static void auto_configure_cb (GtkWidget *widget, gpointer data)
1346 gchar *address = NULL;
1347 const gchar *domain = NULL;
1348 AutoConfigureData *recv_data;
1349 AutoConfigureData *send_data;
1350 static GCancellable *recv_cancel = NULL;
1351 static GCancellable *send_cancel = NULL;
1352 WizardWindow *wizard = (WizardWindow *)data;
1353 RecvProtocol protocol = combobox_get_active_data(GTK_COMBO_BOX(wizard->recv_type));
1356 recv_cancel = g_cancellable_new();
1357 send_cancel = g_cancellable_new();
1360 if (widget == wizard->auto_configure_cancel_btn) {
1361 g_cancellable_cancel(recv_cancel);
1362 g_cancellable_cancel(send_cancel);
1363 g_object_unref(recv_cancel);
1364 g_object_unref(send_cancel);
1370 address = gtk_editable_get_chars(GTK_EDITABLE(wizard->email), 0, -1);
1372 if (strchr(address, '@') < 0) {
1374 gtk_label_set_text(GTK_LABEL(wizard->auto_configure_lbl),
1375 _("Failed (wrong address)"));
1377 domain = strchr(address, '@') + 1;
1379 if (protocol == A_POP3 || protocol == A_IMAP4) {
1380 recv_data = g_new0(AutoConfigureData, 1);
1381 recv_data->configure_button = GTK_BUTTON(wizard->auto_configure_btn);
1382 recv_data->cancel_button = GTK_BUTTON(wizard->auto_configure_cancel_btn);
1383 recv_data->info_label = GTK_LABEL(wizard->auto_configure_lbl);
1384 recv_data->cancel = recv_cancel;
1387 recv_data->ssl_service = "pop3s";
1388 recv_data->tls_service = "pop3";
1389 recv_data->domain = g_strdup(domain);
1390 recv_data->hostname_entry = GTK_ENTRY(wizard->recv_server);
1391 recv_data->set_port = NULL;
1392 recv_data->port = NULL;
1393 recv_data->tls_checkbtn = GTK_TOGGLE_BUTTON(wizard->recv_use_tls);
1394 recv_data->ssl_checkbtn = GTK_TOGGLE_BUTTON(wizard->recv_use_ssl);
1395 recv_data->default_port = 110;
1396 recv_data->default_ssl_port = 995;
1399 recv_data->ssl_service = "imaps";
1400 recv_data->tls_service = "imap";
1401 recv_data->domain = g_strdup(domain);
1402 recv_data->hostname_entry = GTK_ENTRY(wizard->recv_server);
1403 recv_data->set_port = NULL;
1404 recv_data->port = NULL;
1405 recv_data->tls_checkbtn = GTK_TOGGLE_BUTTON(wizard->recv_use_tls);
1406 recv_data->ssl_checkbtn = GTK_TOGGLE_BUTTON(wizard->recv_use_ssl);
1407 recv_data->default_port = 143;
1408 recv_data->default_ssl_port = 993;
1411 cm_return_if_fail(FALSE);
1413 auto_configure_service(recv_data);
1416 send_data = g_new0(AutoConfigureData, 1);
1417 send_data->configure_button = GTK_BUTTON(wizard->auto_configure_btn);
1418 send_data->cancel_button = GTK_BUTTON(wizard->auto_configure_cancel_btn);
1419 send_data->info_label = GTK_LABEL(wizard->auto_configure_lbl);
1420 send_data->cancel = send_cancel;
1422 send_data->ssl_service = NULL;
1423 send_data->tls_service = "submission";
1424 send_data->domain = g_strdup(domain);
1425 send_data->hostname_entry = GTK_ENTRY(wizard->smtp_server);
1426 send_data->set_port = NULL;
1427 send_data->port = NULL;
1428 send_data->tls_checkbtn = GTK_TOGGLE_BUTTON(wizard->smtp_use_tls);
1429 send_data->ssl_checkbtn = GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl);
1430 send_data->default_port = 25;
1431 send_data->default_ssl_port = -1;
1432 send_data->auth_checkbtn = wizard->smtp_auth;
1434 auto_configure_service(send_data);
1440 static GtkWidget* recv_page (WizardWindow * wizard)
1442 GtkWidget *table = gtk_table_new(1,1, FALSE);
1445 GtkWidget *hbox_spc;
1446 GtkWidget *recv_table;
1450 GtkWidget *recv_cert_table;
1452 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1453 GtkWidget *auto_configure_btn;
1454 GtkWidget *auto_configure_cancel_btn;
1455 GtkWidget *auto_configure_lbl;
1457 GtkListStore *store;
1462 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1463 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1465 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1466 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1468 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1469 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1471 recv_table = gtk_table_new(4, 2, FALSE);
1473 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1474 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1475 auto_configure_btn = gtk_button_new_with_label(_("Auto-configure"));
1476 gtk_box_pack_start(GTK_BOX (hbox), auto_configure_btn, FALSE, FALSE, 0);
1477 auto_configure_cancel_btn = gtk_button_new_with_label(_("Cancel"));
1478 gtk_box_pack_start(GTK_BOX (hbox), auto_configure_cancel_btn, FALSE, FALSE, 0);
1479 auto_configure_lbl = gtk_label_new("");
1480 gtk_label_set_justify(GTK_LABEL(auto_configure_lbl), GTK_JUSTIFY_LEFT);
1481 gtk_box_pack_start(GTK_BOX (hbox), auto_configure_lbl, FALSE, FALSE, 0);
1482 gtk_widget_show(auto_configure_btn);
1483 gtk_widget_show(auto_configure_lbl);
1484 gtk_widget_show(hbox);
1485 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1486 wizard->auto_configure_lbl = auto_configure_lbl;
1487 wizard->auto_configure_btn = auto_configure_btn;
1488 wizard->auto_configure_cancel_btn = auto_configure_cancel_btn;
1489 g_signal_connect (G_OBJECT (auto_configure_btn), "clicked",
1490 G_CALLBACK (auto_configure_cb), wizard);
1491 g_signal_connect (G_OBJECT (auto_configure_cancel_btn), "clicked",
1492 G_CALLBACK (auto_configure_cb), wizard);
1494 gtk_box_pack_start(GTK_BOX(vbox), recv_table, FALSE, FALSE, 0);
1497 label = gtk_label_new(_("<span weight=\"bold\">Server type:</span>"));
1498 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1499 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
1500 gtk_table_attach(GTK_TABLE(recv_table), label, 0,1,0,1,
1501 GTK_FILL, 0, VSPACING_NARROW, 0);
1502 wizard->recv_type = gtkut_sc_combobox_create(NULL, FALSE);
1503 store = GTK_LIST_STORE(gtk_combo_box_get_model(
1504 GTK_COMBO_BOX(wizard->recv_type)));
1506 COMBOBOX_ADD(store, _("POP3"), A_POP3);
1507 COMBOBOX_ADD(store, _("IMAP"), A_IMAP4);
1508 COMBOBOX_ADD(store, _("Local mbox file"), A_LOCAL);
1510 switch(tmpl.recvtype) {
1523 gtk_combo_box_set_active(GTK_COMBO_BOX (wizard->recv_type), index);
1524 g_signal_connect(G_OBJECT(wizard->recv_type), "changed",
1525 G_CALLBACK(wizard_protocol_changed),
1527 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_type, 1,2,0,1,
1528 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1530 wizard->recv_label = gtk_label_new(_("<span weight=\"bold\">Server address:</span>"));
1531 gtk_misc_set_alignment(GTK_MISC(wizard->recv_label), 1, 0.5);
1532 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1533 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_label, 0,1,1,2,
1534 GTK_FILL, 0, VSPACING_NARROW, 0);
1535 wizard->recv_server = gtk_entry_new();
1536 text = get_default_server(wizard, "pop");
1537 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1540 CLAWS_SET_TIP(wizard->recv_server,
1541 _("You can specify the port number by appending it at the end: "
1542 "\"mail.example.com:110\""));
1543 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_server, 1,2,1,2,
1544 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1546 wizard->recv_username_label = gtk_label_new(_("<span weight=\"bold\">Username:</span>"));
1547 gtk_misc_set_alignment(GTK_MISC(wizard->recv_username_label), 1, 0.5);
1548 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_username_label), TRUE);
1549 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_username_label, 0,1,2,3,
1550 GTK_FILL, 0, VSPACING_NARROW, 0);
1551 wizard->recv_username = gtk_entry_new();
1552 text = get_default_account(wizard);
1553 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
1555 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_username, 1,2,2,3,
1556 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1558 wizard->recv_password_label = gtk_label_new(_("Password:"));
1559 gtk_misc_set_alignment(GTK_MISC(wizard->recv_password_label), 1, 0.5);
1560 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_password_label, 0,1,3,4,
1561 GTK_FILL, 0, VSPACING_NARROW, 0);
1562 wizard->recv_password = gtk_entry_new();
1563 gtk_entry_set_text(GTK_ENTRY(wizard->recv_password), tmpl.recvpass?tmpl.recvpass:"");
1564 gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_password), FALSE);
1565 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_password, 1,2,3,4,
1566 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1568 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1569 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1570 wizard->recv_use_ssl = gtk_check_button_new_with_label(
1571 _("Use SSL to connect to receiving server"));
1572 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl),
1574 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_ssl, FALSE, FALSE, 0);
1576 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1577 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1578 hbox_spc = gtk_hbox_new (FALSE, 0);
1579 gtk_widget_set_size_request (hbox_spc, 12, -1);
1580 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1581 wizard->recv_use_tls = gtk_check_button_new_with_label(
1582 _("Use SSL via STARTTLS"));
1583 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls),
1585 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_tls, FALSE, FALSE, 0);
1586 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, wizard->recv_use_tls);
1588 recv_cert_table = gtk_table_new(3,3, FALSE);
1589 gtk_box_pack_start (GTK_BOX(vbox), recv_cert_table, FALSE, FALSE, 4);
1590 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1591 hbox_spc = gtk_hbox_new (FALSE, 0);
1592 gtk_widget_set_size_request (hbox_spc, 12, -1);
1593 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1594 label = gtk_label_new(_("Client SSL certificate (optional)"));
1595 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
1596 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1597 gtk_table_attach(GTK_TABLE(recv_cert_table), hbox, 0, 3, 0, 1, GTK_FILL, 0, 0, 0);
1598 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1599 hbox_spc = gtk_hbox_new (FALSE, 0);
1600 gtk_widget_set_size_request (hbox_spc, 12, -1);
1601 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1602 label = gtk_label_new(_("File"));
1603 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1604 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1605 gtk_table_attach(GTK_TABLE(recv_cert_table), hbox, 0, 1, 1, 2,
1606 GTK_FILL, 0, VSPACING_NARROW, 0);
1607 wizard->recv_ssl_cert_file = gtk_entry_new();
1608 gtk_entry_set_text(GTK_ENTRY(wizard->recv_ssl_cert_file), tmpl.recvssl_cert?tmpl.recvssl_cert:"");
1609 gtk_table_attach(GTK_TABLE(recv_cert_table), wizard->recv_ssl_cert_file, 1, 2, 1, 2, GTK_FILL, 0, 0, 0);
1610 button = gtkut_get_browse_file_btn(_("Browse"));
1611 gtk_table_attach(GTK_TABLE(recv_cert_table), button, 2, 3, 1, 2,
1612 GTK_FILL, 0, VSPACING_NARROW, 0);
1613 g_signal_connect(G_OBJECT(button), "clicked",
1614 G_CALLBACK(cert_browse_cb), wizard->recv_ssl_cert_file);
1616 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1617 hbox_spc = gtk_hbox_new (FALSE, 0);
1618 gtk_widget_set_size_request (hbox_spc, 12, -1);
1619 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1620 label = gtk_label_new(_("Password"));
1621 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1622 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1623 gtk_table_attach(GTK_TABLE(recv_cert_table), hbox, 0, 1, 2, 3,
1624 GTK_FILL, 0, VSPACING_NARROW, 0);
1625 wizard->recv_ssl_cert_pass = gtk_entry_new();
1626 gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_ssl_cert_pass), FALSE);
1627 gtk_entry_set_text(GTK_ENTRY(wizard->recv_ssl_cert_pass), tmpl.recvssl_cert_pass?tmpl.recvssl_cert_pass:"");
1628 gtk_table_attach(GTK_TABLE(recv_cert_table), wizard->recv_ssl_cert_pass, 1, 2, 2, 3, GTK_FILL, 0, 0, 0);
1629 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, recv_cert_table);
1630 wizard->recv_cert_table = recv_cert_table;
1632 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1633 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1634 wizard->recv_imap_subdir = gtk_entry_new();
1635 gtk_entry_set_text(GTK_ENTRY(wizard->recv_imap_subdir), tmpl.imapdir?tmpl.imapdir:"");
1636 wizard->recv_imap_label = gtk_label_new(_("IMAP server directory:"));
1637 gtk_misc_set_alignment(GTK_MISC(wizard->recv_imap_label), 1, 0.5);
1638 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_label, FALSE, FALSE, 0);
1639 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_subdir, TRUE, TRUE, 0);
1641 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1642 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1643 hbox_spc = gtk_hbox_new (FALSE, 0);
1644 gtk_widget_set_size_request (hbox_spc, 12, -1);
1645 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1646 wizard->subsonly_checkbtn = gtk_check_button_new_with_label(
1647 _("Show only subscribed folders"));
1648 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn),
1650 gtk_box_pack_start(GTK_BOX(hbox), wizard->subsonly_checkbtn, FALSE, FALSE, 0);
1652 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1653 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1654 wizard->no_imap_warning = gtk_label_new(_(
1655 "<span weight=\"bold\">Warning: this version of Claws Mail\n"
1656 "has been built without IMAP support.</span>"));
1657 gtk_label_set_use_markup(GTK_LABEL(wizard->no_imap_warning), TRUE);
1658 gtk_box_pack_start(GTK_BOX(hbox), wizard->no_imap_warning, FALSE, FALSE, 0);
1664 wizard_response_cb (GtkDialog * dialog, int response, gpointer data)
1666 WizardWindow * wizard = (WizardWindow *)data;
1667 int current_page, num_pages;
1668 gboolean skip_mailbox_page = FALSE;
1669 gint protocol = combobox_get_active_data(GTK_COMBO_BOX(wizard->recv_type));
1671 if (protocol == A_IMAP4) {
1672 skip_mailbox_page = TRUE;
1675 num_pages = g_slist_length(wizard->pages);
1677 current_page = gtk_notebook_get_current_page (
1678 GTK_NOTEBOOK(wizard->notebook));
1679 if (response == CANCEL)
1681 wizard->result = FALSE;
1682 wizard->finished = TRUE;
1683 gtk_widget_destroy (GTK_WIDGET(dialog));
1685 else if (response == FINISHED)
1687 if (!wizard_write_config(wizard)) {
1688 current_page = gtk_notebook_get_current_page (
1689 GTK_NOTEBOOK(wizard->notebook));
1692 wizard->result = TRUE;
1693 wizard->finished = TRUE;
1694 gtk_widget_destroy (GTK_WIDGET(dialog));
1698 if (response == GO_BACK)
1700 if (current_page > 0) {
1702 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1706 gtk_notebook_set_current_page (
1707 GTK_NOTEBOOK(wizard->notebook),
1711 else if (response == GO_FORWARD)
1713 if (current_page < (num_pages-1)) {
1715 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1719 gtk_notebook_set_current_page (
1720 GTK_NOTEBOOK(wizard->notebook),
1725 gtk_dialog_set_response_sensitive (dialog, GO_BACK,
1727 gtk_dialog_set_response_sensitive (dialog, GO_FORWARD,
1728 current_page < (num_pages - 1));
1729 if (current_page == (num_pages -1)) {
1730 gtk_dialog_set_response_sensitive (dialog, FINISHED, TRUE);
1731 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), FINISHED);
1733 gtk_dialog_set_response_sensitive (dialog, FINISHED, FALSE);
1734 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), GO_FORWARD);
1740 static gint wizard_close_cb(GtkWidget *widget, GdkEventAny *event,
1743 WizardWindow *wizard = (WizardWindow *)data;
1744 wizard->result = FALSE;
1745 wizard->finished = TRUE;
1750 #define PACK_WARNING(text) { \
1751 label = gtk_label_new(text); \
1752 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); \
1753 gtk_box_pack_end(GTK_BOX(widget), label, FALSE, FALSE, 0); \
1756 gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) {
1757 WizardWindow *wizard = g_new0(WizardWindow, 1);
1761 GtkWidget *scrolled_window;
1766 wizard->mainwin = mainwin;
1767 wizard->create_mailbox = create_mailbox;
1769 gtk_widget_hide(mainwin->window);
1771 wizard_read_defaults();
1773 wizard->window = gtk_dialog_new_with_buttons (_("Claws Mail Setup Wizard"),
1775 GTK_STOCK_GO_BACK, GO_BACK,
1776 GTK_STOCK_GO_FORWARD, GO_FORWARD,
1777 GTK_STOCK_SAVE, FINISHED,
1778 GTK_STOCK_CANCEL, CANCEL,
1780 gtk_widget_set_size_request(wizard->window, -1, 480);
1781 gtk_window_set_position(GTK_WINDOW(wizard->window), GTK_WIN_POS_CENTER);
1783 g_signal_connect(wizard->window, "response",
1784 G_CALLBACK(wizard_response_cb), wizard);
1785 gtk_widget_realize(wizard->window);
1786 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window),
1788 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1790 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1792 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1794 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1797 wizard->notebook = gtk_notebook_new();
1798 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(wizard->notebook), FALSE);
1799 gtk_notebook_set_show_border(GTK_NOTEBOOK(wizard->notebook), FALSE);
1800 gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(wizard->window))),
1801 wizard->notebook, TRUE, TRUE, 0);
1803 wizard->pages = NULL;
1805 /*welcome page: 0 */
1807 page = create_page(wizard, _("Welcome to Claws Mail"));
1809 wizard->pages = g_slist_append(wizard->pages, page);
1810 widget = stock_pixmap_widget(wizard->window,
1811 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1813 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1815 text = g_strdup(_("Welcome to the Claws Mail setup wizard.\n\n"
1816 "We will begin by defining some basic "
1817 "information about you and your most common "
1818 "mail options so that you can start to use "
1819 "Claws Mail in less than five minutes."));
1820 widget = gtk_label_new(text);
1821 gtk_label_set_line_wrap(GTK_LABEL(widget), TRUE);
1822 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1828 widget = create_page (wizard, _("About You"));
1829 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1830 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1831 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1832 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1834 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1836 PACK_WARNING(_("Bold fields must be completed"));
1838 wizard->pages = g_slist_append(wizard->pages, widget);
1840 /* recv+auth page: 2 */
1843 widget = create_page (wizard, _("Receiving mail"));
1844 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1845 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1846 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1847 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1849 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1851 PACK_WARNING(_("Bold fields must be completed"));
1853 wizard->pages = g_slist_append(wizard->pages, widget);
1858 widget = create_page (wizard, _("Sending mail"));
1859 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1860 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1861 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1862 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1864 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1866 PACK_WARNING(_("Bold fields must be completed"));
1868 wizard->pages = g_slist_append(wizard->pages, widget);
1870 /* mailbox page: 4 */
1871 if (create_mailbox) {
1874 widget = create_page (wizard, _("Saving mail on disk"));
1875 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1876 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1877 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1878 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1880 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1881 mailbox_page(wizard));
1882 PACK_WARNING(_("Bold fields must be completed"));
1884 wizard->pages = g_slist_append(wizard->pages, widget);
1890 page = create_page(wizard, _("Configuration finished"));
1892 wizard->pages = g_slist_append(wizard->pages, page);
1893 widget = stock_pixmap_widget(wizard->window,
1894 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1896 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1898 text = g_strdup(_("Claws Mail is now ready.\n"
1899 "Click Save to start."));
1900 widget = gtk_label_new(text);
1901 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1905 for (cur = wizard->pages; cur && cur->data; cur = cur->next) {
1906 gtk_notebook_append_page (GTK_NOTEBOOK(wizard->notebook),
1907 GTK_WIDGET(cur->data), NULL);
1910 g_signal_connect(G_OBJECT(wizard->window), "delete_event",
1911 G_CALLBACK(wizard_close_cb), wizard);
1912 gtk_widget_show_all (wizard->window);
1914 gtk_widget_hide(wizard->recv_imap_label);
1915 gtk_widget_hide(wizard->recv_imap_subdir);
1916 gtk_widget_hide(wizard->subsonly_checkbtn);
1917 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1918 gtk_widget_hide(wizard->auto_configure_cancel_btn);
1920 wizard_protocol_change(wizard, tmpl.recvtype);
1922 while (!wizard->finished)
1923 gtk_main_iteration();
1925 result = wizard->result;
1929 gtk_widget_show(mainwin->window);