2 * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2007 Colin Leroy <colin@colino.net>
4 * and the Claws Mail team
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
28 #include <glib/gi18n.h>
29 #include <gdk/gdkkeysyms.h>
30 #include <gtk/gtkwidget.h>
31 #include <gtk/gtkvbox.h>
32 #include <gtk/gtkbox.h>
33 #include <gtk/gtktable.h>
34 #include <gtk/gtkentry.h>
35 #include <gtk/gtklabel.h>
36 #include <gtk/gtknotebook.h>
37 #include <gtk/gtktogglebutton.h>
38 #include <gtk/gtkcheckbutton.h>
54 #include "prefs_account.h"
55 #include "mainwindow.h"
56 #include "stock_pixmap.h"
59 #include "alertpanel.h"
63 #include "prefs_common.h"
73 int WELCOME_PAGE = -1;
77 int MAILBOX_PAGE = -1;
90 GtkWidget *organization;
92 GtkWidget *mailbox_name;
94 GtkWidget *smtp_server;
96 GtkWidget *smtp_username;
97 GtkWidget *smtp_password;
98 GtkWidget *smtp_username_label;
99 GtkWidget *smtp_password_label;
101 GtkWidget *recv_type;
102 GtkWidget *recv_label;
103 GtkWidget *recv_server;
104 GtkWidget *recv_username;
105 GtkWidget *recv_password;
106 GtkWidget *recv_username_label;
107 GtkWidget *recv_password_label;
108 GtkWidget *recv_imap_label;
109 GtkWidget *recv_imap_subdir;
110 GtkWidget *subsonly_checkbtn;
111 GtkWidget *no_imap_warning;
113 GtkWidget *smtp_use_ssl;
114 GtkWidget *recv_use_ssl;
115 GtkWidget *smtp_use_tls;
116 GtkWidget *recv_use_tls;
119 gboolean create_mailbox;
125 typedef struct _AccountTemplate {
134 RecvProtocol recvtype;
146 static AccountTemplate tmpl;
148 static PrefParam template_params[] = {
149 {"name", "$USERNAME",
150 &tmpl.name, P_STRING, NULL, NULL, NULL},
151 {"domain", "$DEFAULTDOMAIN",
152 &tmpl.domain, P_STRING, NULL, NULL, NULL},
153 {"email", "$NAME_MAIL@$DOMAIN",
154 &tmpl.email, P_STRING, NULL, NULL, NULL},
156 &tmpl.organization, P_STRING, NULL, NULL, NULL},
157 {"smtpserver", "smtp.$DOMAIN",
158 &tmpl.smtpserver, P_STRING, NULL, NULL, NULL},
159 {"smtpauth", "FALSE",
160 &tmpl.smtpauth, P_BOOL, NULL, NULL, NULL},
162 &tmpl.smtpuser, P_STRING, NULL, NULL, NULL},
164 &tmpl.smtppass, P_STRING, NULL, NULL, NULL},
166 &tmpl.recvtype, P_INT, NULL, NULL, NULL},
167 {"recvserver", "pop.$DOMAIN",
168 &tmpl.recvserver, P_STRING, NULL, NULL, NULL},
169 {"recvuser", "$LOGIN",
170 &tmpl.recvuser, P_STRING, NULL, NULL, NULL},
172 &tmpl.recvpass, P_STRING, NULL, NULL, NULL},
174 &tmpl.imapdir, P_STRING, NULL, NULL, NULL},
176 &tmpl.subsonly, P_BOOL, NULL, NULL, NULL},
177 {"mboxfile", "/var/mail/$LOGIN",
178 &tmpl.mboxfile, P_STRING, NULL, NULL, NULL},
180 &tmpl.mailbox, P_STRING, NULL, NULL, NULL},
182 &tmpl.smtpssl, P_INT, NULL, NULL, NULL},
184 &tmpl.recvssl, P_INT, NULL, NULL, NULL},
185 {NULL, NULL, NULL, P_INT, NULL, NULL, NULL}
189 static gchar *accountrc_tmpl =
190 "[AccountTemplate]\n"
191 "#you can use $DEFAULTDOMAIN here\n"
192 "#domain must be defined before the variables that use it\n"
193 "#by default, domain is extracted from the hostname\n"
196 "#you can use $USERNAME for name (this is the default)\n"
199 "#you can use $LOGIN, $NAME_MAIL and $DOMAIN here \n"
200 "#$NAME_MAIL is the name without uppercase and with dots instead\n"
202 "#the default is $NAME_MAIL@$DOMAIN\n"
205 "#you can use $DOMAIN here\n"
206 "#the default organization is empty\n"
209 "#you can use $DOMAIN here \n"
210 "#the default is stmp.$DOMAIN\n"
213 "#Whether to use smtp authentication\n"
214 "#the default is 0 (no)\n"
218 "#you can use $LOGIN, $NAME_MAIL, $DOMAIN or $EMAIL here\n"
219 "#the default is empty (same as reception username)\n"
223 "#the default is empty (same as reception password)\n"
226 "#recvtype can be:\n"
229 "#5 for a local mbox file\n"
232 "#you can use $DOMAIN here \n"
233 "#the default is {pop,imap}.$DOMAIN\n"
236 "#you can use $LOGIN, $NAME_MAIL, $DOMAIN or $EMAIL here\n"
237 "#default is $LOGIN\n"
240 "#default is empty\n"
243 "#imap dir if imap (relative to the home on the server)\n"
244 "#default is empty\n"
247 "#show subscribed folders only, if imap\n"
251 "#mbox file if local\n"
252 "#you can use $LOGIN here\n"
253 "#default is /var/mail/$LOGIN\n"
256 "#mailbox name if pop3 or local\n"
257 "#relative path from the user's home\n"
258 "#default is \"Mail\"\n"
261 "#whether to use ssl on STMP connections\n"
262 "#default is 0, 1 is ssl, 2 is starttls\n"
265 "#whether to use ssl on pop or imap connections\n"
266 "#default is 0, 1 is ssl, 2 is starttls\n"
269 static gchar *wizard_get_default_domain_name(void)
271 static gchar *domain_name = NULL;
273 if (domain_name == NULL) {
274 domain_name = g_strdup(get_domain_name());
275 if (strchr(domain_name, '.') != strrchr(domain_name, '.')
276 && strlen(strchr(domain_name, '.')) > 6) {
277 gchar *tmp = g_strdup(strchr(domain_name, '.')+1);
285 static gchar *get_name_for_mail(void)
287 gchar *name = g_strdup(tmpl.name);
291 while(strstr(name, " "))
292 *strstr(name, " ")='.';
297 #define PARSE_DEFAULT(str) { \
298 gchar *tmp = NULL, *new = NULL; \
300 tmp = g_strdup(str); \
301 if (strstr(str, "$USERNAME")) { \
302 tmp = g_strdup(str); \
303 *strstr(tmp, "$USERNAME") = '\0'; \
304 new = g_strconcat(tmp, g_get_real_name(), \
305 strstr(str, "$USERNAME")+strlen("$USERNAME"), \
312 if (strstr(str, "$LOGIN")) { \
313 tmp = g_strdup(str); \
314 *strstr(tmp, "$LOGIN") = '\0'; \
315 new = g_strconcat(tmp, g_get_user_name(), \
316 strstr(str, "$LOGIN")+strlen("$LOGIN"), \
323 if (strstr(str, "$EMAIL")) { \
324 tmp = g_strdup(str); \
325 *strstr(tmp, "$EMAIL") = '\0'; \
326 new = g_strconcat(tmp, tmpl.email, \
327 strstr(str, "$EMAIL")+strlen("$EMAIL"), \
334 if (strstr(str, "$NAME_MAIL")) { \
335 tmp = g_strdup(str); \
336 *strstr(tmp, "$NAME_MAIL") = '\0'; \
337 new = g_strconcat(tmp, get_name_for_mail(), \
338 strstr(str, "$NAME_MAIL")+strlen("$NAME_MAIL"), \
345 if (strstr(str, "$DEFAULTDOMAIN")) { \
346 tmp = g_strdup(str); \
347 *strstr(tmp, "$DEFAULTDOMAIN") = '\0'; \
348 new = g_strconcat(tmp, wizard_get_default_domain_name(), \
349 strstr(str, "$DEFAULTDOMAIN")+strlen("$DEFAULTDOMAIN"), \
356 if (strstr(str, "$DOMAIN")) { \
357 tmp = g_strdup(str); \
358 *strstr(tmp, "$DOMAIN") = '\0'; \
359 new = g_strconcat(tmp, tmpl.domain, \
360 strstr(str, "$DOMAIN")+strlen("$DOMAIN"), \
369 static void wizard_read_defaults(void)
373 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, "accountrc.tmpl", NULL);
374 if (!is_file_exist(rcpath)) {
375 str_write_to_file(accountrc_tmpl, rcpath);
378 prefs_read_config(template_params, "AccountTemplate", rcpath, NULL);
380 PARSE_DEFAULT(tmpl.domain);
381 PARSE_DEFAULT(tmpl.name);
382 PARSE_DEFAULT(tmpl.email);
383 PARSE_DEFAULT(tmpl.organization);
384 PARSE_DEFAULT(tmpl.smtpserver);
385 PARSE_DEFAULT(tmpl.smtpuser);
386 PARSE_DEFAULT(tmpl.smtppass);
387 PARSE_DEFAULT(tmpl.recvserver);
388 PARSE_DEFAULT(tmpl.recvuser);
389 PARSE_DEFAULT(tmpl.recvpass);
390 PARSE_DEFAULT(tmpl.imapdir);
391 PARSE_DEFAULT(tmpl.mboxfile);
392 PARSE_DEFAULT(tmpl.mailbox);
395 "%s, %s, %s, %s, %s, %d, %s, %s, %s, %s, %s, %s, %d, %d\n",
396 tmpl.name,tmpl.domain,tmpl.email,tmpl.organization,tmpl.smtpserver,
397 tmpl.recvtype,tmpl.recvserver,tmpl.recvuser,tmpl.recvpass,
398 tmpl.imapdir,tmpl.mboxfile,tmpl.mailbox,tmpl.smtpssl,tmpl.recvssl);
403 static void initialize_fonts(WizardWindow *wizard)
405 GtkWidget *widget = wizard->email;
406 gint size = pango_font_description_get_size(
407 widget->style->font_desc)
411 tmp = g_strdup(prefs_common.textfont);
412 if (strrchr(tmp, ' ')) {
413 *(strrchr(tmp, ' ')) = '\0';
414 new = g_strdup_printf("%s %d", tmp, size);
415 g_free(prefs_common.textfont);
416 prefs_common.textfont = new;
420 tmp = g_strdup(prefs_common.smallfont);
421 if (strrchr(tmp, ' ')) {
422 *(strrchr(tmp, ' ')) = '\0';
423 new = g_strdup_printf("%s %d", tmp, size);
424 g_free(prefs_common.smallfont);
425 prefs_common.smallfont = new;
429 tmp = g_strdup(prefs_common.normalfont);
430 if (strrchr(tmp, ' ')) {
431 *(strrchr(tmp, ' ')) = '\0';
432 new = g_strdup_printf("%s %d", tmp, size);
433 g_free(prefs_common.normalfont);
434 prefs_common.normalfont = new;
439 #define XFACE "+}Axz@~a,-Yx?0Ysa|q}CLRH=89Y]\"')DSX^<6p\"d)'81yx5%G#u^o*7JG&[aPU0h1Ux.vb2yIjH83{5`/bVo|~nn/i83vE^E)qk-4W)_E.4Y=D*qvf/,Ci_=P<iY<M6"
440 #define FACE "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAM1BMVEUAAAAcJCI\n\
441 ONl1JUi0+Z4daY2NZciPabV9ykS5kj6Wsl2ybmZOBsMjZxK2wzN3Pzczs7OsCAGN0AAAAAXRSTlM\n\
442 AQObYZgAAAAFiS0dEAIgFHUgAAAIVSURBVEjH1ZbtlqMgDIaFECoGhPu/2s0b0Lais/NzN6d1OJ7\n\
443 3yReQzrL8B5Zy3rvl9At52Pf2tv1vSMjtYj8jaa8XUyI/yn3YD6sigj/2Tf5Bn069MIsTPHvx/t5\n\
444 /3rU/6JCIY3YwGe26r/cwUfE3cFe5T28L0K5rJAUHEeYAQxs8DHojjk3M9wECU4xxjXisI8RA0gy\n\
445 oczJZJOjxiTFZVTchAnIRJrgdmEGDyFfAI3UuG5FmYTkR9RDrIC4H0SqV4pzpEcUp0HNLjwBv+jA\n\
446 dikUE5g9iBvzmu3sH2oDk4lnHd829+2Q9gj6kDqDPg7hsGwBzH02fE3ZCt6ZHmlNKIMjMeRwra5I\n\
447 ecgNoBnLGPmzaHPJIwLY8Sq2M/tLUJfj0QcqmfVXAdLSStIYF8dzWjBBb2VgvDa4mO9oc651OiUo\n\
448 BEKbZokdPATF9E9oKAjQJcJOniaPXrVZRAnVWaqIyqRoNC8ZJvgCcW8XN39RqxVP1rS8Yd4WnCdN\n\
449 aRTo2jJRDbg3vtCpEUGffgDPhqKDaSuVqYtOplFIvIcx3HUI5/MuIWl6vKyBjNlqEru8hbFXqBPA\n\
450 5TpHGIUZOePeaIyzfQ/g9Xg0opU1AvdfXM9floYhv92pPAE96OZtkPV8eivgQi9RTfwPUU36I26n\n\
451 Hy+WuCJzAT7efMSeA1TNf2/VugDz+dN139xfA5ffxGZDD+MvcP/uvyB80wzZ76wbz8gAAAABJRU5\n\
454 static void write_welcome_email(WizardWindow *wizard)
460 const gchar *mailbox = gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name));
461 Folder *folder = folder_find_from_path(mailbox);
462 FolderItem *inbox = folder ? folder->inbox:NULL;
463 gchar *file = get_tmp_file();
464 gchar enc_from_name[BUFFSIZE], enc_to_name[BUFFSIZE], enc_subject[BUFFSIZE];
466 get_rfc822_date(buf_date, sizeof(buf_date));
468 conv_encode_header_full(enc_subject, sizeof(enc_subject),
469 Q_("Welcome Mail Subject|Welcome to Claws Mail"),
470 strlen("Subject: "), FALSE, CS_INTERNAL);
471 conv_encode_header_full(enc_to_name, sizeof(enc_to_name),
472 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)),
473 strlen("To: "), TRUE, CS_INTERNAL);
474 conv_encode_header_full(enc_from_name, sizeof(enc_from_name),
475 _("The Claws Mail Team"),
476 strlen("From: "), TRUE, CS_INTERNAL);
478 head = g_strdup_printf(
485 "Content-Type: text/plain; charset=UTF-8\n",
489 gtk_entry_get_text(GTK_ENTRY(wizard->email)),
490 buf_date, enc_subject, XFACE, FACE);
491 body = g_strdup_printf(
493 "Welcome to Claws Mail\n"
494 "---------------------\n"
496 "Now that you have set up your account you can fetch your\n"
497 "mail by clicking the 'Get Mail' button at the left of the\n"
500 "Claws Mail has lots of extra features accessible via plugins,\n"
501 "like anti-spam filtering and learning (via the Bogofilter or\n"
502 "SpamAssassin plugins), privacy protection (via PGP/Mime), an RSS\n"
503 "aggregator, a calendar, and much more. You can load them from\n"
504 "the menu entry '/Configuration/Plugins'.\n"
506 "You can change your Account Preferences by using the menu\n"
507 "entry '/Configuration/Preferences for current account'\n"
508 "and change the general Preferences by using\n"
509 "'/Configuration/Preferences'.\n"
511 "You can find further information in the Claws Mail manual,\n"
512 "which can be accessed by using the menu entry '/Help/Manual'\n"
513 "or online at the URL given below.\n"
521 "Mailing Lists: <%s>\n"
525 "Claws Mail is free software, released under the terms\n"
526 "of the GNU General Public License, version 3 or later, as\n"
527 "published by the Free Software Foundation, 51 Franklin Street,\n"
528 "Fifth Floor, Boston, MA 02110-1301, USA. The license can be\n"
533 "If you wish to donate to the Claws Mail project you can do\n"
535 HOMEPAGE_URI, MANUAL_URI, FAQ_URI, THEMES_URI, MAILING_LIST_URI,
536 GPL_URI, DONATE_URI);
538 msg = g_strconcat(head, body, NULL);
540 if (inbox && inbox->total_msgs == 0
541 && str_write_to_file(msg, file) >= 0) {
542 MsgFlags flags = { MSG_UNREAD|MSG_NEW, 0};
543 folder_item_add_msg(inbox, file, &flags, FALSE);
552 static gboolean wizard_write_config(WizardWindow *wizard)
554 static gboolean mailbox_ok = FALSE;
555 PrefsAccount *prefs_account = prefs_account_new();
556 GList *account_list = NULL;
557 GtkWidget *menu, *menuitem;
558 gchar *smtp_server, *recv_server;
560 gint smtp_port, recv_port;
562 SSLType smtp_ssl_type, recv_ssl_type;
565 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(wizard->recv_type));
566 menuitem = gtk_menu_get_active(GTK_MENU(menu));
567 prefs_account->protocol = GPOINTER_TO_INT
568 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
571 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4 &&
572 !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)))) {
573 alertpanel_error(_("Please enter the mailbox name."));
574 g_free(prefs_account);
575 gtk_notebook_set_current_page (
576 GTK_NOTEBOOK(wizard->notebook),
582 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
583 mailbox_ok = setup_write_mailbox_path(wizard->mainwin,
585 GTK_ENTRY(wizard->mailbox_name)));
591 /* alertpanel done by setup_write_mailbox_path */
592 g_free(prefs_account);
593 gtk_notebook_set_current_page (
594 GTK_NOTEBOOK(wizard->notebook),
599 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->full_name)))
600 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->email)))) {
601 alertpanel_error(_("Please enter your name and email address."));
602 g_free(prefs_account);
603 gtk_notebook_set_current_page (
604 GTK_NOTEBOOK(wizard->notebook),
609 if (prefs_account->protocol != A_LOCAL) {
610 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)))
611 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
612 alertpanel_error(_("Please enter your receiving server "
614 g_free(prefs_account);
615 gtk_notebook_set_current_page (
616 GTK_NOTEBOOK(wizard->notebook),
621 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
622 alertpanel_error(_("Please enter your username."));
623 g_free(prefs_account);
624 gtk_notebook_set_current_page (
625 GTK_NOTEBOOK(wizard->notebook),
631 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)))) {
632 alertpanel_error(_("Please enter your SMTP server."));
633 g_free(prefs_account);
634 gtk_notebook_set_current_page (
635 GTK_NOTEBOOK(wizard->notebook),
640 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
641 if (prefs_account->protocol == A_LOCAL
642 && !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)))) {
643 alertpanel_error(_("Please enter your SMTP username."));
644 g_free(prefs_account);
645 gtk_notebook_set_current_page (
646 GTK_NOTEBOOK(wizard->notebook),
649 } /* if it's not local we'll use the reception server */
652 if (prefs_account->protocol != A_LOCAL)
653 prefs_account->account_name = g_strdup_printf("%s@%s",
654 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)),
655 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
657 prefs_account->account_name = g_strdup_printf("%s",
658 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
660 recv_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
661 smtp_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)));
663 if (prefs_account->protocol != A_LOCAL && strstr(recv_server, ":")) {
664 recv_port = atoi(strstr(recv_server, ":")+1);
665 *(strstr(recv_server, ":")) = '\0';
666 if (prefs_account->protocol == A_IMAP4) {
667 prefs_account->set_imapport = TRUE;
668 prefs_account->imapport = recv_port;
669 } else if (prefs_account->protocol == A_POP3) {
670 prefs_account->set_popport = TRUE;
671 prefs_account->popport = recv_port;
674 if (strstr(smtp_server, ":")) {
675 smtp_port = atoi(strstr(smtp_server, ":")+1);
676 *(strstr(smtp_server, ":")) = '\0';
677 prefs_account->set_smtpport = TRUE;
678 prefs_account->smtpport = smtp_port;
681 prefs_account->name = g_strdup(
682 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)));
683 prefs_account->address = g_strdup(
684 gtk_entry_get_text(GTK_ENTRY(wizard->email)));
685 prefs_account->organization = g_strdup(
686 gtk_entry_get_text(GTK_ENTRY(wizard->organization)));
687 prefs_account->smtp_server = g_strdup(smtp_server);
689 tmp = g_path_get_basename(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)));
690 prefs_account->inbox = g_strdup_printf("#mh/%s/inbox",
691 (tmp && !strcmp("Mail", tmp))?_("Mailbox"):tmp);
693 prefs_account->local_inbox = g_strdup(prefs_account->inbox);
695 if (prefs_account->protocol != A_LOCAL)
696 prefs_account->recv_server = g_strdup(recv_server);
698 prefs_account->local_mbox = g_strdup(recv_server);
703 prefs_account->userid = g_strdup(
704 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)));
705 prefs_account->passwd = g_strdup(
706 gtk_entry_get_text(GTK_ENTRY(wizard->recv_password)));
708 prefs_account->smtp_userid = g_strdup(
709 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)));
710 prefs_account->smtp_passwd = g_strdup(
711 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_password)));
712 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
713 prefs_account->use_smtp_auth = TRUE;
717 smtp_ssl_type = SSL_NONE;
718 recv_ssl_type = SSL_NONE;
720 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl))) {
721 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls)))
722 smtp_ssl_type = SSL_STARTTLS;
724 smtp_ssl_type = SSL_TUNNEL;
726 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl))) {
727 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls)))
728 recv_ssl_type = SSL_STARTTLS;
730 recv_ssl_type = SSL_TUNNEL;
733 prefs_account->ssl_smtp = smtp_ssl_type;
735 if (prefs_account->protocol == A_IMAP4)
736 prefs_account->ssl_imap = recv_ssl_type;
738 prefs_account->ssl_pop = recv_ssl_type;
741 if (prefs_account->protocol == A_IMAP4) {
742 gchar *directory = gtk_editable_get_chars(
743 GTK_EDITABLE(wizard->recv_imap_subdir), 0, -1);
744 if (directory && strlen(directory)) {
745 prefs_account->imap_dir = g_strdup(directory);
747 prefs_account->imap_subsonly =
748 gtk_toggle_button_get_active(
749 GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn));
753 account_list = g_list_append(account_list, prefs_account);
754 prefs_account_write_config_all(account_list);
755 prefs_account_free(prefs_account);
756 account_read_config_all();
758 initialize_fonts(wizard);
759 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4)
760 write_welcome_email(wizard);
763 plugin_load_standard_plugins();
768 static GtkWidget* create_page (WizardWindow *wizard, const char * title)
776 vbox = gtk_vbox_new (FALSE, 6);
777 gtk_container_set_border_width (GTK_CONTAINER(vbox), 10);
779 /* create the titlebar */
780 hbox = gtk_hbox_new (FALSE, 12);
781 image = stock_pixmap_widget(wizard->window,
782 STOCK_PIXMAP_CLAWS_MAIL_ICON);
783 gtk_box_pack_start (GTK_BOX(hbox), image, FALSE, FALSE, 0);
784 title_string = g_strconcat ("<span size=\"xx-large\" weight=\"ultrabold\">", title ? title : "", "</span>", NULL);
785 w = gtk_label_new (title_string);
786 gtk_label_set_use_markup (GTK_LABEL(w), TRUE);
787 g_free (title_string);
788 gtk_box_pack_start (GTK_BOX(hbox), w, FALSE, FALSE, 0);
790 /* pack the titlebar */
791 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
793 /* pack the separator */
794 gtk_box_pack_start (GTK_BOX(vbox), gtk_hseparator_new(), FALSE, FALSE, 0);
797 w = gtk_alignment_new (0, 0, 0, 0);
798 gtk_widget_set_size_request (w, 0, 6);
799 gtk_box_pack_start (GTK_BOX(vbox), w, FALSE, FALSE, 0);
804 #define GTK_TABLE_ADD_ROW_AT(table,text,entry,i) { \
805 GtkWidget *label = gtk_label_new(text); \
806 gtk_table_attach(GTK_TABLE(table), label, \
807 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0); \
808 gtk_label_set_use_markup(GTK_LABEL(label), TRUE); \
809 if (GTK_IS_MISC(label)) \
810 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); \
811 gtk_table_attach(GTK_TABLE(table), entry, \
812 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0); \
815 static gchar *get_default_server(WizardWindow * wizard, const gchar *type)
817 if (!strcmp(type, "smtp")) {
818 if (!tmpl.smtpserver || !strlen(tmpl.smtpserver))
819 return g_strconcat(type, ".", tmpl.domain, NULL);
821 return g_strdup(tmpl.smtpserver);
823 if (!tmpl.recvserver || !strlen(tmpl.recvserver))
824 return g_strconcat(type, ".", tmpl.domain, NULL);
826 return g_strdup(tmpl.recvserver);
830 static gchar *get_default_account(WizardWindow * wizard)
832 gchar *result = NULL;
834 if (!tmpl.recvuser || !strlen(tmpl.recvuser)) {
835 result = gtk_editable_get_chars(
836 GTK_EDITABLE(wizard->email), 0, -1);
838 if (strstr(result, "@")) {
839 *(strstr(result,"@")) = '\0';
842 result = g_strdup(tmpl.recvuser);
847 static gchar *get_default_smtp_account(WizardWindow * wizard)
849 gchar *result = NULL;
851 if (!tmpl.smtpuser || !strlen(tmpl.smtpuser)) {
854 result = g_strdup(tmpl.smtpuser);
859 static void wizard_email_changed(GtkWidget *widget, gpointer data)
861 WizardWindow *wizard = (WizardWindow *)data;
862 RecvProtocol protocol;
864 protocol = GPOINTER_TO_INT
865 (g_object_get_data(G_OBJECT(wizard->recv_type), MENU_VAL_ID));
867 text = get_default_server(wizard, "smtp");
868 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
871 text = get_default_account(wizard);
872 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
875 if (protocol == A_POP3) {
876 text = get_default_server(wizard, "pop");
877 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
879 } else if (protocol == A_IMAP4) {
880 text = get_default_server(wizard, "imap");
881 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
883 } else if (protocol == A_LOCAL) {
884 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
889 static GtkWidget* user_page (WizardWindow * wizard)
891 GtkWidget *table = gtk_table_new(3,2, FALSE);
894 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
895 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
897 wizard->full_name = gtk_entry_new();
898 gtk_entry_set_text(GTK_ENTRY(wizard->full_name), tmpl.name?tmpl.name:"");
899 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">Your name:</span>"),
900 wizard->full_name, i); i++;
902 wizard->email = gtk_entry_new();
903 gtk_entry_set_text(GTK_ENTRY(wizard->email), tmpl.email?tmpl.email:"");
904 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">Your email address:</span>"),
905 wizard->email, i); i++;
907 wizard->organization = gtk_entry_new();
908 GTK_TABLE_ADD_ROW_AT(table, _("Your organization:"),
909 wizard->organization, i); i++;
910 gtk_entry_set_text(GTK_ENTRY(wizard->organization), tmpl.organization?tmpl.organization:"");
912 g_signal_connect(G_OBJECT(wizard->email), "changed",
913 G_CALLBACK(wizard_email_changed),
918 static GtkWidget* mailbox_page (WizardWindow * wizard)
920 GtkWidget *table = gtk_table_new(1,2, FALSE);
922 GtkTooltips *tips = gtk_tooltips_new();
924 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
925 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
927 wizard->mailbox_name = gtk_entry_new();
928 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), tmpl.mailbox?tmpl.mailbox:"");
930 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->mailbox_name,
931 _("You can also specify an absolute path, for example: "
932 "\"/home/john/Documents/Mail\""),
935 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">Mailbox name:</span>"),
936 wizard->mailbox_name, i); i++;
941 static void smtp_auth_changed (GtkWidget *btn, gpointer data)
943 WizardWindow *wizard = (WizardWindow *)data;
944 gboolean do_auth = gtk_toggle_button_get_active(
945 GTK_TOGGLE_BUTTON(wizard->smtp_auth));
946 gtk_widget_set_sensitive(wizard->smtp_username, do_auth);
947 gtk_widget_set_sensitive(wizard->smtp_username_label, do_auth);
948 gtk_widget_set_sensitive(wizard->smtp_password, do_auth);
949 gtk_widget_set_sensitive(wizard->smtp_password_label, do_auth);
952 static GtkWidget* smtp_page (WizardWindow * wizard)
955 GtkWidget *table = gtk_table_new(6, 2, FALSE);
957 GtkWidget *table = gtk_table_new(4, 2, FALSE);
959 GtkTooltips *tips = gtk_tooltips_new();
963 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
964 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
966 wizard->smtp_server = gtk_entry_new();
967 text = get_default_server(wizard, "smtp");
968 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
971 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->smtp_server,
972 _("You can specify the port number by appending it at the end: "
973 "\"mail.example.com:25\""),
976 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">SMTP server address:</span>"),
977 wizard->smtp_server, i); i++;
978 wizard->smtp_auth = gtk_check_button_new_with_label(
979 _("Use authentication"));
980 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth),
982 g_signal_connect(G_OBJECT(wizard->smtp_auth), "toggled",
983 G_CALLBACK(smtp_auth_changed),
985 gtk_table_attach(GTK_TABLE(table), wizard->smtp_auth,
986 0,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0); i++;
988 text = get_default_smtp_account(wizard);
990 wizard->smtp_username = gtk_entry_new();
991 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_username), text);
993 wizard->smtp_username_label = gtk_label_new(_("SMTP username:\n"
994 "<span size=\"small\">(empty to use the same as reception)</span>"));
995 gtk_label_set_use_markup(GTK_LABEL(wizard->smtp_username_label), TRUE);
996 gtk_table_attach(GTK_TABLE(table), wizard->smtp_username_label,
997 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
998 if (GTK_IS_MISC(wizard->smtp_username_label))
999 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_username_label), 1, 0.5);
1000 gtk_table_attach(GTK_TABLE(table), wizard->smtp_username,
1001 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1003 wizard->smtp_password = gtk_entry_new();
1004 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_password), tmpl.smtppass?tmpl.smtppass:"");
1005 gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_password), FALSE);
1006 wizard->smtp_password_label = gtk_label_new(_("SMTP password:\n"
1007 "<span size=\"small\">(empty to use the same as reception)</span>"));
1008 gtk_label_set_use_markup(GTK_LABEL(wizard->smtp_password_label), TRUE);
1009 gtk_table_attach(GTK_TABLE(table), wizard->smtp_password_label,
1010 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1011 if (GTK_IS_MISC(wizard->smtp_password_label))
1012 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_password_label), 1, 0.5);
1013 gtk_table_attach(GTK_TABLE(table), wizard->smtp_password,
1014 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1017 wizard->smtp_use_ssl = gtk_check_button_new_with_label(
1018 _("Use SSL to connect to SMTP server"));
1019 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl),
1021 gtk_table_attach(GTK_TABLE(table), wizard->smtp_use_ssl,
1022 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1024 wizard->smtp_use_tls = gtk_check_button_new_with_label(
1025 _("Use SSL via STARTTLS"));
1026 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls),
1028 gtk_table_attach(GTK_TABLE(table), wizard->smtp_use_tls,
1029 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 16, 0);
1031 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, wizard->smtp_use_tls);
1033 smtp_auth_changed(NULL, wizard);
1037 static void wizard_protocol_change(WizardWindow *wizard, RecvProtocol protocol)
1041 if (protocol == A_POP3) {
1042 text = get_default_server(wizard, "pop");
1043 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1044 gtk_widget_hide(wizard->recv_imap_label);
1045 gtk_widget_hide(wizard->recv_imap_subdir);
1046 gtk_widget_hide(wizard->subsonly_checkbtn);
1047 gtk_widget_show(wizard->recv_username);
1048 gtk_widget_show(wizard->recv_password);
1049 gtk_widget_show(wizard->recv_username_label);
1050 gtk_widget_show(wizard->recv_password_label);
1051 gtk_widget_hide(wizard->no_imap_warning);
1053 gtk_widget_show(wizard->recv_use_ssl);
1054 gtk_widget_show(wizard->recv_use_tls);
1056 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1057 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1058 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1060 } else if (protocol == A_IMAP4) {
1061 #ifdef HAVE_LIBETPAN
1062 text = get_default_server(wizard, "imap");
1063 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1064 gtk_widget_show(wizard->recv_imap_label);
1065 gtk_widget_show(wizard->recv_imap_subdir);
1066 gtk_widget_show(wizard->subsonly_checkbtn);
1067 gtk_widget_show(wizard->recv_username);
1068 gtk_widget_show(wizard->recv_password);
1069 gtk_widget_show(wizard->recv_username_label);
1070 gtk_widget_show(wizard->recv_password_label);
1071 gtk_widget_hide(wizard->no_imap_warning);
1073 gtk_widget_show(wizard->recv_use_ssl);
1074 gtk_widget_show(wizard->recv_use_tls);
1076 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1077 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1078 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1081 gtk_widget_hide(wizard->recv_imap_label);
1082 gtk_widget_hide(wizard->recv_imap_subdir);
1083 gtk_widget_hide(wizard->subsonly_checkbtn);
1084 gtk_widget_hide(wizard->recv_username);
1085 gtk_widget_hide(wizard->recv_password);
1086 gtk_widget_hide(wizard->recv_username_label);
1087 gtk_widget_hide(wizard->recv_password_label);
1088 gtk_widget_show(wizard->no_imap_warning);
1090 gtk_widget_hide(wizard->recv_use_ssl);
1091 gtk_widget_hide(wizard->recv_use_tls);
1093 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, FALSE);
1095 } else if (protocol == A_LOCAL) {
1096 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
1097 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Local mailbox:</span>"));
1098 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1099 gtk_widget_hide(wizard->no_imap_warning);
1100 gtk_widget_hide(wizard->recv_imap_label);
1101 gtk_widget_hide(wizard->recv_imap_subdir);
1102 gtk_widget_hide(wizard->subsonly_checkbtn);
1103 gtk_widget_hide(wizard->recv_username);
1104 gtk_widget_hide(wizard->recv_password);
1105 gtk_widget_hide(wizard->recv_username_label);
1106 gtk_widget_hide(wizard->recv_password_label);
1108 gtk_widget_hide(wizard->recv_use_ssl);
1109 gtk_widget_hide(wizard->recv_use_tls);
1111 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1115 static void wizard_protocol_changed(GtkMenuItem *menuitem, gpointer data)
1117 WizardWindow *wizard = (WizardWindow *)data;
1118 RecvProtocol protocol;
1119 protocol = GPOINTER_TO_INT
1120 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
1122 wizard_protocol_change(wizard, protocol);
1125 static GtkWidget* recv_page (WizardWindow * wizard)
1128 GtkWidget *table = gtk_table_new(8,2, FALSE);
1130 GtkWidget *table = gtk_table_new(6,2, FALSE);
1132 GtkWidget *menu = gtk_menu_new();
1133 GtkWidget *menuitem;
1134 GtkTooltips *tips = gtk_tooltips_new();
1139 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1140 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1142 wizard->recv_type = gtk_option_menu_new();
1144 MENUITEM_ADD (menu, menuitem, _("POP3"), A_POP3);
1145 g_signal_connect(G_OBJECT(menuitem), "activate",
1146 G_CALLBACK(wizard_protocol_changed),
1149 MENUITEM_ADD (menu, menuitem, _("IMAP"), A_IMAP4);
1150 g_signal_connect(G_OBJECT(menuitem), "activate",
1151 G_CALLBACK(wizard_protocol_changed),
1154 MENUITEM_ADD (menu, menuitem, _("Local mbox file"), A_LOCAL);
1155 g_signal_connect(G_OBJECT(menuitem), "activate",
1156 G_CALLBACK(wizard_protocol_changed),
1159 gtk_option_menu_set_menu (GTK_OPTION_MENU (wizard->recv_type), menu);
1160 switch(tmpl.recvtype) {
1173 gtk_option_menu_set_history(GTK_OPTION_MENU (wizard->recv_type), index);
1174 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">Server type:</span>"),
1175 wizard->recv_type, i); i++;
1177 wizard->recv_server = gtk_entry_new();
1178 text = get_default_server(wizard, "pop");
1179 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1182 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->recv_server,
1183 _("You can specify the port number by appending it at the end: "
1184 "\"mail.example.com:110\""),
1187 wizard->recv_label = gtk_label_new(_("<span weight=\"bold\">Server address:</span>"));
1188 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1189 gtk_table_attach(GTK_TABLE(table), wizard->recv_label,
1190 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1191 if (GTK_IS_MISC(wizard->recv_label))
1192 gtk_misc_set_alignment(GTK_MISC(wizard->recv_label), 1, 0.5);
1193 gtk_table_attach(GTK_TABLE(table), wizard->recv_server,
1194 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1197 wizard->recv_username = gtk_entry_new();
1198 wizard->recv_username_label = gtk_label_new(_("<span weight=\"bold\">Username:</span>"));
1199 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_username_label), TRUE);
1200 gtk_table_attach(GTK_TABLE(table), wizard->recv_username_label,
1201 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1202 if (GTK_IS_MISC(wizard->recv_username_label))
1203 gtk_misc_set_alignment(GTK_MISC(wizard->recv_username_label), 1, 0.5);
1204 gtk_table_attach(GTK_TABLE(table), wizard->recv_username,
1205 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1208 text = get_default_account(wizard);
1209 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
1212 wizard->recv_password = gtk_entry_new();
1213 gtk_entry_set_text(GTK_ENTRY(wizard->recv_password), tmpl.recvpass?tmpl.recvpass:"");
1214 wizard->recv_password_label = gtk_label_new(_("Password:"));
1215 gtk_table_attach(GTK_TABLE(table), wizard->recv_password_label,
1216 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1217 if (GTK_IS_MISC(wizard->recv_password_label))
1218 gtk_misc_set_alignment(GTK_MISC(wizard->recv_password_label), 1, 0.5);
1219 gtk_table_attach(GTK_TABLE(table), wizard->recv_password,
1220 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1221 gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_password), FALSE);
1224 wizard->recv_imap_subdir = gtk_entry_new();
1225 gtk_entry_set_text(GTK_ENTRY(wizard->recv_imap_subdir), tmpl.imapdir?tmpl.imapdir:"");
1226 wizard->recv_imap_label = gtk_label_new(_("IMAP server directory:"));
1228 gtk_table_attach(GTK_TABLE(table), wizard->recv_imap_label,
1229 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1230 if (GTK_IS_MISC(wizard->recv_imap_label))
1231 gtk_misc_set_alignment(GTK_MISC(wizard->recv_imap_label), 1, 0.5);
1232 gtk_table_attach(GTK_TABLE(table), wizard->recv_imap_subdir,
1233 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1237 wizard->subsonly_checkbtn = gtk_check_button_new_with_label(
1238 _("Show only subscribed folders"));
1239 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn),
1241 gtk_table_attach(GTK_TABLE(table), wizard->subsonly_checkbtn,
1242 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1247 wizard->no_imap_warning = gtk_label_new(_(
1248 "<span weight=\"bold\">Warning: this version of Claws Mail\n"
1249 "has been built without IMAP support.</span>"));
1250 gtk_label_set_use_markup(GTK_LABEL(wizard->no_imap_warning), TRUE);
1251 gtk_table_attach(GTK_TABLE(table), wizard->no_imap_warning,
1252 0,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1254 wizard->recv_use_ssl = gtk_check_button_new_with_label(
1255 _("Use SSL to connect to receiving server"));
1256 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl),
1258 gtk_table_attach(GTK_TABLE(table), wizard->recv_use_ssl,
1259 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
1261 wizard->recv_use_tls = gtk_check_button_new_with_label(
1262 _("Use SSL via STARTTLS"));
1263 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls),
1265 gtk_table_attach(GTK_TABLE(table), wizard->recv_use_tls,
1266 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 16, 0);
1268 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, wizard->recv_use_tls);
1274 wizard_response_cb (GtkDialog * dialog, int response, gpointer data)
1276 WizardWindow * wizard = (WizardWindow *)data;
1277 int current_page, num_pages;
1278 GtkWidget *menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(wizard->recv_type));
1279 GtkWidget *menuitem = gtk_menu_get_active(GTK_MENU(menu));
1280 gint protocol = GPOINTER_TO_INT
1281 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
1282 gboolean skip_mailbox_page = FALSE;
1284 if (protocol == A_IMAP4) {
1285 skip_mailbox_page = TRUE;
1288 num_pages = g_slist_length(wizard->pages);
1290 current_page = gtk_notebook_get_current_page (
1291 GTK_NOTEBOOK(wizard->notebook));
1292 if (response == CANCEL)
1294 wizard->result = FALSE;
1295 wizard->finished = TRUE;
1296 gtk_widget_destroy (GTK_WIDGET(dialog));
1298 else if (response == FINISHED)
1300 if (!wizard_write_config(wizard)) {
1301 current_page = gtk_notebook_get_current_page (
1302 GTK_NOTEBOOK(wizard->notebook));
1305 wizard->result = TRUE;
1306 wizard->finished = TRUE;
1307 gtk_widget_destroy (GTK_WIDGET(dialog));
1311 if (response == GO_BACK)
1313 if (current_page > 0) {
1315 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1319 gtk_notebook_set_current_page (
1320 GTK_NOTEBOOK(wizard->notebook),
1324 else if (response == GO_FORWARD)
1326 if (current_page < (num_pages-1)) {
1328 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1332 gtk_notebook_set_current_page (
1333 GTK_NOTEBOOK(wizard->notebook),
1338 gtk_dialog_set_response_sensitive (dialog, GO_BACK,
1340 gtk_dialog_set_response_sensitive (dialog, GO_FORWARD,
1341 current_page < (num_pages - 1));
1342 if (current_page == (num_pages -1)) {
1343 gtk_dialog_set_response_sensitive (dialog, FINISHED, TRUE);
1344 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), FINISHED);
1346 gtk_dialog_set_response_sensitive (dialog, FINISHED, FALSE);
1347 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), GO_FORWARD);
1353 static gint wizard_close_cb(GtkWidget *widget, GdkEventAny *event,
1356 WizardWindow *wizard = (WizardWindow *)data;
1357 wizard->result = FALSE;
1358 wizard->finished = TRUE;
1363 #define PACK_WARNING(text) { \
1364 label = gtk_label_new(text); \
1365 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); \
1366 gtk_box_pack_end(GTK_BOX(widget), label, FALSE, FALSE, 0); \
1369 gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) {
1370 WizardWindow *wizard = g_new0(WizardWindow, 1);
1378 wizard->mainwin = mainwin;
1379 wizard->create_mailbox = create_mailbox;
1381 gtk_widget_hide(mainwin->window);
1383 wizard_read_defaults();
1385 wizard->window = gtk_dialog_new_with_buttons (_("Claws Mail Setup Wizard"),
1387 GTK_STOCK_GO_BACK, GO_BACK,
1388 GTK_STOCK_GO_FORWARD, GO_FORWARD,
1389 GTK_STOCK_SAVE, FINISHED,
1390 GTK_STOCK_CANCEL, CANCEL,
1393 g_signal_connect(wizard->window, "response",
1394 G_CALLBACK(wizard_response_cb), wizard);
1395 gtk_widget_realize(wizard->window);
1396 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window),
1398 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1400 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1402 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1404 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1407 wizard->notebook = gtk_notebook_new();
1408 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(wizard->notebook), FALSE);
1409 gtk_notebook_set_show_border(GTK_NOTEBOOK(wizard->notebook), FALSE);
1410 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(wizard->window)->vbox),
1411 wizard->notebook, TRUE, TRUE, 0);
1413 wizard->pages = NULL;
1415 /*welcome page: 0 */
1417 page = create_page(wizard, _("Welcome to Claws Mail"));
1419 wizard->pages = g_slist_append(wizard->pages, page);
1420 widget = stock_pixmap_widget(wizard->window,
1421 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1423 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1425 text = g_strdup(_("Welcome to the Claws Mail setup wizard.\n\n"
1426 "We will begin by defining some basic "
1427 "information about you and your most common "
1428 "mail options so that you can start to use "
1429 "Claws Mail in less than five minutes."));
1430 widget = gtk_label_new(text);
1431 gtk_label_set_line_wrap(GTK_LABEL(widget), TRUE);
1432 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1438 widget = create_page (wizard, _("About You"));
1439 gtk_box_pack_start (GTK_BOX(widget), user_page(wizard), FALSE, FALSE, 0);
1440 PACK_WARNING(_("Bold fields must be completed"));
1442 wizard->pages = g_slist_append(wizard->pages, widget);
1444 /* recv+auth page: 2 */
1447 widget = create_page (wizard, _("Receiving mail"));
1448 gtk_box_pack_start (GTK_BOX(widget), recv_page(wizard), FALSE, FALSE, 0);
1449 PACK_WARNING(_("Bold fields must be completed"));
1451 wizard->pages = g_slist_append(wizard->pages, widget);
1456 widget = create_page (wizard, _("Sending mail"));
1457 gtk_box_pack_start (GTK_BOX(widget), smtp_page(wizard), FALSE, FALSE, 0);
1458 PACK_WARNING(_("Bold fields must be completed"));
1460 wizard->pages = g_slist_append(wizard->pages, widget);
1462 /* mailbox page: 4 */
1463 if (create_mailbox) {
1466 widget = create_page (wizard, _("Saving mail on disk"));
1467 gtk_box_pack_start (GTK_BOX(widget), mailbox_page(wizard), FALSE, FALSE, 0);
1468 PACK_WARNING(_("Bold fields must be completed"));
1470 wizard->pages = g_slist_append(wizard->pages, widget);
1476 page = create_page(wizard, _("Configuration finished"));
1478 wizard->pages = g_slist_append(wizard->pages, page);
1479 widget = stock_pixmap_widget(wizard->window,
1480 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1482 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1484 text = g_strdup(_("Claws Mail is now ready.\n\n"
1485 "Click Save to start."));
1486 widget = gtk_label_new(text);
1487 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1491 for (cur = wizard->pages; cur && cur->data; cur = cur->next) {
1492 gtk_notebook_append_page (GTK_NOTEBOOK(wizard->notebook),
1493 GTK_WIDGET(cur->data), NULL);
1496 g_signal_connect(G_OBJECT(wizard->window), "delete_event",
1497 G_CALLBACK(wizard_close_cb), wizard);
1498 gtk_widget_show_all (wizard->window);
1500 gtk_widget_hide(wizard->recv_imap_label);
1501 gtk_widget_hide(wizard->recv_imap_subdir);
1502 gtk_widget_hide(wizard->subsonly_checkbtn);
1504 wizard_protocol_change(wizard, tmpl.recvtype);
1506 while (!wizard->finished)
1507 gtk_main_iteration();
1509 result = wizard->result;
1513 gtk_widget_show(mainwin->window);