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"
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 if (strstr(str, "$USERNAME")) { \
332 tmp = g_strdup(str); \
333 *strstr(tmp, "$USERNAME") = '\0'; \
334 new = g_strconcat(tmp, g_get_real_name(), \
335 strstr(str, "$USERNAME")+strlen("$USERNAME"), \
342 if (strstr(str, "$LOGIN")) { \
343 tmp = g_strdup(str); \
344 *strstr(tmp, "$LOGIN") = '\0'; \
345 new = g_strconcat(tmp, g_get_user_name(), \
346 strstr(str, "$LOGIN")+strlen("$LOGIN"), \
353 if (strstr(str, "$EMAIL")) { \
354 tmp = g_strdup(str); \
355 *strstr(tmp, "$EMAIL") = '\0'; \
356 new = g_strconcat(tmp, tmpl.email, \
357 strstr(str, "$EMAIL")+strlen("$EMAIL"), \
364 if (strstr(str, "$NAME_MAIL")) { \
365 tmp = g_strdup(str); \
366 *strstr(tmp, "$NAME_MAIL") = '\0'; \
367 new = g_strconcat(tmp, get_name_for_mail(), \
368 strstr(str, "$NAME_MAIL")+strlen("$NAME_MAIL"), \
375 if (strstr(str, "$DEFAULTDOMAIN")) { \
376 tmp = g_strdup(str); \
377 *strstr(tmp, "$DEFAULTDOMAIN") = '\0'; \
378 new = g_strconcat(tmp, wizard_get_default_domain_name(), \
379 strstr(str, "$DEFAULTDOMAIN")+strlen("$DEFAULTDOMAIN"), \
386 if (strstr(str, "$DOMAIN")) { \
387 tmp = g_strdup(str); \
388 *strstr(tmp, "$DOMAIN") = '\0'; \
389 new = g_strconcat(tmp, tmpl.domain, \
390 strstr(str, "$DOMAIN")+strlen("$DOMAIN"), \
399 static void wizard_read_defaults(void)
403 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, "accountrc.tmpl", NULL);
404 if (!is_file_exist(rcpath)) {
405 str_write_to_file(accountrc_tmpl, rcpath);
408 prefs_read_config(template_params, "AccountTemplate", rcpath, NULL);
410 PARSE_DEFAULT(tmpl.domain);
411 PARSE_DEFAULT(tmpl.name);
412 PARSE_DEFAULT(tmpl.email);
413 PARSE_DEFAULT(tmpl.organization);
414 PARSE_DEFAULT(tmpl.smtpserver);
415 PARSE_DEFAULT(tmpl.smtpuser);
416 PARSE_DEFAULT(tmpl.smtppass);
417 PARSE_DEFAULT(tmpl.recvserver);
418 PARSE_DEFAULT(tmpl.recvuser);
419 PARSE_DEFAULT(tmpl.recvpass);
420 PARSE_DEFAULT(tmpl.imapdir);
421 PARSE_DEFAULT(tmpl.mboxfile);
422 PARSE_DEFAULT(tmpl.mailbox);
425 "%s, %s, %s, %s, %s, %d, %s, %s, %s, %s, %s, %s, %d, %d\n",
426 tmpl.name,tmpl.domain,tmpl.email,tmpl.organization,tmpl.smtpserver,
427 tmpl.recvtype,tmpl.recvserver,tmpl.recvuser,tmpl.recvpass,
428 tmpl.imapdir,tmpl.mboxfile,tmpl.mailbox,tmpl.smtpssl,tmpl.recvssl);
433 static void initialize_fonts(WizardWindow *wizard)
435 GtkWidget *widget = wizard->email;
436 gint size = pango_font_description_get_size(
437 gtk_widget_get_style(widget)->font_desc)
441 PangoFontDescription *bold_desc;
442 gchar *curfont = pango_font_description_to_string(widget->style->font_desc);
443 g_free(prefs_common.smallfont);
444 g_free(prefs_common.normalfont);
445 g_free(prefs_common.boldfont);
446 prefs_common.smallfont = g_strdup(curfont);
447 prefs_common.normalfont = g_strdup(curfont);
448 bold_desc = pango_font_description_from_string(curfont);
449 pango_font_description_set_weight(bold_desc, PANGO_WEIGHT_BOLD);
450 prefs_common.boldfont = pango_font_description_to_string(bold_desc);
451 pango_font_description_free(bold_desc);
454 tmp = g_strdup(prefs_common.textfont);
455 if (strrchr(tmp, ' ')) {
456 *(strrchr(tmp, ' ')) = '\0';
457 new = g_strdup_printf("%s %d", tmp, size);
458 g_free(prefs_common.textfont);
459 prefs_common.textfont = new;
463 tmp = g_strdup(prefs_common.smallfont);
464 if (strrchr(tmp, ' ')) {
465 *(strrchr(tmp, ' ')) = '\0';
466 new = g_strdup_printf("%s %d", tmp, size);
467 g_free(prefs_common.smallfont);
468 prefs_common.smallfont = new;
472 tmp = g_strdup(prefs_common.normalfont);
473 if (strrchr(tmp, ' ')) {
474 *(strrchr(tmp, ' ')) = '\0';
475 new = g_strdup_printf("%s %d", tmp, size);
476 g_free(prefs_common.normalfont);
477 prefs_common.normalfont = new;
481 tmp = g_strdup(prefs_common.boldfont);
482 if (strrchr(tmp, ' ')) {
483 *(strrchr(tmp, ' ')) = '\0';
484 new = g_strdup_printf("%s %d", tmp, size);
485 g_free(prefs_common.boldfont);
486 prefs_common.boldfont = new;
491 #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"
492 #define FACE "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAM1BMVEUAAAAcJCI\n\
493 ONl1JUi0+Z4daY2NZciPabV9ykS5kj6Wsl2ybmZOBsMjZxK2wzN3Pzczs7OsCAGN0AAAAAXRSTlM\n\
494 AQObYZgAAAAFiS0dEAIgFHUgAAAIVSURBVEjH1ZbtlqMgDIaFECoGhPu/2s0b0Lais/NzN6d1OJ7\n\
495 3yReQzrL8B5Zy3rvl9At52Pf2tv1vSMjtYj8jaa8XUyI/yn3YD6sigj/2Tf5Bn069MIsTPHvx/t5\n\
496 /3rU/6JCIY3YwGe26r/cwUfE3cFe5T28L0K5rJAUHEeYAQxs8DHojjk3M9wECU4xxjXisI8RA0gy\n\
497 oczJZJOjxiTFZVTchAnIRJrgdmEGDyFfAI3UuG5FmYTkR9RDrIC4H0SqV4pzpEcUp0HNLjwBv+jA\n\
498 dikUE5g9iBvzmu3sH2oDk4lnHd829+2Q9gj6kDqDPg7hsGwBzH02fE3ZCt6ZHmlNKIMjMeRwra5I\n\
499 ecgNoBnLGPmzaHPJIwLY8Sq2M/tLUJfj0QcqmfVXAdLSStIYF8dzWjBBb2VgvDa4mO9oc651OiUo\n\
500 BEKbZokdPATF9E9oKAjQJcJOniaPXrVZRAnVWaqIyqRoNC8ZJvgCcW8XN39RqxVP1rS8Yd4WnCdN\n\
501 aRTo2jJRDbg3vtCpEUGffgDPhqKDaSuVqYtOplFIvIcx3HUI5/MuIWl6vKyBjNlqEru8hbFXqBPA\n\
502 5TpHGIUZOePeaIyzfQ/g9Xg0opU1AvdfXM9floYhv92pPAE96OZtkPV8eivgQi9RTfwPUU36I26n\n\
503 Hy+WuCJzAT7efMSeA1TNf2/VugDz+dN139xfA5ffxGZDD+MvcP/uvyB80wzZ76wbz8gAAAABJRU5\n\
506 static void write_welcome_email(WizardWindow *wizard)
512 const gchar *mailbox = gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name));
513 Folder *folder = folder_find_from_path(mailbox);
514 FolderItem *inbox = folder ? folder->inbox:NULL;
515 gchar *file = get_tmp_file();
516 gchar enc_from_name[BUFFSIZE], enc_to_name[BUFFSIZE], enc_subject[BUFFSIZE];
518 get_rfc822_date(buf_date, sizeof(buf_date));
520 conv_encode_header_full(enc_subject, sizeof(enc_subject),
521 C_("Welcome Mail Subject", "Welcome to Claws Mail"),
522 strlen("Subject: "), FALSE, CS_INTERNAL);
523 conv_encode_header_full(enc_to_name, sizeof(enc_to_name),
524 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)),
525 strlen("To: "), TRUE, CS_INTERNAL);
526 conv_encode_header_full(enc_from_name, sizeof(enc_from_name),
527 _("The Claws Mail Team"),
528 strlen("From: "), TRUE, CS_INTERNAL);
530 head = g_strdup_printf(
537 "Content-Type: text/plain; charset=UTF-8\n",
541 gtk_entry_get_text(GTK_ENTRY(wizard->email)),
542 buf_date, enc_subject, XFACE, FACE);
543 body = g_strdup_printf(
545 "Welcome to Claws Mail\n"
546 "---------------------\n"
548 "Now that you have set up your account you can fetch your\n"
549 "mail by clicking the 'Get Mail' button at the left of the\n"
552 "Claws Mail has lots of extra features accessible via plugins,\n"
553 "like anti-spam filtering and learning (via the Bogofilter or\n"
554 "SpamAssassin plugins), privacy protection (via PGP/Mime), an RSS\n"
555 "aggregator, a calendar, and much more. You can load them from\n"
556 "the menu entry '/Configuration/Plugins'.\n"
558 "You can change your Account Preferences by using the menu\n"
559 "entry '/Configuration/Preferences for current account'\n"
560 "and change the general Preferences by using\n"
561 "'/Configuration/Preferences'.\n"
563 "You can find further information in the Claws Mail manual,\n"
564 "which can be accessed by using the menu entry '/Help/Manual'\n"
565 "or online at the URL given below.\n"
573 "Mailing Lists: <%s>\n"
577 "Claws Mail is free software, released under the terms\n"
578 "of the GNU General Public License, version 3 or later, as\n"
579 "published by the Free Software Foundation, 51 Franklin Street,\n"
580 "Fifth Floor, Boston, MA 02110-1301, USA. The license can be\n"
585 "If you wish to donate to the Claws Mail project you can do\n"
587 HOMEPAGE_URI, MANUAL_URI, FAQ_URI, THEMES_URI, MAILING_LIST_URI,
588 GPL_URI, DONATE_URI);
590 msg = g_strconcat(head, body, NULL);
592 if (inbox && inbox->total_msgs == 0
593 && str_write_to_file(msg, file) >= 0) {
594 MsgFlags flags = { MSG_UNREAD|MSG_NEW, 0};
595 folder_item_add_msg(inbox, file, &flags, FALSE);
604 static gboolean wizard_write_config(WizardWindow *wizard)
606 static gboolean mailbox_ok = FALSE;
607 PrefsAccount *prefs_account = prefs_account_new();
608 GList *account_list = NULL;
609 gchar *smtp_server, *recv_server;
610 gint smtp_port, recv_port;
612 SSLType smtp_ssl_type, recv_ssl_type;
615 prefs_account->protocol = combobox_get_active_data(
616 GTK_COMBO_BOX(wizard->recv_type));
618 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4 &&
619 !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)))) {
620 alertpanel_error(_("Please enter the mailbox name."));
621 g_free(prefs_account);
622 gtk_notebook_set_current_page (
623 GTK_NOTEBOOK(wizard->notebook),
629 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
630 mailbox_ok = setup_write_mailbox_path(wizard->mainwin,
632 GTK_ENTRY(wizard->mailbox_name)));
638 /* alertpanel done by setup_write_mailbox_path */
639 g_free(prefs_account);
640 gtk_notebook_set_current_page (
641 GTK_NOTEBOOK(wizard->notebook),
646 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->full_name)))
647 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->email)))) {
648 alertpanel_error(_("Please enter your name and email address."));
649 g_free(prefs_account);
650 gtk_notebook_set_current_page (
651 GTK_NOTEBOOK(wizard->notebook),
656 if (prefs_account->protocol != A_LOCAL) {
657 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)))
658 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
659 alertpanel_error(_("Please enter your receiving server "
661 g_free(prefs_account);
662 gtk_notebook_set_current_page (
663 GTK_NOTEBOOK(wizard->notebook),
668 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
669 alertpanel_error(_("Please enter your username."));
670 g_free(prefs_account);
671 gtk_notebook_set_current_page (
672 GTK_NOTEBOOK(wizard->notebook),
678 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)))) {
679 alertpanel_error(_("Please enter your SMTP server."));
680 g_free(prefs_account);
681 gtk_notebook_set_current_page (
682 GTK_NOTEBOOK(wizard->notebook),
687 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
688 if (prefs_account->protocol == A_LOCAL
689 && !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)))) {
690 alertpanel_error(_("Please enter your SMTP username."));
691 g_free(prefs_account);
692 gtk_notebook_set_current_page (
693 GTK_NOTEBOOK(wizard->notebook),
696 } /* if it's not local we'll use the reception server */
699 if (prefs_account->protocol != A_LOCAL)
700 prefs_account->account_name = g_strdup_printf("%s@%s",
701 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)),
702 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
704 prefs_account->account_name = g_strdup_printf("%s",
705 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
707 recv_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
708 smtp_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)));
710 if (prefs_account->protocol != A_LOCAL && strstr(recv_server, ":")) {
711 recv_port = atoi(strstr(recv_server, ":")+1);
712 *(strstr(recv_server, ":")) = '\0';
713 if (prefs_account->protocol == A_IMAP4) {
714 prefs_account->set_imapport = TRUE;
715 prefs_account->imapport = recv_port;
716 } else if (prefs_account->protocol == A_POP3) {
717 prefs_account->set_popport = TRUE;
718 prefs_account->popport = recv_port;
721 if (strstr(smtp_server, ":")) {
722 smtp_port = atoi(strstr(smtp_server, ":")+1);
723 *(strstr(smtp_server, ":")) = '\0';
724 prefs_account->set_smtpport = TRUE;
725 prefs_account->smtpport = smtp_port;
728 prefs_account->name = g_strdup(
729 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)));
730 prefs_account->address = g_strdup(
731 gtk_entry_get_text(GTK_ENTRY(wizard->email)));
732 prefs_account->organization = g_strdup(
733 gtk_entry_get_text(GTK_ENTRY(wizard->organization)));
734 prefs_account->smtp_server = g_strdup(smtp_server);
736 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
738 tmp = g_path_get_basename(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)));
739 prefs_account->inbox = g_strdup_printf("#mh/%s/inbox",
740 (!strcmp("Mail", gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name))))
743 prefs_account->local_inbox = g_strdup(prefs_account->inbox);
744 } else if (prefs_account->protocol != A_IMAP4) {
745 if (folder_get_default_inbox())
746 prefs_account->local_inbox =
747 folder_item_get_identifier(folder_get_default_inbox());
750 if (prefs_account->protocol != A_LOCAL)
751 prefs_account->recv_server = g_strdup(recv_server);
753 prefs_account->local_mbox = g_strdup(recv_server);
758 prefs_account->userid = g_strdup(
759 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)));
760 prefs_account->passwd = password_encrypt(
761 gtk_entry_get_text(GTK_ENTRY(wizard->recv_password)), NULL);
763 prefs_account->smtp_userid = g_strdup(
764 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)));
765 prefs_account->smtp_passwd = password_encrypt(
766 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_password)), NULL);
767 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
768 prefs_account->use_smtp_auth = TRUE;
772 smtp_ssl_type = SSL_NONE;
773 recv_ssl_type = SSL_NONE;
775 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl))) {
776 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls)))
777 smtp_ssl_type = SSL_STARTTLS;
779 smtp_ssl_type = SSL_TUNNEL;
781 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl))) {
782 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls)))
783 recv_ssl_type = SSL_STARTTLS;
785 recv_ssl_type = SSL_TUNNEL;
788 prefs_account->ssl_smtp = smtp_ssl_type;
790 if (prefs_account->protocol == A_IMAP4)
791 prefs_account->ssl_imap = recv_ssl_type;
793 prefs_account->ssl_pop = recv_ssl_type;
795 prefs_account->out_ssl_client_cert_file = g_strdup(
796 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_ssl_cert_file)));
797 prefs_account->out_ssl_client_cert_pass = g_strdup(
798 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_ssl_cert_pass)));
799 prefs_account->in_ssl_client_cert_file = g_strdup(
800 gtk_entry_get_text(GTK_ENTRY(wizard->recv_ssl_cert_file)));
801 prefs_account->in_ssl_client_cert_pass = g_strdup(
802 gtk_entry_get_text(GTK_ENTRY(wizard->recv_ssl_cert_pass)));
804 if (prefs_account->protocol == A_IMAP4) {
805 gchar *directory = gtk_editable_get_chars(
806 GTK_EDITABLE(wizard->recv_imap_subdir), 0, -1);
807 if (directory && strlen(directory)) {
808 prefs_account->imap_dir = g_strdup(directory);
810 prefs_account->imap_subsonly =
811 gtk_toggle_button_get_active(
812 GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn));
816 account_list = g_list_append(account_list, prefs_account);
817 prefs_account_write_config_all(account_list);
818 prefs_account_free(prefs_account);
819 account_read_config_all();
821 initialize_fonts(wizard);
822 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4)
823 write_welcome_email(wizard);
826 plugin_load_standard_plugins();
831 static GtkWidget* create_page (WizardWindow *wizard, const char * title)
839 vbox = gtk_vbox_new (FALSE, 6);
840 gtk_container_set_border_width (GTK_CONTAINER(vbox), 10);
842 /* create the titlebar */
843 hbox = gtk_hbox_new (FALSE, 12);
844 image = stock_pixmap_widget(wizard->window,
845 STOCK_PIXMAP_CLAWS_MAIL_ICON);
846 gtk_box_pack_start (GTK_BOX(hbox), image, FALSE, FALSE, 0);
847 title_string = g_strconcat ("<span size=\"xx-large\" weight=\"ultrabold\">", title ? title : "", "</span>", NULL);
848 w = gtk_label_new (title_string);
849 gtk_label_set_use_markup (GTK_LABEL(w), TRUE);
850 g_free (title_string);
851 gtk_box_pack_start (GTK_BOX(hbox), w, FALSE, FALSE, 0);
853 /* pack the titlebar */
854 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
856 /* pack the separator */
857 gtk_box_pack_start (GTK_BOX(vbox), gtk_hseparator_new(), FALSE, FALSE, 0);
860 w = gtk_alignment_new (0, 0, 0, 0);
861 gtk_widget_set_size_request (w, 0, 6);
862 gtk_box_pack_start (GTK_BOX(vbox), w, FALSE, FALSE, 0);
867 #define PACK_BOX(hbox,text,entry) { \
868 GtkWidget *label = gtk_label_new(text); \
869 gtk_label_set_use_markup(GTK_LABEL(label), TRUE); \
870 if (GTK_IS_MISC(label)) \
871 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); \
872 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); \
873 gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); \
876 static gchar *get_default_server(WizardWindow * wizard, const gchar *type)
878 if (!strcmp(type, "smtp")) {
879 if (!tmpl.smtpserver || !strlen(tmpl.smtpserver))
880 return g_strconcat(type, ".", tmpl.domain, NULL);
882 return g_strdup(tmpl.smtpserver);
884 if (!tmpl.recvserver || !strlen(tmpl.recvserver))
885 return g_strconcat(type, ".", tmpl.domain, NULL);
887 return g_strdup(tmpl.recvserver);
891 static gchar *get_default_account(WizardWindow * wizard)
893 gchar *result = NULL;
895 if (!tmpl.recvuser || !strlen(tmpl.recvuser)) {
896 result = gtk_editable_get_chars(
897 GTK_EDITABLE(wizard->email), 0, -1);
899 if (strstr(result, "@")) {
900 *(strstr(result,"@")) = '\0';
903 result = g_strdup(tmpl.recvuser);
908 static gchar *get_default_smtp_account(WizardWindow * wizard)
910 gchar *result = NULL;
912 if (!tmpl.smtpuser || !strlen(tmpl.smtpuser)) {
915 result = g_strdup(tmpl.smtpuser);
920 static void wizard_email_changed(GtkWidget *widget, gpointer data)
922 WizardWindow *wizard = (WizardWindow *)data;
923 RecvProtocol protocol;
925 protocol = combobox_get_active_data(GTK_COMBO_BOX(wizard->recv_type));
927 text = get_default_server(wizard, "smtp");
928 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
931 text = get_default_account(wizard);
932 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
935 if (protocol == A_POP3) {
936 text = get_default_server(wizard, "pop");
937 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
939 } else if (protocol == A_IMAP4) {
940 text = get_default_server(wizard, "imap");
941 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
943 } else if (protocol == A_LOCAL) {
944 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
949 static GtkWidget* user_page (WizardWindow * wizard)
951 GtkWidget *table = gtk_table_new(1,1, FALSE);
954 GtkWidget *user_table;
956 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
957 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
959 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
960 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
962 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
963 GTK_EXPAND|GTK_FILL, 0, 0, 0);
965 user_table = gtk_table_new(3, 2, FALSE);
966 gtk_table_set_row_spacings(GTK_TABLE(user_table), VSPACING_NARROW);
967 gtk_box_pack_start(GTK_BOX(vbox), user_table, FALSE, FALSE, 0);
969 label = gtk_label_new(g_strconcat("<span weight=\"bold\">", _("Your name:"),
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(g_strconcat("<span weight=\"bold\">", _("Your email address:"),
982 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
983 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
984 gtk_table_attach(GTK_TABLE(user_table), label, 0,1,1,2,
985 GTK_FILL, 0, VSPACING_NARROW, 0);
986 wizard->email = gtk_entry_new();
987 gtk_entry_set_text(GTK_ENTRY(wizard->email), tmpl.email?tmpl.email:"");
988 gtk_table_attach(GTK_TABLE(user_table), wizard->email, 1,2,1,2,
989 GTK_EXPAND|GTK_FILL, 0, 0, 0);
991 label = gtk_label_new(_("Your organization:"));
992 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
993 gtk_table_attach(GTK_TABLE(user_table), label, 0,1,2,3,
994 GTK_FILL, 0, VSPACING_NARROW, 0);
995 wizard->organization = gtk_entry_new();
996 gtk_entry_set_text(GTK_ENTRY(wizard->organization), tmpl.organization?tmpl.organization:"");
997 gtk_table_attach(GTK_TABLE(user_table), wizard->organization, 1,2,2,3,
998 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1000 g_signal_connect(G_OBJECT(wizard->email), "changed",
1001 G_CALLBACK(wizard_email_changed),
1006 static GtkWidget* mailbox_page (WizardWindow * wizard)
1008 GtkWidget *table = gtk_table_new(1,1, FALSE);
1012 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1013 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1015 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1016 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1018 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1019 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1021 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1022 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1024 wizard->mailbox_label = gtk_label_new(g_strconcat("<span weight=\"bold\">",
1025 _("Mailbox name:"), "</span>", NULL));
1026 gtk_label_set_use_markup(GTK_LABEL(wizard->mailbox_label), TRUE);
1027 if (GTK_IS_MISC(wizard->mailbox_label))
1028 gtk_misc_set_alignment(GTK_MISC(wizard->mailbox_label), 1, 0.5);
1029 wizard->mailbox_name = gtk_entry_new();
1031 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), tmpl.mailbox?tmpl.mailbox:"");
1033 CLAWS_SET_TIP(wizard->mailbox_name, _("You can also specify an absolute path, for example: "
1034 "\"/home/john/Documents/Mail\""));
1036 gtk_box_pack_start(GTK_BOX(hbox), wizard->mailbox_label, FALSE, FALSE, 0);
1037 gtk_box_pack_start(GTK_BOX(hbox), wizard->mailbox_name, TRUE, TRUE, 0);
1042 static void smtp_auth_changed (GtkWidget *btn, gpointer data)
1044 WizardWindow *wizard = (WizardWindow *)data;
1045 gboolean do_auth = gtk_toggle_button_get_active(
1046 GTK_TOGGLE_BUTTON(wizard->smtp_auth));
1047 gtk_widget_set_sensitive(wizard->smtp_username, do_auth);
1048 gtk_widget_set_sensitive(wizard->smtp_username_label, do_auth);
1049 gtk_widget_set_sensitive(wizard->smtp_password, do_auth);
1050 gtk_widget_set_sensitive(wizard->smtp_password_label, do_auth);
1054 static void cert_browse_cb(GtkWidget *widget, gpointer data)
1056 GtkEntry *dest = GTK_ENTRY(data);
1058 gchar *utf8_filename;
1060 filename = filesel_select_file_open(_("Select certificate file"), NULL);
1061 if (!filename) return;
1063 utf8_filename = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
1064 if (!utf8_filename) {
1065 g_warning("cert_browse_cb(): failed to convert character set.");
1066 utf8_filename = g_strdup(filename);
1068 gtk_entry_set_text(dest, utf8_filename);
1069 g_free(utf8_filename);
1073 static GtkWidget* smtp_page (WizardWindow * wizard)
1075 GtkWidget *table = gtk_table_new(1, 1, FALSE);
1078 GtkWidget *hbox_spc;
1079 GtkWidget *smtp_auth_table;
1083 GtkWidget *smtp_cert_table;
1087 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1088 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1090 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1091 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1093 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1094 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1096 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1097 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1098 wizard->smtp_server = gtk_entry_new();
1099 text = get_default_server(wizard, "smtp");
1100 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
1103 CLAWS_SET_TIP(wizard->smtp_server,
1104 _("You can specify the port number by appending it at the end: "
1105 "\"mail.example.com:25\""));
1107 PACK_BOX(hbox, g_strconcat("<span weight=\"bold\">", _("SMTP server address:"),
1108 "</span>", NULL), wizard->smtp_server);
1110 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1111 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1112 wizard->smtp_auth = gtk_check_button_new_with_label(
1113 _("Use authentication"));
1114 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth),
1116 g_signal_connect(G_OBJECT(wizard->smtp_auth), "toggled",
1117 G_CALLBACK(smtp_auth_changed),
1119 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_auth, FALSE, FALSE, 0);
1121 label = gtk_label_new(g_strconcat("<span size=\"small\">",
1122 _("(empty to use the same as receive)"), "</span>", NULL));
1123 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
1124 SET_TOGGLE_SENSITIVITY (wizard->smtp_auth, label);
1125 gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 0);
1127 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1128 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1129 hbox_spc = gtk_hbox_new (FALSE, 0);
1130 gtk_widget_set_size_request (hbox_spc, 12, -1);
1131 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1132 smtp_auth_table = gtk_table_new(2, 2, FALSE);
1133 SET_TOGGLE_SENSITIVITY (wizard->smtp_auth, smtp_auth_table);
1134 gtk_box_pack_start(GTK_BOX(hbox), smtp_auth_table, TRUE, TRUE, 0);
1136 wizard->smtp_username_label = gtk_label_new(_("SMTP username:"));
1137 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_username_label), 1, 0.5);
1138 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_username_label, 0,1,0,1,
1139 GTK_FILL, 0, VSPACING_NARROW, 0);
1140 text = get_default_smtp_account(wizard);
1141 wizard->smtp_username = gtk_entry_new();
1142 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_username), text);
1144 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_username, 1,2,0,1,
1145 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1147 wizard->smtp_password_label = gtk_label_new(_("SMTP password:"));
1148 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_password_label), 1, 0.5);
1149 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_password_label, 0,1,1,2,
1150 GTK_FILL, 0, VSPACING_NARROW, 0);
1151 wizard->smtp_password = gtk_entry_new();
1152 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_password), tmpl.smtppass?tmpl.smtppass:"");
1153 gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_password), FALSE);
1154 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_password, 1,2,1,2,
1155 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1157 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1158 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1159 wizard->smtp_use_ssl = gtk_check_button_new_with_label(
1160 _("Use SSL to connect to SMTP server"));
1161 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl),
1163 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_ssl, FALSE, FALSE, 0);
1165 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1166 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1167 hbox_spc = gtk_hbox_new (FALSE, 0);
1168 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1169 gtk_widget_set_size_request (hbox_spc, 12, -1);
1170 wizard->smtp_use_tls = gtk_check_button_new_with_label(
1171 _("Use SSL via STARTTLS"));
1172 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls),
1174 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_tls, FALSE, FALSE, 0);
1175 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, wizard->smtp_use_tls);
1177 smtp_cert_table = gtk_table_new(3,3, FALSE);
1178 gtk_box_pack_start (GTK_BOX(vbox), smtp_cert_table, FALSE, FALSE, 4);
1179 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1180 hbox_spc = gtk_hbox_new (FALSE, 0);
1181 gtk_widget_set_size_request (hbox_spc, 12, -1);
1182 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1183 label = gtk_label_new(_("Client SSL certificate (optional)"));
1184 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
1185 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1186 gtk_table_attach(GTK_TABLE(smtp_cert_table), hbox, 0, 3, 0, 1, GTK_FILL, 0, 0, 0);
1187 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1188 hbox_spc = gtk_hbox_new (FALSE, 0);
1189 gtk_widget_set_size_request (hbox_spc, 12, -1);
1190 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1191 label = gtk_label_new(_("File"));
1192 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1193 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1194 gtk_table_attach(GTK_TABLE(smtp_cert_table), hbox, 0, 1, 1, 2,
1195 GTK_FILL, 0, VSPACING_NARROW, 0);
1196 wizard->smtp_ssl_cert_file = gtk_entry_new();
1197 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_ssl_cert_file), tmpl.smtpssl_cert?tmpl.smtpssl_cert:"");
1198 gtk_table_attach(GTK_TABLE(smtp_cert_table), wizard->smtp_ssl_cert_file, 1, 2, 1, 2, GTK_FILL, 0, 0, 0);
1199 button = gtkut_get_browse_file_btn(_("Browse"));
1200 gtk_table_attach(GTK_TABLE(smtp_cert_table), button, 2, 3, 1, 2,
1201 GTK_FILL, 0, VSPACING_NARROW, 0);
1202 g_signal_connect(G_OBJECT(button), "clicked",
1203 G_CALLBACK(cert_browse_cb), wizard->smtp_ssl_cert_file);
1205 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1206 hbox_spc = gtk_hbox_new (FALSE, 0);
1207 gtk_widget_set_size_request (hbox_spc, 12, -1);
1208 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1209 label = gtk_label_new(_("Password"));
1210 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1211 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1212 gtk_table_attach(GTK_TABLE(smtp_cert_table), hbox, 0, 1, 2, 3,
1213 GTK_FILL, 0, VSPACING_NARROW, 0);
1214 wizard->smtp_ssl_cert_pass = gtk_entry_new();
1215 gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_ssl_cert_pass), FALSE);
1216 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_ssl_cert_pass), tmpl.smtpssl_cert_pass?tmpl.smtpssl_cert_pass:"");
1217 gtk_table_attach(GTK_TABLE(smtp_cert_table), wizard->smtp_ssl_cert_pass, 1, 2, 2, 3, GTK_FILL, 0, 0, 0);
1218 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, smtp_cert_table);
1219 wizard->smtp_cert_table = smtp_cert_table;
1221 smtp_auth_changed(NULL, wizard);
1225 static void wizard_protocol_change(WizardWindow *wizard, RecvProtocol protocol)
1229 if (protocol == A_POP3) {
1230 text = get_default_server(wizard, "pop");
1231 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1232 gtk_widget_hide(wizard->recv_imap_label);
1233 gtk_widget_hide(wizard->recv_imap_subdir);
1234 gtk_widget_hide(wizard->subsonly_checkbtn);
1235 gtk_widget_show(wizard->recv_username);
1236 gtk_widget_show(wizard->recv_password);
1237 gtk_widget_show(wizard->recv_username_label);
1238 gtk_widget_show(wizard->recv_password_label);
1239 gtk_widget_hide(wizard->no_imap_warning);
1241 gtk_widget_show(wizard->recv_use_ssl);
1242 gtk_widget_show(wizard->recv_use_tls);
1243 gtk_widget_show(wizard->recv_cert_table);
1245 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1246 gtk_widget_show(wizard->auto_configure_btn);
1247 gtk_widget_hide(wizard->auto_configure_cancel_btn);
1248 gtk_widget_show(wizard->auto_configure_lbl);
1250 gtk_label_set_text(GTK_LABEL(wizard->recv_label),
1251 g_strconcat("<span weight=\"bold\">", _("Server address:"),
1253 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1254 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1256 if (wizard->create_mailbox) {
1257 gtk_widget_show(wizard->mailbox_label);
1258 gtk_widget_show(wizard->mailbox_name);
1260 } else if (protocol == A_IMAP4) {
1261 #ifdef HAVE_LIBETPAN
1262 text = get_default_server(wizard, "imap");
1263 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1264 gtk_widget_show(wizard->recv_imap_label);
1265 gtk_widget_show(wizard->recv_imap_subdir);
1266 gtk_widget_show(wizard->subsonly_checkbtn);
1267 gtk_widget_show(wizard->recv_username);
1268 gtk_widget_show(wizard->recv_password);
1269 gtk_widget_show(wizard->recv_username_label);
1270 gtk_widget_show(wizard->recv_password_label);
1271 gtk_widget_hide(wizard->no_imap_warning);
1273 gtk_widget_show(wizard->recv_use_ssl);
1274 gtk_widget_show(wizard->recv_use_tls);
1275 gtk_widget_show(wizard->recv_cert_table);
1277 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1278 gtk_widget_show(wizard->auto_configure_btn);
1279 gtk_widget_hide(wizard->auto_configure_cancel_btn);
1280 gtk_widget_show(wizard->auto_configure_lbl);
1282 gtk_label_set_text(GTK_LABEL(wizard->recv_label),
1283 g_strconcat("<span weight=\"bold\">", _("Server address:"),
1285 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1286 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1288 if (wizard->create_mailbox) {
1289 gtk_widget_hide(wizard->mailbox_label);
1290 gtk_widget_hide(wizard->mailbox_name);
1293 gtk_widget_hide(wizard->recv_imap_label);
1294 gtk_widget_hide(wizard->recv_imap_subdir);
1295 gtk_widget_hide(wizard->subsonly_checkbtn);
1296 gtk_widget_hide(wizard->recv_username);
1297 gtk_widget_hide(wizard->recv_password);
1298 gtk_widget_hide(wizard->recv_username_label);
1299 gtk_widget_hide(wizard->recv_password_label);
1300 gtk_widget_show(wizard->no_imap_warning);
1301 if (wizard->create_mailbox) {
1302 gtk_widget_hide(wizard->mailbox_label);
1303 gtk_widget_hide(wizard->mailbox_name);
1306 gtk_widget_hide(wizard->recv_use_ssl);
1307 gtk_widget_hide(wizard->recv_use_tls);
1308 gtk_widget_hide(wizard->recv_cert_table);
1310 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, FALSE);
1312 } else if (protocol == A_LOCAL) {
1313 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
1314 gtk_label_set_text(GTK_LABEL(wizard->recv_label),
1315 g_strconcat("<span weight=\"bold\">", _("Local mailbox:"),
1317 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1318 gtk_widget_hide(wizard->no_imap_warning);
1319 gtk_widget_hide(wizard->recv_imap_label);
1320 gtk_widget_hide(wizard->recv_imap_subdir);
1321 gtk_widget_hide(wizard->subsonly_checkbtn);
1322 gtk_widget_hide(wizard->recv_username);
1323 gtk_widget_hide(wizard->recv_password);
1324 gtk_widget_hide(wizard->recv_username_label);
1325 gtk_widget_hide(wizard->recv_password_label);
1326 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1327 gtk_widget_hide(wizard->auto_configure_btn);
1328 gtk_widget_hide(wizard->auto_configure_cancel_btn);
1329 gtk_widget_hide(wizard->auto_configure_lbl);
1332 gtk_widget_hide(wizard->recv_use_ssl);
1333 gtk_widget_hide(wizard->recv_use_tls);
1334 gtk_widget_hide(wizard->recv_cert_table);
1336 if (wizard->create_mailbox) {
1337 gtk_widget_show(wizard->mailbox_label);
1338 gtk_widget_show(wizard->mailbox_name);
1340 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1344 static void wizard_protocol_changed(GtkComboBox *combo, gpointer data)
1346 WizardWindow *wizard = (WizardWindow *)data;
1347 RecvProtocol protocol = combobox_get_active_data(combo);
1349 wizard_protocol_change(wizard, protocol);
1352 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1353 static void auto_configure_cb (GtkWidget *widget, gpointer data)
1355 gchar *address = NULL;
1356 AutoConfigureData *recv_data;
1357 AutoConfigureData *send_data;
1358 static GCancellable *recv_cancel = NULL;
1359 static GCancellable *send_cancel = NULL;
1360 WizardWindow *wizard = (WizardWindow *)data;
1361 RecvProtocol protocol = combobox_get_active_data(GTK_COMBO_BOX(wizard->recv_type));
1364 recv_cancel = g_cancellable_new();
1365 send_cancel = g_cancellable_new();
1368 if (widget == wizard->auto_configure_cancel_btn) {
1369 g_cancellable_cancel(recv_cancel);
1370 g_cancellable_cancel(send_cancel);
1371 g_object_unref(recv_cancel);
1372 g_object_unref(send_cancel);
1378 address = gtk_editable_get_chars(GTK_EDITABLE(wizard->email), 0, -1);
1380 if (strchr(address, '@') == NULL) {
1382 gtk_label_set_text(GTK_LABEL(wizard->auto_configure_lbl),
1383 _("Failed (wrong address)"));
1387 if (protocol == A_POP3 || protocol == A_IMAP4) {
1388 recv_data = g_new0(AutoConfigureData, 1);
1389 recv_data->configure_button = GTK_BUTTON(wizard->auto_configure_btn);
1390 recv_data->cancel_button = GTK_BUTTON(wizard->auto_configure_cancel_btn);
1391 recv_data->info_label = GTK_LABEL(wizard->auto_configure_lbl);
1392 recv_data->uid_entry = GTK_ENTRY(wizard->recv_username);
1393 recv_data->cancel = recv_cancel;
1396 recv_data->ssl_service = "pop3s";
1397 recv_data->tls_service = "pop3";
1398 recv_data->address = g_strdup(address);
1399 recv_data->hostname_entry = GTK_ENTRY(wizard->recv_server);
1400 recv_data->set_port = NULL;
1401 recv_data->port = NULL;
1402 recv_data->tls_checkbtn = GTK_TOGGLE_BUTTON(wizard->recv_use_tls);
1403 recv_data->ssl_checkbtn = GTK_TOGGLE_BUTTON(wizard->recv_use_ssl);
1404 recv_data->default_port = 110;
1405 recv_data->default_ssl_port = 995;
1408 recv_data->ssl_service = "imaps";
1409 recv_data->tls_service = "imap";
1410 recv_data->address = g_strdup(address);
1411 recv_data->hostname_entry = GTK_ENTRY(wizard->recv_server);
1412 recv_data->set_port = NULL;
1413 recv_data->port = NULL;
1414 recv_data->tls_checkbtn = GTK_TOGGLE_BUTTON(wizard->recv_use_tls);
1415 recv_data->ssl_checkbtn = GTK_TOGGLE_BUTTON(wizard->recv_use_ssl);
1416 recv_data->default_port = 143;
1417 recv_data->default_ssl_port = 993;
1420 cm_return_if_fail(FALSE);
1422 auto_configure_service(recv_data);
1425 send_data = g_new0(AutoConfigureData, 1);
1426 send_data->configure_button = GTK_BUTTON(wizard->auto_configure_btn);
1427 send_data->cancel_button = GTK_BUTTON(wizard->auto_configure_cancel_btn);
1428 send_data->info_label = GTK_LABEL(wizard->auto_configure_lbl);
1429 send_data->cancel = send_cancel;
1431 send_data->ssl_service = NULL;
1432 send_data->tls_service = "submission";
1433 send_data->address = g_strdup(address);
1434 send_data->hostname_entry = GTK_ENTRY(wizard->smtp_server);
1435 send_data->set_port = NULL;
1436 send_data->port = NULL;
1437 send_data->tls_checkbtn = GTK_TOGGLE_BUTTON(wizard->smtp_use_tls);
1438 send_data->ssl_checkbtn = GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl);
1439 send_data->default_port = 25;
1440 send_data->default_ssl_port = -1;
1441 send_data->auth_checkbtn = GTK_TOGGLE_BUTTON(wizard->smtp_auth);
1443 auto_configure_service(send_data);
1449 static GtkWidget* recv_page (WizardWindow * wizard)
1451 GtkWidget *table = gtk_table_new(1,1, FALSE);
1454 GtkWidget *hbox_spc;
1455 GtkWidget *recv_table;
1459 GtkWidget *recv_cert_table;
1461 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1462 GtkWidget *auto_configure_btn;
1463 GtkWidget *auto_configure_cancel_btn;
1464 GtkWidget *auto_configure_lbl;
1466 GtkListStore *store;
1471 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1472 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1474 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1475 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1477 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1478 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1480 recv_table = gtk_table_new(4, 2, FALSE);
1482 gtk_box_pack_start(GTK_BOX(vbox), recv_table, FALSE, FALSE, 0);
1484 label = gtk_label_new(g_strconcat("<span weight=\"bold\">", _("Server type:"), "</span>", NULL));
1485 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1486 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
1487 gtk_table_attach(GTK_TABLE(recv_table), label, 0,1,0,1,
1488 GTK_FILL, 0, VSPACING_NARROW, 0);
1489 wizard->recv_type = gtkut_sc_combobox_create(NULL, FALSE);
1490 store = GTK_LIST_STORE(gtk_combo_box_get_model(
1491 GTK_COMBO_BOX(wizard->recv_type)));
1493 COMBOBOX_ADD(store, _("POP3"), A_POP3);
1494 COMBOBOX_ADD(store, _("IMAP"), A_IMAP4);
1495 COMBOBOX_ADD(store, _("Local mbox file"), A_LOCAL);
1497 switch(tmpl.recvtype) {
1510 gtk_combo_box_set_active(GTK_COMBO_BOX (wizard->recv_type), index);
1511 g_signal_connect(G_OBJECT(wizard->recv_type), "changed",
1512 G_CALLBACK(wizard_protocol_changed),
1514 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_type, 1,2,0,1,
1515 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1517 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1518 auto_configure_btn = gtk_button_new_with_label(_("Auto-configure"));
1519 auto_configure_cancel_btn = gtk_button_new_with_label(_("Cancel"));
1520 gtk_table_attach(GTK_TABLE(recv_table), auto_configure_btn, 0,1,1,2,
1521 GTK_FILL, 0, VSPACING_NARROW, 0);
1522 auto_configure_lbl = gtk_label_new("");
1523 gtk_misc_set_alignment(GTK_MISC(auto_configure_lbl), 0, 0.5);
1524 gtk_table_attach(GTK_TABLE(recv_table), auto_configure_lbl, 1,2,1,2,
1525 GTK_FILL, 0, VSPACING_NARROW, 0);
1526 gtk_widget_show(auto_configure_btn);
1527 gtk_widget_show(auto_configure_lbl);
1528 wizard->auto_configure_lbl = auto_configure_lbl;
1529 wizard->auto_configure_btn = auto_configure_btn;
1530 wizard->auto_configure_cancel_btn = auto_configure_cancel_btn;
1531 g_signal_connect (G_OBJECT (auto_configure_btn), "clicked",
1532 G_CALLBACK (auto_configure_cb), wizard);
1533 g_signal_connect (G_OBJECT (auto_configure_cancel_btn), "clicked",
1534 G_CALLBACK (auto_configure_cb), wizard);
1537 wizard->recv_label = gtk_label_new(g_strconcat("<span weight=\"bold\">",
1538 _("Server address:"), "</span>", NULL));
1539 gtk_misc_set_alignment(GTK_MISC(wizard->recv_label), 1, 0.5);
1540 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1541 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_label, 0,1,2,3,
1542 GTK_FILL, 0, VSPACING_NARROW, 0);
1543 wizard->recv_server = gtk_entry_new();
1544 text = get_default_server(wizard, "pop");
1545 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1548 CLAWS_SET_TIP(wizard->recv_server,
1549 _("You can specify the port number by appending it at the end: "
1550 "\"mail.example.com:110\""));
1551 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_server, 1,2,2,3,
1552 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1554 wizard->recv_username_label = gtk_label_new(g_strconcat("<span weight=\"bold\">",
1555 _("Username:"),"</span>", NULL));
1556 gtk_misc_set_alignment(GTK_MISC(wizard->recv_username_label), 1, 0.5);
1557 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_username_label), TRUE);
1558 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_username_label, 0,1,3,4,
1559 GTK_FILL, 0, VSPACING_NARROW, 0);
1560 wizard->recv_username = gtk_entry_new();
1561 text = get_default_account(wizard);
1562 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
1564 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_username, 1,2,3,4,
1565 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1567 wizard->recv_password_label = gtk_label_new(_("Password:"));
1568 gtk_misc_set_alignment(GTK_MISC(wizard->recv_password_label), 1, 0.5);
1569 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_password_label, 0,1,4,5,
1570 GTK_FILL, 0, VSPACING_NARROW, 0);
1571 wizard->recv_password = gtk_entry_new();
1572 gtk_entry_set_text(GTK_ENTRY(wizard->recv_password), tmpl.recvpass?tmpl.recvpass:"");
1573 gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_password), FALSE);
1574 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_password, 1,2,4,5,
1575 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1577 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1578 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1579 wizard->recv_use_ssl = gtk_check_button_new_with_label(
1580 _("Use SSL to connect to receiving server"));
1581 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl),
1583 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_ssl, FALSE, FALSE, 0);
1585 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1586 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
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 wizard->recv_use_tls = gtk_check_button_new_with_label(
1591 _("Use SSL via STARTTLS"));
1592 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls),
1594 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_tls, FALSE, FALSE, 0);
1595 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, wizard->recv_use_tls);
1597 recv_cert_table = gtk_table_new(3,3, FALSE);
1598 gtk_box_pack_start (GTK_BOX(vbox), recv_cert_table, FALSE, FALSE, 4);
1599 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1600 hbox_spc = gtk_hbox_new (FALSE, 0);
1601 gtk_widget_set_size_request (hbox_spc, 12, -1);
1602 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1603 label = gtk_label_new(_("Client SSL certificate (optional)"));
1604 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
1605 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1606 gtk_table_attach(GTK_TABLE(recv_cert_table), hbox, 0, 3, 0, 1, GTK_FILL, 0, 0, 0);
1607 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1608 hbox_spc = gtk_hbox_new (FALSE, 0);
1609 gtk_widget_set_size_request (hbox_spc, 12, -1);
1610 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1611 label = gtk_label_new(_("File"));
1612 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1613 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1614 gtk_table_attach(GTK_TABLE(recv_cert_table), hbox, 0, 1, 1, 2,
1615 GTK_FILL, 0, VSPACING_NARROW, 0);
1616 wizard->recv_ssl_cert_file = gtk_entry_new();
1617 gtk_entry_set_text(GTK_ENTRY(wizard->recv_ssl_cert_file), tmpl.recvssl_cert?tmpl.recvssl_cert:"");
1618 gtk_table_attach(GTK_TABLE(recv_cert_table), wizard->recv_ssl_cert_file, 1, 2, 1, 2, GTK_FILL, 0, 0, 0);
1619 button = gtkut_get_browse_file_btn(_("Browse"));
1620 gtk_table_attach(GTK_TABLE(recv_cert_table), button, 2, 3, 1, 2,
1621 GTK_FILL, 0, VSPACING_NARROW, 0);
1622 g_signal_connect(G_OBJECT(button), "clicked",
1623 G_CALLBACK(cert_browse_cb), wizard->recv_ssl_cert_file);
1625 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1626 hbox_spc = gtk_hbox_new (FALSE, 0);
1627 gtk_widget_set_size_request (hbox_spc, 12, -1);
1628 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1629 label = gtk_label_new(_("Password"));
1630 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1631 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1632 gtk_table_attach(GTK_TABLE(recv_cert_table), hbox, 0, 1, 2, 3,
1633 GTK_FILL, 0, VSPACING_NARROW, 0);
1634 wizard->recv_ssl_cert_pass = gtk_entry_new();
1635 gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_ssl_cert_pass), FALSE);
1636 gtk_entry_set_text(GTK_ENTRY(wizard->recv_ssl_cert_pass), tmpl.recvssl_cert_pass?tmpl.recvssl_cert_pass:"");
1637 gtk_table_attach(GTK_TABLE(recv_cert_table), wizard->recv_ssl_cert_pass, 1, 2, 2, 3, GTK_FILL, 0, 0, 0);
1638 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, recv_cert_table);
1639 wizard->recv_cert_table = recv_cert_table;
1641 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1642 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1643 wizard->recv_imap_subdir = gtk_entry_new();
1644 gtk_entry_set_text(GTK_ENTRY(wizard->recv_imap_subdir), tmpl.imapdir?tmpl.imapdir:"");
1645 wizard->recv_imap_label = gtk_label_new(_("IMAP server directory:"));
1646 gtk_misc_set_alignment(GTK_MISC(wizard->recv_imap_label), 1, 0.5);
1647 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_label, FALSE, FALSE, 0);
1648 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_subdir, TRUE, TRUE, 0);
1650 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1651 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1652 hbox_spc = gtk_hbox_new (FALSE, 0);
1653 gtk_widget_set_size_request (hbox_spc, 12, -1);
1654 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1655 wizard->subsonly_checkbtn = gtk_check_button_new_with_label(
1656 _("Show only subscribed folders"));
1657 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn),
1659 gtk_box_pack_start(GTK_BOX(hbox), wizard->subsonly_checkbtn, FALSE, FALSE, 0);
1661 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1662 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1663 wizard->no_imap_warning = gtk_label_new(g_strconcat("<span weight=\"bold\">",
1664 _("Warning: this version of Claws Mail\n"
1665 "has been built without IMAP support."), "</span>", NULL));
1666 gtk_label_set_use_markup(GTK_LABEL(wizard->no_imap_warning), TRUE);
1667 gtk_box_pack_start(GTK_BOX(hbox), wizard->no_imap_warning, FALSE, FALSE, 0);
1673 wizard_response_cb (GtkDialog * dialog, int response, gpointer data)
1675 WizardWindow * wizard = (WizardWindow *)data;
1676 int current_page, num_pages;
1677 gboolean skip_mailbox_page = FALSE;
1678 gint protocol = combobox_get_active_data(GTK_COMBO_BOX(wizard->recv_type));
1680 if (protocol == A_IMAP4) {
1681 skip_mailbox_page = TRUE;
1684 num_pages = g_slist_length(wizard->pages);
1686 current_page = gtk_notebook_get_current_page (
1687 GTK_NOTEBOOK(wizard->notebook));
1688 if (response == CANCEL)
1690 wizard->result = FALSE;
1691 wizard->finished = TRUE;
1692 gtk_widget_destroy (GTK_WIDGET(dialog));
1694 else if (response == FINISHED)
1696 if (!wizard_write_config(wizard)) {
1697 current_page = gtk_notebook_get_current_page (
1698 GTK_NOTEBOOK(wizard->notebook));
1701 wizard->result = TRUE;
1702 wizard->finished = TRUE;
1703 gtk_widget_destroy (GTK_WIDGET(dialog));
1707 if (response == GO_BACK)
1709 if (current_page > 0) {
1711 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1715 gtk_notebook_set_current_page (
1716 GTK_NOTEBOOK(wizard->notebook),
1720 else if (response == GO_FORWARD)
1722 if (current_page < (num_pages-1)) {
1724 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1728 gtk_notebook_set_current_page (
1729 GTK_NOTEBOOK(wizard->notebook),
1734 gtk_dialog_set_response_sensitive (dialog, GO_BACK,
1736 gtk_dialog_set_response_sensitive (dialog, GO_FORWARD,
1737 current_page < (num_pages - 1));
1738 if (current_page == (num_pages -1)) {
1739 gtk_dialog_set_response_sensitive (dialog, FINISHED, TRUE);
1740 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), FINISHED);
1742 gtk_dialog_set_response_sensitive (dialog, FINISHED, FALSE);
1743 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), GO_FORWARD);
1749 static gint wizard_close_cb(GtkWidget *widget, GdkEventAny *event,
1752 WizardWindow *wizard = (WizardWindow *)data;
1753 wizard->result = FALSE;
1754 wizard->finished = TRUE;
1759 #define PACK_WARNING(text) { \
1760 label = gtk_label_new(text); \
1761 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); \
1762 gtk_box_pack_end(GTK_BOX(widget), label, FALSE, FALSE, 0); \
1765 gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) {
1766 WizardWindow *wizard = g_new0(WizardWindow, 1);
1770 GtkWidget *scrolled_window;
1775 wizard->mainwin = mainwin;
1776 wizard->create_mailbox = create_mailbox;
1778 gtk_widget_hide(mainwin->window);
1780 wizard_read_defaults();
1782 wizard->window = gtk_dialog_new_with_buttons (_("Claws Mail Setup Wizard"),
1784 GTK_STOCK_GO_BACK, GO_BACK,
1785 GTK_STOCK_GO_FORWARD, GO_FORWARD,
1786 GTK_STOCK_SAVE, FINISHED,
1787 GTK_STOCK_CANCEL, CANCEL,
1789 gtk_widget_set_size_request(wizard->window, -1, 480);
1790 gtk_window_set_position(GTK_WINDOW(wizard->window), GTK_WIN_POS_CENTER);
1792 g_signal_connect(wizard->window, "response",
1793 G_CALLBACK(wizard_response_cb), wizard);
1794 gtk_widget_realize(wizard->window);
1795 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window),
1797 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1799 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1801 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1803 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1806 wizard->notebook = gtk_notebook_new();
1807 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(wizard->notebook), FALSE);
1808 gtk_notebook_set_show_border(GTK_NOTEBOOK(wizard->notebook), FALSE);
1809 gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(wizard->window))),
1810 wizard->notebook, TRUE, TRUE, 0);
1812 wizard->pages = NULL;
1814 /*welcome page: 0 */
1816 page = create_page(wizard, _("Welcome to Claws Mail"));
1818 wizard->pages = g_slist_append(wizard->pages, page);
1819 widget = stock_pixmap_widget(wizard->window,
1820 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1822 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1824 text = g_strdup(_("Welcome to the Claws Mail setup wizard.\n\n"
1825 "We will begin by defining some basic "
1826 "information about you and your most common "
1827 "mail options so that you can start to use "
1828 "Claws Mail in less than five minutes."));
1829 widget = gtk_label_new(text);
1830 gtk_label_set_line_wrap(GTK_LABEL(widget), TRUE);
1831 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1837 widget = create_page (wizard, _("About You"));
1838 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1839 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1840 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1841 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1843 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1845 PACK_WARNING(_("Bold fields must be completed"));
1847 wizard->pages = g_slist_append(wizard->pages, widget);
1849 /* recv+auth page: 2 */
1852 widget = create_page (wizard, _("Receiving mail"));
1853 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1854 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1855 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1856 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1858 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1860 PACK_WARNING(_("Bold fields must be completed"));
1862 wizard->pages = g_slist_append(wizard->pages, widget);
1867 widget = create_page (wizard, _("Sending mail"));
1868 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1869 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1870 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1871 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1873 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1875 PACK_WARNING(_("Bold fields must be completed"));
1877 wizard->pages = g_slist_append(wizard->pages, widget);
1879 /* mailbox page: 4 */
1880 if (create_mailbox) {
1883 widget = create_page (wizard, _("Saving mail on disk"));
1884 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1885 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1886 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1887 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1889 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1890 mailbox_page(wizard));
1891 PACK_WARNING(_("Bold fields must be completed"));
1893 wizard->pages = g_slist_append(wizard->pages, widget);
1899 page = create_page(wizard, _("Configuration finished"));
1901 wizard->pages = g_slist_append(wizard->pages, page);
1902 widget = stock_pixmap_widget(wizard->window,
1903 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1905 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1907 text = g_strdup(_("Claws Mail is now ready.\n"
1908 "Click Save to start."));
1909 widget = gtk_label_new(text);
1910 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1914 for (cur = wizard->pages; cur && cur->data; cur = cur->next) {
1915 gtk_notebook_append_page (GTK_NOTEBOOK(wizard->notebook),
1916 GTK_WIDGET(cur->data), NULL);
1919 g_signal_connect(G_OBJECT(wizard->window), "delete_event",
1920 G_CALLBACK(wizard_close_cb), wizard);
1921 gtk_widget_show_all (wizard->window);
1923 gtk_widget_hide(wizard->recv_imap_label);
1924 gtk_widget_hide(wizard->recv_imap_subdir);
1925 gtk_widget_hide(wizard->subsonly_checkbtn);
1926 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1927 gtk_widget_hide(wizard->auto_configure_cancel_btn);
1929 wizard_protocol_change(wizard, tmpl.recvtype);
1931 while (!wizard->finished)
1932 gtk_main_iteration();
1934 result = wizard->result;
1938 gtk_widget_show(mainwin->window);