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 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 = g_strdup(
761 gtk_entry_get_text(GTK_ENTRY(wizard->recv_password)));
763 prefs_account->smtp_userid = g_strdup(
764 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)));
765 prefs_account->smtp_passwd = g_strdup(
766 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_password)));
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(_("<span weight=\"bold\">Your name:</span>"));
970 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
971 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
972 gtk_table_attach(GTK_TABLE(user_table), label, 0,1,0,1,
973 GTK_FILL, 0, VSPACING_NARROW, 0);
974 wizard->full_name = gtk_entry_new();
975 gtk_entry_set_text(GTK_ENTRY(wizard->full_name), tmpl.name?tmpl.name:"");
976 gtk_table_attach(GTK_TABLE(user_table), wizard->full_name, 1,2,0,1,
977 GTK_EXPAND|GTK_FILL, 0, 0, 0);
979 label = gtk_label_new(_("<span weight=\"bold\">Your email address:</span>"));
980 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
981 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
982 gtk_table_attach(GTK_TABLE(user_table), label, 0,1,1,2,
983 GTK_FILL, 0, VSPACING_NARROW, 0);
984 wizard->email = gtk_entry_new();
985 gtk_entry_set_text(GTK_ENTRY(wizard->email), tmpl.email?tmpl.email:"");
986 gtk_table_attach(GTK_TABLE(user_table), wizard->email, 1,2,1,2,
987 GTK_EXPAND|GTK_FILL, 0, 0, 0);
989 label = gtk_label_new(_("Your organization:"));
990 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
991 gtk_table_attach(GTK_TABLE(user_table), label, 0,1,2,3,
992 GTK_FILL, 0, VSPACING_NARROW, 0);
993 wizard->organization = gtk_entry_new();
994 gtk_entry_set_text(GTK_ENTRY(wizard->organization), tmpl.organization?tmpl.organization:"");
995 gtk_table_attach(GTK_TABLE(user_table), wizard->organization, 1,2,2,3,
996 GTK_EXPAND|GTK_FILL, 0, 0, 0);
998 g_signal_connect(G_OBJECT(wizard->email), "changed",
999 G_CALLBACK(wizard_email_changed),
1004 static GtkWidget* mailbox_page (WizardWindow * wizard)
1006 GtkWidget *table = gtk_table_new(1,1, FALSE);
1010 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1011 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1013 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1014 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1016 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1017 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1019 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1020 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1022 wizard->mailbox_label = gtk_label_new(_("<span weight=\"bold\">Mailbox name:</span>"));
1023 gtk_label_set_use_markup(GTK_LABEL(wizard->mailbox_label), TRUE);
1024 if (GTK_IS_MISC(wizard->mailbox_label))
1025 gtk_misc_set_alignment(GTK_MISC(wizard->mailbox_label), 1, 0.5);
1026 wizard->mailbox_name = gtk_entry_new();
1028 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), tmpl.mailbox?tmpl.mailbox:"");
1030 CLAWS_SET_TIP(wizard->mailbox_name, _("You can also specify an absolute path, for example: "
1031 "\"/home/john/Documents/Mail\""));
1033 gtk_box_pack_start(GTK_BOX(hbox), wizard->mailbox_label, FALSE, FALSE, 0);
1034 gtk_box_pack_start(GTK_BOX(hbox), wizard->mailbox_name, TRUE, TRUE, 0);
1039 static void smtp_auth_changed (GtkWidget *btn, gpointer data)
1041 WizardWindow *wizard = (WizardWindow *)data;
1042 gboolean do_auth = gtk_toggle_button_get_active(
1043 GTK_TOGGLE_BUTTON(wizard->smtp_auth));
1044 gtk_widget_set_sensitive(wizard->smtp_username, do_auth);
1045 gtk_widget_set_sensitive(wizard->smtp_username_label, do_auth);
1046 gtk_widget_set_sensitive(wizard->smtp_password, do_auth);
1047 gtk_widget_set_sensitive(wizard->smtp_password_label, do_auth);
1051 static void cert_browse_cb(GtkWidget *widget, gpointer data)
1053 GtkEntry *dest = GTK_ENTRY(data);
1055 gchar *utf8_filename;
1057 filename = filesel_select_file_open(_("Select certificate file"), NULL);
1058 if (!filename) return;
1060 utf8_filename = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
1061 if (!utf8_filename) {
1062 g_warning("cert_browse_cb(): failed to convert character set.");
1063 utf8_filename = g_strdup(filename);
1065 gtk_entry_set_text(dest, utf8_filename);
1066 g_free(utf8_filename);
1070 static GtkWidget* smtp_page (WizardWindow * wizard)
1072 GtkWidget *table = gtk_table_new(1, 1, FALSE);
1075 GtkWidget *hbox_spc;
1076 GtkWidget *smtp_auth_table;
1080 GtkWidget *smtp_cert_table;
1084 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1085 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1087 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1088 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1090 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1091 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1093 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1094 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1095 wizard->smtp_server = gtk_entry_new();
1096 text = get_default_server(wizard, "smtp");
1097 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
1100 CLAWS_SET_TIP(wizard->smtp_server,
1101 _("You can specify the port number by appending it at the end: "
1102 "\"mail.example.com:25\""));
1104 PACK_BOX(hbox, _("<span weight=\"bold\">SMTP server address:</span>"),
1105 wizard->smtp_server);
1107 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1108 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1109 wizard->smtp_auth = gtk_check_button_new_with_label(
1110 _("Use authentication"));
1111 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth),
1113 g_signal_connect(G_OBJECT(wizard->smtp_auth), "toggled",
1114 G_CALLBACK(smtp_auth_changed),
1116 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_auth, FALSE, FALSE, 0);
1118 label = gtk_label_new(_("<span size=\"small\">(empty to use the same as receive)</span>"));
1119 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
1120 SET_TOGGLE_SENSITIVITY (wizard->smtp_auth, label);
1121 gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 0);
1123 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1124 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1125 hbox_spc = gtk_hbox_new (FALSE, 0);
1126 gtk_widget_set_size_request (hbox_spc, 12, -1);
1127 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1128 smtp_auth_table = gtk_table_new(2, 2, FALSE);
1129 SET_TOGGLE_SENSITIVITY (wizard->smtp_auth, smtp_auth_table);
1130 gtk_box_pack_start(GTK_BOX(hbox), smtp_auth_table, TRUE, TRUE, 0);
1132 wizard->smtp_username_label = gtk_label_new(_("SMTP username:"));
1133 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_username_label), 1, 0.5);
1134 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_username_label, 0,1,0,1,
1135 GTK_FILL, 0, VSPACING_NARROW, 0);
1136 text = get_default_smtp_account(wizard);
1137 wizard->smtp_username = gtk_entry_new();
1138 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_username), text);
1140 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_username, 1,2,0,1,
1141 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1143 wizard->smtp_password_label = gtk_label_new(_("SMTP password:"));
1144 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_password_label), 1, 0.5);
1145 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_password_label, 0,1,1,2,
1146 GTK_FILL, 0, VSPACING_NARROW, 0);
1147 wizard->smtp_password = gtk_entry_new();
1148 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_password), tmpl.smtppass?tmpl.smtppass:"");
1149 gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_password), FALSE);
1150 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_password, 1,2,1,2,
1151 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1153 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1154 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1155 wizard->smtp_use_ssl = gtk_check_button_new_with_label(
1156 _("Use SSL to connect to SMTP server"));
1157 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl),
1159 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_ssl, FALSE, FALSE, 0);
1161 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1162 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1163 hbox_spc = gtk_hbox_new (FALSE, 0);
1164 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1165 gtk_widget_set_size_request (hbox_spc, 12, -1);
1166 wizard->smtp_use_tls = gtk_check_button_new_with_label(
1167 _("Use SSL via STARTTLS"));
1168 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls),
1170 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_tls, FALSE, FALSE, 0);
1171 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, wizard->smtp_use_tls);
1173 smtp_cert_table = gtk_table_new(3,3, FALSE);
1174 gtk_box_pack_start (GTK_BOX(vbox), smtp_cert_table, FALSE, FALSE, 4);
1175 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1176 hbox_spc = gtk_hbox_new (FALSE, 0);
1177 gtk_widget_set_size_request (hbox_spc, 12, -1);
1178 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1179 label = gtk_label_new(_("Client SSL certificate (optional)"));
1180 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
1181 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1182 gtk_table_attach(GTK_TABLE(smtp_cert_table), hbox, 0, 3, 0, 1, GTK_FILL, 0, 0, 0);
1183 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1184 hbox_spc = gtk_hbox_new (FALSE, 0);
1185 gtk_widget_set_size_request (hbox_spc, 12, -1);
1186 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1187 label = gtk_label_new(_("File"));
1188 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1189 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1190 gtk_table_attach(GTK_TABLE(smtp_cert_table), hbox, 0, 1, 1, 2,
1191 GTK_FILL, 0, VSPACING_NARROW, 0);
1192 wizard->smtp_ssl_cert_file = gtk_entry_new();
1193 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_ssl_cert_file), tmpl.smtpssl_cert?tmpl.smtpssl_cert:"");
1194 gtk_table_attach(GTK_TABLE(smtp_cert_table), wizard->smtp_ssl_cert_file, 1, 2, 1, 2, GTK_FILL, 0, 0, 0);
1195 button = gtkut_get_browse_file_btn(_("Browse"));
1196 gtk_table_attach(GTK_TABLE(smtp_cert_table), button, 2, 3, 1, 2,
1197 GTK_FILL, 0, VSPACING_NARROW, 0);
1198 g_signal_connect(G_OBJECT(button), "clicked",
1199 G_CALLBACK(cert_browse_cb), wizard->smtp_ssl_cert_file);
1201 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1202 hbox_spc = gtk_hbox_new (FALSE, 0);
1203 gtk_widget_set_size_request (hbox_spc, 12, -1);
1204 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1205 label = gtk_label_new(_("Password"));
1206 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1207 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1208 gtk_table_attach(GTK_TABLE(smtp_cert_table), hbox, 0, 1, 2, 3,
1209 GTK_FILL, 0, VSPACING_NARROW, 0);
1210 wizard->smtp_ssl_cert_pass = gtk_entry_new();
1211 gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_ssl_cert_pass), FALSE);
1212 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_ssl_cert_pass), tmpl.smtpssl_cert_pass?tmpl.smtpssl_cert_pass:"");
1213 gtk_table_attach(GTK_TABLE(smtp_cert_table), wizard->smtp_ssl_cert_pass, 1, 2, 2, 3, GTK_FILL, 0, 0, 0);
1214 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, smtp_cert_table);
1215 wizard->smtp_cert_table = smtp_cert_table;
1217 smtp_auth_changed(NULL, wizard);
1221 static void wizard_protocol_change(WizardWindow *wizard, RecvProtocol protocol)
1225 if (protocol == A_POP3) {
1226 text = get_default_server(wizard, "pop");
1227 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1228 gtk_widget_hide(wizard->recv_imap_label);
1229 gtk_widget_hide(wizard->recv_imap_subdir);
1230 gtk_widget_hide(wizard->subsonly_checkbtn);
1231 gtk_widget_show(wizard->recv_username);
1232 gtk_widget_show(wizard->recv_password);
1233 gtk_widget_show(wizard->recv_username_label);
1234 gtk_widget_show(wizard->recv_password_label);
1235 gtk_widget_hide(wizard->no_imap_warning);
1237 gtk_widget_show(wizard->recv_use_ssl);
1238 gtk_widget_show(wizard->recv_use_tls);
1239 gtk_widget_show(wizard->recv_cert_table);
1241 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1242 gtk_widget_show(wizard->auto_configure_btn);
1243 gtk_widget_hide(wizard->auto_configure_cancel_btn);
1244 gtk_widget_show(wizard->auto_configure_lbl);
1246 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1247 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1248 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1250 if (wizard->create_mailbox) {
1251 gtk_widget_show(wizard->mailbox_label);
1252 gtk_widget_show(wizard->mailbox_name);
1254 } else if (protocol == A_IMAP4) {
1255 #ifdef HAVE_LIBETPAN
1256 text = get_default_server(wizard, "imap");
1257 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1258 gtk_widget_show(wizard->recv_imap_label);
1259 gtk_widget_show(wizard->recv_imap_subdir);
1260 gtk_widget_show(wizard->subsonly_checkbtn);
1261 gtk_widget_show(wizard->recv_username);
1262 gtk_widget_show(wizard->recv_password);
1263 gtk_widget_show(wizard->recv_username_label);
1264 gtk_widget_show(wizard->recv_password_label);
1265 gtk_widget_hide(wizard->no_imap_warning);
1267 gtk_widget_show(wizard->recv_use_ssl);
1268 gtk_widget_show(wizard->recv_use_tls);
1269 gtk_widget_show(wizard->recv_cert_table);
1271 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1272 gtk_widget_show(wizard->auto_configure_btn);
1273 gtk_widget_hide(wizard->auto_configure_cancel_btn);
1274 gtk_widget_show(wizard->auto_configure_lbl);
1276 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1277 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1278 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1280 if (wizard->create_mailbox) {
1281 gtk_widget_hide(wizard->mailbox_label);
1282 gtk_widget_hide(wizard->mailbox_name);
1285 gtk_widget_hide(wizard->recv_imap_label);
1286 gtk_widget_hide(wizard->recv_imap_subdir);
1287 gtk_widget_hide(wizard->subsonly_checkbtn);
1288 gtk_widget_hide(wizard->recv_username);
1289 gtk_widget_hide(wizard->recv_password);
1290 gtk_widget_hide(wizard->recv_username_label);
1291 gtk_widget_hide(wizard->recv_password_label);
1292 gtk_widget_show(wizard->no_imap_warning);
1293 if (wizard->create_mailbox) {
1294 gtk_widget_hide(wizard->mailbox_label);
1295 gtk_widget_hide(wizard->mailbox_name);
1298 gtk_widget_hide(wizard->recv_use_ssl);
1299 gtk_widget_hide(wizard->recv_use_tls);
1300 gtk_widget_hide(wizard->recv_cert_table);
1302 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, FALSE);
1304 } else if (protocol == A_LOCAL) {
1305 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
1306 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Local mailbox:</span>"));
1307 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1308 gtk_widget_hide(wizard->no_imap_warning);
1309 gtk_widget_hide(wizard->recv_imap_label);
1310 gtk_widget_hide(wizard->recv_imap_subdir);
1311 gtk_widget_hide(wizard->subsonly_checkbtn);
1312 gtk_widget_hide(wizard->recv_username);
1313 gtk_widget_hide(wizard->recv_password);
1314 gtk_widget_hide(wizard->recv_username_label);
1315 gtk_widget_hide(wizard->recv_password_label);
1316 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1317 gtk_widget_hide(wizard->auto_configure_btn);
1318 gtk_widget_hide(wizard->auto_configure_cancel_btn);
1319 gtk_widget_hide(wizard->auto_configure_lbl);
1322 gtk_widget_hide(wizard->recv_use_ssl);
1323 gtk_widget_hide(wizard->recv_use_tls);
1324 gtk_widget_hide(wizard->recv_cert_table);
1326 if (wizard->create_mailbox) {
1327 gtk_widget_show(wizard->mailbox_label);
1328 gtk_widget_show(wizard->mailbox_name);
1330 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1334 static void wizard_protocol_changed(GtkComboBox *combo, gpointer data)
1336 WizardWindow *wizard = (WizardWindow *)data;
1337 RecvProtocol protocol = combobox_get_active_data(combo);
1339 wizard_protocol_change(wizard, protocol);
1342 #if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
1343 static void auto_configure_cb (GtkWidget *widget, gpointer data)
1345 gchar *address = NULL;
1346 const gchar *domain = NULL;
1347 AutoConfigureData *recv_data;
1348 AutoConfigureData *send_data;
1349 static GCancellable *recv_cancel = NULL;
1350 static GCancellable *send_cancel = NULL;
1351 WizardWindow *wizard = (WizardWindow *)data;
1352 RecvProtocol protocol = combobox_get_active_data(GTK_COMBO_BOX(wizard->recv_type));
1355 recv_cancel = g_cancellable_new();
1356 send_cancel = g_cancellable_new();
1359 if (widget == wizard->auto_configure_cancel_btn) {
1360 g_cancellable_cancel(recv_cancel);
1361 g_cancellable_cancel(send_cancel);
1362 g_object_unref(recv_cancel);
1363 g_object_unref(send_cancel);
1369 address = gtk_editable_get_chars(GTK_EDITABLE(wizard->email), 0, -1);
1371 if (strchr(address, '@') == NULL) {
1373 gtk_label_set_text(GTK_LABEL(wizard->auto_configure_lbl),
1374 _("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 = GTK_TOGGLE_BUTTON(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);