2 * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2009 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>
45 #include "prefs_account.h"
46 #include "mainwindow.h"
47 #include "stock_pixmap.h"
50 #include "alertpanel.h"
55 #include "prefs_common.h"
59 #include <libgnomevfs/gnome-vfs-volume.h>
60 #include <libgnomevfs/gnome-vfs-volume-monitor.h>
61 #include <libgnomevfs/gnome-vfs-utils.h>
72 int WELCOME_PAGE = -1;
76 int MAILBOX_PAGE = -1;
89 GtkWidget *organization;
91 GtkWidget *mailbox_name;
92 GtkWidget *mailbox_label;
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;
117 GtkWidget *smtp_ssl_cert_file;
118 GtkWidget *recv_ssl_cert_file;
119 GtkWidget *smtp_ssl_cert_pass;
120 GtkWidget *recv_ssl_cert_pass;
121 GtkWidget *smtp_cert_table;
122 GtkWidget *recv_cert_table;
126 GtkWidget *data_root_nokia_radiobtn;
127 GtkWidget *data_root_mmc1_radiobtn;
128 GtkWidget *data_root_mmc2_radiobtn;
129 GnomeVFSVolumeMonitor *volmon;
130 gulong volmon_mount_sigid;
131 gulong volmon_unmount_sigid;
132 GnomeVFSVolume *vol_mmc1;
133 GnomeVFSVolume *vol_mmc2;
135 gboolean create_mailbox;
141 typedef struct _AccountTemplate {
150 RecvProtocol recvtype;
162 gchar *smtpssl_cert_pass;
163 gchar *recvssl_cert_pass;
166 static AccountTemplate tmpl;
168 static PrefParam template_params[] = {
169 {"name", "$USERNAME",
170 &tmpl.name, P_STRING, NULL, NULL, NULL},
171 {"domain", "$DEFAULTDOMAIN",
172 &tmpl.domain, P_STRING, NULL, NULL, NULL},
173 {"email", "$NAME_MAIL@$DOMAIN",
174 &tmpl.email, P_STRING, NULL, NULL, NULL},
176 &tmpl.organization, P_STRING, NULL, NULL, NULL},
177 {"smtpserver", "smtp.$DOMAIN",
178 &tmpl.smtpserver, P_STRING, NULL, NULL, NULL},
179 {"smtpauth", "FALSE",
180 &tmpl.smtpauth, P_BOOL, NULL, NULL, NULL},
182 &tmpl.smtpuser, P_STRING, NULL, NULL, NULL},
184 &tmpl.smtppass, P_STRING, NULL, NULL, NULL},
186 &tmpl.recvtype, P_INT, NULL, NULL, NULL},
187 {"recvserver", "pop.$DOMAIN",
188 &tmpl.recvserver, P_STRING, NULL, NULL, NULL},
189 {"recvuser", "$LOGIN",
190 &tmpl.recvuser, P_STRING, NULL, NULL, NULL},
192 &tmpl.recvpass, P_STRING, NULL, NULL, NULL},
194 &tmpl.imapdir, P_STRING, NULL, NULL, NULL},
196 &tmpl.subsonly, P_BOOL, NULL, NULL, NULL},
197 {"mboxfile", "/var/mail/$LOGIN",
198 &tmpl.mboxfile, P_STRING, NULL, NULL, NULL},
200 &tmpl.mailbox, P_STRING, NULL, NULL, NULL},
202 &tmpl.smtpssl, P_INT, NULL, NULL, NULL},
204 &tmpl.recvssl, P_INT, NULL, NULL, NULL},
206 &tmpl.smtpssl_cert, P_STRING, NULL, NULL, NULL},
208 &tmpl.recvssl_cert, P_STRING, NULL, NULL, NULL},
209 {"smtpssl_cert_pass", "",
210 &tmpl.smtpssl_cert, P_STRING, NULL, NULL, NULL},
211 {"recvssl_cert_pass", "",
212 &tmpl.recvssl_cert, P_STRING, NULL, NULL, NULL},
213 {NULL, NULL, NULL, P_INT, NULL, NULL, NULL}
217 static gchar *accountrc_tmpl =
218 "[AccountTemplate]\n"
219 "#you can use $DEFAULTDOMAIN here\n"
220 "#domain must be defined before the variables that use it\n"
221 "#by default, domain is extracted from the hostname\n"
224 "#you can use $USERNAME for name (this is the default)\n"
227 "#you can use $LOGIN, $NAME_MAIL and $DOMAIN here \n"
228 "#$NAME_MAIL is the name without uppercase and with dots instead\n"
230 "#the default is $NAME_MAIL@$DOMAIN\n"
233 "#you can use $DOMAIN here\n"
234 "#the default organization is empty\n"
237 "#you can use $DOMAIN here \n"
238 "#the default is smtp.$DOMAIN\n"
241 "#Whether to use smtp authentication\n"
242 "#the default is 0 (no)\n"
246 "#you can use $LOGIN, $NAME_MAIL, $DOMAIN or $EMAIL here\n"
247 "#the default is empty (same as reception username)\n"
251 "#the default is empty (same as reception password)\n"
254 "#recvtype can be:\n"
257 "#5 for a local mbox file\n"
260 "#you can use $DOMAIN here \n"
261 "#the default is {pop,imap}.$DOMAIN\n"
264 "#you can use $LOGIN, $NAME_MAIL, $DOMAIN or $EMAIL here\n"
265 "#default is $LOGIN\n"
268 "#default is empty\n"
271 "#imap dir if imap (relative to the home on the server)\n"
272 "#default is empty\n"
275 "#show subscribed folders only, if imap\n"
279 "#mbox file if local\n"
280 "#you can use $LOGIN here\n"
281 "#default is /var/mail/$LOGIN\n"
284 "#mailbox name if pop3 or local\n"
285 "#relative path from the user's home\n"
286 "#default is \"Mail\"\n"
289 "#whether to use ssl on smtp connections\n"
290 "#default is 0, 1 is ssl, 2 is starttls\n"
293 "#whether to use ssl on pop or imap connections\n"
294 "#default is 0, 1 is ssl, 2 is starttls\n"
297 "#SSL client certificate path for SMTP\n"
298 "#default is empty (no certificate)\n"
301 "#SSL client certificate path for POP/IMAP\n"
302 "#default is empty (no certificate)\n"
305 "#SSL client certificate password for SMTP\n"
306 "#default is empty (no password)\n"
307 "#smtpssl_cert_pass=\n"
309 "#SSL client certificate password for POP/IMAP\n"
310 "#default is empty (no password)\n"
311 "#recvssl_cert_pass=\n"
314 static gchar *wizard_get_default_domain_name(void)
316 static gchar *domain_name = NULL;
318 if (domain_name == NULL) {
319 domain_name = g_strdup(get_domain_name());
320 if (strchr(domain_name, '.') != NULL
321 && strchr(domain_name, '.') != strrchr(domain_name, '.')
322 && strlen(strchr(domain_name, '.')) > 6) {
323 gchar *tmp = g_strdup(strchr(domain_name, '.')+1);
331 static gchar *get_name_for_mail(void)
334 if (tmpl.name == NULL)
336 name = g_utf8_strdown(tmpl.name, -1);
337 while(strstr(name, " "))
338 *strstr(name, " ")='.';
343 #define PARSE_DEFAULT(str) { \
344 gchar *tmp = NULL, *new = NULL; \
346 tmp = g_strdup(str); \
347 if (strstr(str, "$USERNAME")) { \
348 tmp = g_strdup(str); \
349 *strstr(tmp, "$USERNAME") = '\0'; \
350 new = g_strconcat(tmp, g_get_real_name(), \
351 strstr(str, "$USERNAME")+strlen("$USERNAME"), \
358 if (strstr(str, "$LOGIN")) { \
359 tmp = g_strdup(str); \
360 *strstr(tmp, "$LOGIN") = '\0'; \
361 new = g_strconcat(tmp, g_get_user_name(), \
362 strstr(str, "$LOGIN")+strlen("$LOGIN"), \
369 if (strstr(str, "$EMAIL")) { \
370 tmp = g_strdup(str); \
371 *strstr(tmp, "$EMAIL") = '\0'; \
372 new = g_strconcat(tmp, tmpl.email, \
373 strstr(str, "$EMAIL")+strlen("$EMAIL"), \
380 if (strstr(str, "$NAME_MAIL")) { \
381 tmp = g_strdup(str); \
382 *strstr(tmp, "$NAME_MAIL") = '\0'; \
383 new = g_strconcat(tmp, get_name_for_mail(), \
384 strstr(str, "$NAME_MAIL")+strlen("$NAME_MAIL"), \
391 if (strstr(str, "$DEFAULTDOMAIN")) { \
392 tmp = g_strdup(str); \
393 *strstr(tmp, "$DEFAULTDOMAIN") = '\0'; \
394 new = g_strconcat(tmp, wizard_get_default_domain_name(), \
395 strstr(str, "$DEFAULTDOMAIN")+strlen("$DEFAULTDOMAIN"), \
402 if (strstr(str, "$DOMAIN")) { \
403 tmp = g_strdup(str); \
404 *strstr(tmp, "$DOMAIN") = '\0'; \
405 new = g_strconcat(tmp, tmpl.domain, \
406 strstr(str, "$DOMAIN")+strlen("$DOMAIN"), \
415 static void wizard_read_defaults(void)
419 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, "accountrc.tmpl", NULL);
420 if (!is_file_exist(rcpath)) {
421 str_write_to_file(accountrc_tmpl, rcpath);
424 prefs_read_config(template_params, "AccountTemplate", rcpath, NULL);
426 PARSE_DEFAULT(tmpl.domain);
427 PARSE_DEFAULT(tmpl.name);
428 PARSE_DEFAULT(tmpl.email);
429 PARSE_DEFAULT(tmpl.organization);
430 PARSE_DEFAULT(tmpl.smtpserver);
431 PARSE_DEFAULT(tmpl.smtpuser);
432 PARSE_DEFAULT(tmpl.smtppass);
433 PARSE_DEFAULT(tmpl.recvserver);
434 PARSE_DEFAULT(tmpl.recvuser);
435 PARSE_DEFAULT(tmpl.recvpass);
436 PARSE_DEFAULT(tmpl.imapdir);
437 PARSE_DEFAULT(tmpl.mboxfile);
438 PARSE_DEFAULT(tmpl.mailbox);
441 "%s, %s, %s, %s, %s, %d, %s, %s, %s, %s, %s, %s, %d, %d\n",
442 tmpl.name,tmpl.domain,tmpl.email,tmpl.organization,tmpl.smtpserver,
443 tmpl.recvtype,tmpl.recvserver,tmpl.recvuser,tmpl.recvpass,
444 tmpl.imapdir,tmpl.mboxfile,tmpl.mailbox,tmpl.smtpssl,tmpl.recvssl);
449 static void initialize_fonts(WizardWindow *wizard)
451 GtkWidget *widget = wizard->email;
452 gint size = pango_font_description_get_size(
453 widget->style->font_desc)
457 PangoFontDescription *bold_desc;
458 gchar *curfont = pango_font_description_to_string(widget->style->font_desc);
459 g_free(prefs_common.smallfont);
460 g_free(prefs_common.normalfont);
461 g_free(prefs_common.boldfont);
462 prefs_common.smallfont = g_strdup(curfont);
463 prefs_common.normalfont = g_strdup(curfont);
464 bold_desc = pango_font_description_from_string(curfont);
465 pango_font_description_set_weight(bold_desc, PANGO_WEIGHT_BOLD);
466 prefs_common.boldfont = pango_font_description_to_string(bold_desc);
467 pango_font_description_free(bold_desc);
470 tmp = g_strdup(prefs_common.textfont);
471 if (strrchr(tmp, ' ')) {
472 *(strrchr(tmp, ' ')) = '\0';
473 new = g_strdup_printf("%s %d", tmp, size);
474 g_free(prefs_common.textfont);
475 prefs_common.textfont = new;
479 tmp = g_strdup(prefs_common.smallfont);
480 if (strrchr(tmp, ' ')) {
481 *(strrchr(tmp, ' ')) = '\0';
482 new = g_strdup_printf("%s %d", tmp, size);
483 g_free(prefs_common.smallfont);
484 prefs_common.smallfont = new;
488 tmp = g_strdup(prefs_common.normalfont);
489 if (strrchr(tmp, ' ')) {
490 *(strrchr(tmp, ' ')) = '\0';
491 new = g_strdup_printf("%s %d", tmp, size);
492 g_free(prefs_common.normalfont);
493 prefs_common.normalfont = new;
497 tmp = g_strdup(prefs_common.boldfont);
498 if (strrchr(tmp, ' ')) {
499 *(strrchr(tmp, ' ')) = '\0';
500 new = g_strdup_printf("%s %d", tmp, size);
501 g_free(prefs_common.boldfont);
502 prefs_common.boldfont = new;
507 #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"
508 #define FACE "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAM1BMVEUAAAAcJCI\n\
509 ONl1JUi0+Z4daY2NZciPabV9ykS5kj6Wsl2ybmZOBsMjZxK2wzN3Pzczs7OsCAGN0AAAAAXRSTlM\n\
510 AQObYZgAAAAFiS0dEAIgFHUgAAAIVSURBVEjH1ZbtlqMgDIaFECoGhPu/2s0b0Lais/NzN6d1OJ7\n\
511 3yReQzrL8B5Zy3rvl9At52Pf2tv1vSMjtYj8jaa8XUyI/yn3YD6sigj/2Tf5Bn069MIsTPHvx/t5\n\
512 /3rU/6JCIY3YwGe26r/cwUfE3cFe5T28L0K5rJAUHEeYAQxs8DHojjk3M9wECU4xxjXisI8RA0gy\n\
513 oczJZJOjxiTFZVTchAnIRJrgdmEGDyFfAI3UuG5FmYTkR9RDrIC4H0SqV4pzpEcUp0HNLjwBv+jA\n\
514 dikUE5g9iBvzmu3sH2oDk4lnHd829+2Q9gj6kDqDPg7hsGwBzH02fE3ZCt6ZHmlNKIMjMeRwra5I\n\
515 ecgNoBnLGPmzaHPJIwLY8Sq2M/tLUJfj0QcqmfVXAdLSStIYF8dzWjBBb2VgvDa4mO9oc651OiUo\n\
516 BEKbZokdPATF9E9oKAjQJcJOniaPXrVZRAnVWaqIyqRoNC8ZJvgCcW8XN39RqxVP1rS8Yd4WnCdN\n\
517 aRTo2jJRDbg3vtCpEUGffgDPhqKDaSuVqYtOplFIvIcx3HUI5/MuIWl6vKyBjNlqEru8hbFXqBPA\n\
518 5TpHGIUZOePeaIyzfQ/g9Xg0opU1AvdfXM9floYhv92pPAE96OZtkPV8eivgQi9RTfwPUU36I26n\n\
519 Hy+WuCJzAT7efMSeA1TNf2/VugDz+dN139xfA5ffxGZDD+MvcP/uvyB80wzZ76wbz8gAAAABJRU5\n\
522 static void write_welcome_email(WizardWindow *wizard)
528 const gchar *mailbox = gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name));
529 Folder *folder = folder_find_from_path(mailbox);
530 FolderItem *inbox = folder ? folder->inbox:NULL;
531 gchar *file = get_tmp_file();
532 gchar enc_from_name[BUFFSIZE], enc_to_name[BUFFSIZE], enc_subject[BUFFSIZE];
534 get_rfc822_date(buf_date, sizeof(buf_date));
536 conv_encode_header_full(enc_subject, sizeof(enc_subject),
537 Q_("Welcome Mail Subject|Welcome to Claws Mail"),
538 strlen("Subject: "), FALSE, CS_INTERNAL);
539 conv_encode_header_full(enc_to_name, sizeof(enc_to_name),
540 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)),
541 strlen("To: "), TRUE, CS_INTERNAL);
542 conv_encode_header_full(enc_from_name, sizeof(enc_from_name),
543 _("The Claws Mail Team"),
544 strlen("From: "), TRUE, CS_INTERNAL);
546 head = g_strdup_printf(
553 "Content-Type: text/plain; charset=UTF-8\n",
557 gtk_entry_get_text(GTK_ENTRY(wizard->email)),
558 buf_date, enc_subject, XFACE, FACE);
559 body = g_strdup_printf(
561 "Welcome to Claws Mail\n"
562 "---------------------\n"
564 "Now that you have set up your account you can fetch your\n"
565 "mail by clicking the 'Get Mail' button at the left of the\n"
568 "Claws Mail has lots of extra features accessible via plugins,\n"
569 "like anti-spam filtering and learning (via the Bogofilter or\n"
570 "SpamAssassin plugins), privacy protection (via PGP/Mime), an RSS\n"
571 "aggregator, a calendar, and much more. You can load them from\n"
572 "the menu entry '/Configuration/Plugins'.\n"
574 "You can change your Account Preferences by using the menu\n"
575 "entry '/Configuration/Preferences for current account'\n"
576 "and change the general Preferences by using\n"
577 "'/Configuration/Preferences'.\n"
579 "You can find further information in the Claws Mail manual,\n"
580 "which can be accessed by using the menu entry '/Help/Manual'\n"
581 "or online at the URL given below.\n"
589 "Mailing Lists: <%s>\n"
593 "Claws Mail is free software, released under the terms\n"
594 "of the GNU General Public License, version 3 or later, as\n"
595 "published by the Free Software Foundation, 51 Franklin Street,\n"
596 "Fifth Floor, Boston, MA 02110-1301, USA. The license can be\n"
601 "If you wish to donate to the Claws Mail project you can do\n"
603 HOMEPAGE_URI, MANUAL_URI, FAQ_URI, THEMES_URI, MAILING_LIST_URI,
604 GPL_URI, DONATE_URI);
606 msg = g_strconcat(head, body, NULL);
608 if (inbox && inbox->total_msgs == 0
609 && str_write_to_file(msg, file) >= 0) {
610 MsgFlags flags = { MSG_UNREAD|MSG_NEW, 0};
611 folder_item_add_msg(inbox, file, &flags, FALSE);
620 static gboolean wizard_write_config(WizardWindow *wizard)
622 static gboolean mailbox_ok = FALSE;
623 PrefsAccount *prefs_account = prefs_account_new();
624 GList *account_list = NULL;
625 gchar *smtp_server, *recv_server;
626 gint smtp_port, recv_port;
628 SSLType smtp_ssl_type, recv_ssl_type;
631 prefs_account->protocol = combobox_get_active_data(
632 GTK_COMBO_BOX(wizard->recv_type));
634 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4 &&
635 !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)))) {
636 alertpanel_error(_("Please enter the mailbox name."));
637 g_free(prefs_account);
638 gtk_notebook_set_current_page (
639 GTK_NOTEBOOK(wizard->notebook),
645 if (wizard->create_mailbox) {
646 g_free(prefs_common.data_root);
647 if (gtk_toggle_button_get_active(
648 GTK_TOGGLE_BUTTON(wizard->data_root_nokia_radiobtn)))
649 prefs_common.data_root = NULL;
650 else if (gtk_toggle_button_get_active(
651 GTK_TOGGLE_BUTTON(wizard->data_root_mmc1_radiobtn)))
652 prefs_common.data_root = g_strdup(MMC1_PATH);
653 else if (gtk_toggle_button_get_active(
654 GTK_TOGGLE_BUTTON(wizard->data_root_mmc2_radiobtn)))
655 prefs_common.data_root = g_strdup(MMC2_PATH);
660 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
661 mailbox_ok = setup_write_mailbox_path(wizard->mainwin,
663 GTK_ENTRY(wizard->mailbox_name)));
669 /* alertpanel done by setup_write_mailbox_path */
670 g_free(prefs_account);
671 gtk_notebook_set_current_page (
672 GTK_NOTEBOOK(wizard->notebook),
677 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->full_name)))
678 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->email)))) {
679 alertpanel_error(_("Please enter your name and email address."));
680 g_free(prefs_account);
681 gtk_notebook_set_current_page (
682 GTK_NOTEBOOK(wizard->notebook),
687 if (prefs_account->protocol != A_LOCAL) {
688 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)))
689 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
690 alertpanel_error(_("Please enter your receiving server "
692 g_free(prefs_account);
693 gtk_notebook_set_current_page (
694 GTK_NOTEBOOK(wizard->notebook),
699 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
700 alertpanel_error(_("Please enter your username."));
701 g_free(prefs_account);
702 gtk_notebook_set_current_page (
703 GTK_NOTEBOOK(wizard->notebook),
709 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)))) {
710 alertpanel_error(_("Please enter your SMTP server."));
711 g_free(prefs_account);
712 gtk_notebook_set_current_page (
713 GTK_NOTEBOOK(wizard->notebook),
718 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
719 if (prefs_account->protocol == A_LOCAL
720 && !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)))) {
721 alertpanel_error(_("Please enter your SMTP username."));
722 g_free(prefs_account);
723 gtk_notebook_set_current_page (
724 GTK_NOTEBOOK(wizard->notebook),
727 } /* if it's not local we'll use the reception server */
730 if (prefs_account->protocol != A_LOCAL)
731 prefs_account->account_name = g_strdup_printf("%s@%s",
732 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)),
733 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
735 prefs_account->account_name = g_strdup_printf("%s",
736 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
738 recv_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
739 smtp_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)));
741 if (prefs_account->protocol != A_LOCAL && strstr(recv_server, ":")) {
742 recv_port = atoi(strstr(recv_server, ":")+1);
743 *(strstr(recv_server, ":")) = '\0';
744 if (prefs_account->protocol == A_IMAP4) {
745 prefs_account->set_imapport = TRUE;
746 prefs_account->imapport = recv_port;
747 } else if (prefs_account->protocol == A_POP3) {
748 prefs_account->set_popport = TRUE;
749 prefs_account->popport = recv_port;
752 if (strstr(smtp_server, ":")) {
753 smtp_port = atoi(strstr(smtp_server, ":")+1);
754 *(strstr(smtp_server, ":")) = '\0';
755 prefs_account->set_smtpport = TRUE;
756 prefs_account->smtpport = smtp_port;
759 prefs_account->name = g_strdup(
760 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)));
761 prefs_account->address = g_strdup(
762 gtk_entry_get_text(GTK_ENTRY(wizard->email)));
763 prefs_account->organization = g_strdup(
764 gtk_entry_get_text(GTK_ENTRY(wizard->organization)));
765 prefs_account->smtp_server = g_strdup(smtp_server);
767 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
769 tmp = g_path_get_basename(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)));
770 prefs_account->inbox = g_strdup_printf("#mh/%s/inbox",
771 (!strcmp("Mail", gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name))))
774 prefs_account->local_inbox = g_strdup(prefs_account->inbox);
775 } else if (prefs_account->protocol != A_IMAP4) {
776 if (folder_get_default_inbox())
777 prefs_account->local_inbox =
778 folder_item_get_identifier(folder_get_default_inbox());
781 if (prefs_account->protocol != A_LOCAL)
782 prefs_account->recv_server = g_strdup(recv_server);
784 prefs_account->local_mbox = g_strdup(recv_server);
789 prefs_account->userid = g_strdup(
790 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)));
791 prefs_account->passwd = g_strdup(
792 gtk_entry_get_text(GTK_ENTRY(wizard->recv_password)));
794 prefs_account->smtp_userid = g_strdup(
795 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)));
796 prefs_account->smtp_passwd = g_strdup(
797 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_password)));
798 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
799 prefs_account->use_smtp_auth = TRUE;
803 smtp_ssl_type = SSL_NONE;
804 recv_ssl_type = SSL_NONE;
806 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl))) {
807 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls)))
808 smtp_ssl_type = SSL_STARTTLS;
810 smtp_ssl_type = SSL_TUNNEL;
812 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl))) {
813 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls)))
814 recv_ssl_type = SSL_STARTTLS;
816 recv_ssl_type = SSL_TUNNEL;
819 prefs_account->ssl_smtp = smtp_ssl_type;
821 if (prefs_account->protocol == A_IMAP4)
822 prefs_account->ssl_imap = recv_ssl_type;
824 prefs_account->ssl_pop = recv_ssl_type;
826 prefs_account->out_ssl_client_cert_file = g_strdup(
827 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_ssl_cert_file)));
828 prefs_account->out_ssl_client_cert_pass = g_strdup(
829 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_ssl_cert_pass)));
830 prefs_account->in_ssl_client_cert_file = g_strdup(
831 gtk_entry_get_text(GTK_ENTRY(wizard->recv_ssl_cert_file)));
832 prefs_account->in_ssl_client_cert_pass = g_strdup(
833 gtk_entry_get_text(GTK_ENTRY(wizard->recv_ssl_cert_pass)));
835 if (prefs_account->protocol == A_IMAP4) {
836 gchar *directory = gtk_editable_get_chars(
837 GTK_EDITABLE(wizard->recv_imap_subdir), 0, -1);
838 if (directory && strlen(directory)) {
839 prefs_account->imap_dir = g_strdup(directory);
841 prefs_account->imap_subsonly =
842 gtk_toggle_button_get_active(
843 GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn));
847 account_list = g_list_append(account_list, prefs_account);
848 prefs_account_write_config_all(account_list);
849 prefs_account_free(prefs_account);
850 account_read_config_all();
852 initialize_fonts(wizard);
853 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4)
854 write_welcome_email(wizard);
857 if (wizard->volmon_mount_sigid)
858 g_signal_handler_disconnect(
859 G_OBJECT(wizard->volmon),
860 wizard->volmon_mount_sigid);
861 if (wizard->volmon_unmount_sigid)
862 g_signal_handler_disconnect(
863 G_OBJECT(wizard->volmon),
864 wizard->volmon_unmount_sigid);
868 plugin_load_standard_plugins();
873 static GtkWidget* create_page (WizardWindow *wizard, const char * title)
881 vbox = gtk_vbox_new (FALSE, 6);
882 gtk_container_set_border_width (GTK_CONTAINER(vbox), 10);
884 /* create the titlebar */
885 hbox = gtk_hbox_new (FALSE, 12);
886 image = stock_pixmap_widget(wizard->window,
887 STOCK_PIXMAP_CLAWS_MAIL_ICON);
888 gtk_box_pack_start (GTK_BOX(hbox), image, FALSE, FALSE, 0);
889 title_string = g_strconcat ("<span size=\"xx-large\" weight=\"ultrabold\">", title ? title : "", "</span>", NULL);
890 w = gtk_label_new (title_string);
891 gtk_label_set_use_markup (GTK_LABEL(w), TRUE);
892 g_free (title_string);
893 gtk_box_pack_start (GTK_BOX(hbox), w, FALSE, FALSE, 0);
895 /* pack the titlebar */
896 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
898 /* pack the separator */
899 gtk_box_pack_start (GTK_BOX(vbox), gtk_hseparator_new(), FALSE, FALSE, 0);
902 w = gtk_alignment_new (0, 0, 0, 0);
903 gtk_widget_set_size_request (w, 0, 6);
904 gtk_box_pack_start (GTK_BOX(vbox), w, FALSE, FALSE, 0);
909 #define PACK_BOX(hbox,text,entry) { \
910 GtkWidget *label = gtk_label_new(text); \
911 gtk_label_set_use_markup(GTK_LABEL(label), TRUE); \
912 if (GTK_IS_MISC(label)) \
913 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); \
914 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); \
915 gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); \
918 static gchar *get_default_server(WizardWindow * wizard, const gchar *type)
920 if (!strcmp(type, "smtp")) {
921 if (!tmpl.smtpserver || !strlen(tmpl.smtpserver))
922 return g_strconcat(type, ".", tmpl.domain, NULL);
924 return g_strdup(tmpl.smtpserver);
926 if (!tmpl.recvserver || !strlen(tmpl.recvserver))
927 return g_strconcat(type, ".", tmpl.domain, NULL);
929 return g_strdup(tmpl.recvserver);
933 static gchar *get_default_account(WizardWindow * wizard)
935 gchar *result = NULL;
937 if (!tmpl.recvuser || !strlen(tmpl.recvuser)) {
938 result = gtk_editable_get_chars(
939 GTK_EDITABLE(wizard->email), 0, -1);
941 if (strstr(result, "@")) {
942 *(strstr(result,"@")) = '\0';
945 result = g_strdup(tmpl.recvuser);
950 static gchar *get_default_smtp_account(WizardWindow * wizard)
952 gchar *result = NULL;
954 if (!tmpl.smtpuser || !strlen(tmpl.smtpuser)) {
957 result = g_strdup(tmpl.smtpuser);
962 static void wizard_email_changed(GtkWidget *widget, gpointer data)
964 WizardWindow *wizard = (WizardWindow *)data;
965 RecvProtocol protocol;
967 protocol = combobox_get_active_data(GTK_COMBO_BOX(wizard->recv_type));
969 text = get_default_server(wizard, "smtp");
970 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
973 text = get_default_account(wizard);
974 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
977 if (protocol == A_POP3) {
978 text = get_default_server(wizard, "pop");
979 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
981 } else if (protocol == A_IMAP4) {
982 text = get_default_server(wizard, "imap");
983 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
985 } else if (protocol == A_LOCAL) {
986 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
991 static GtkWidget* user_page (WizardWindow * wizard)
993 GtkWidget *table = gtk_table_new(1,1, FALSE);
997 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
998 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1000 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1001 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1003 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1004 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1006 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1007 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1008 wizard->full_name = gtk_entry_new();
1009 gtk_entry_set_text(GTK_ENTRY(wizard->full_name), tmpl.name?tmpl.name:"");
1010 PACK_BOX(hbox, _("<span weight=\"bold\">Your name:</span>"),
1013 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1014 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1015 wizard->email = gtk_entry_new();
1016 gtk_entry_set_text(GTK_ENTRY(wizard->email), tmpl.email?tmpl.email:"");
1017 PACK_BOX(hbox, _("<span weight=\"bold\">Your email address:</span>"),
1020 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1021 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1022 wizard->organization = gtk_entry_new();
1023 gtk_entry_set_text(GTK_ENTRY(wizard->organization), tmpl.organization?tmpl.organization:"");
1024 PACK_BOX(hbox, _("Your organization:"), wizard->organization);
1026 g_signal_connect(G_OBJECT(wizard->email), "changed",
1027 G_CALLBACK(wizard_email_changed),
1033 static void wizard_vol_mount_cb(GnomeVFSVolumeMonitor *vfs, GnomeVFSVolume *vol, WizardWindow *wizard)
1035 gchar *uri = gnome_vfs_volume_get_activation_uri (vol);
1036 gchar *mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
1039 if(!strcmp(mount_path, MMC1_PATH)) {
1040 gtk_widget_set_sensitive(wizard->data_root_mmc1_radiobtn, TRUE);
1042 if(!strcmp(mount_path, MMC2_PATH)) {
1043 gtk_widget_set_sensitive(wizard->data_root_mmc2_radiobtn, TRUE);
1048 static void wizard_vol_unmount_cb(GnomeVFSVolumeMonitor *vfs, GnomeVFSVolume *vol, WizardWindow *wizard)
1050 gchar *uri = gnome_vfs_volume_get_activation_uri (vol);
1051 gchar *mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
1054 if(!strcmp(mount_path, MMC1_PATH)) {
1055 gtk_widget_set_sensitive(wizard->data_root_mmc1_radiobtn, FALSE);
1056 if (gtk_toggle_button_get_active(
1057 GTK_TOGGLE_BUTTON(wizard->data_root_mmc1_radiobtn))) {
1058 gtk_toggle_button_set_active(
1059 GTK_TOGGLE_BUTTON(wizard->data_root_nokia_radiobtn), TRUE);
1062 if(!strcmp(mount_path, MMC2_PATH)) {
1063 gtk_widget_set_sensitive(wizard->data_root_mmc2_radiobtn, FALSE);
1064 if (gtk_toggle_button_get_active(
1065 GTK_TOGGLE_BUTTON(wizard->data_root_mmc2_radiobtn))) {
1066 gtk_toggle_button_set_active(
1067 GTK_TOGGLE_BUTTON(wizard->data_root_nokia_radiobtn), TRUE);
1074 void data_root_changed (GtkToggleButton *toggle_btn,
1075 WizardWindow *wizard)
1077 gchar *name = g_path_get_basename(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)));
1079 if (gtk_toggle_button_get_active(
1080 GTK_TOGGLE_BUTTON(wizard->data_root_nokia_radiobtn)))
1081 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), name);
1082 else if (gtk_toggle_button_get_active(
1083 GTK_TOGGLE_BUTTON(wizard->data_root_mmc1_radiobtn))) {
1084 path = g_strconcat(MMC1_PATH, G_DIR_SEPARATOR_S,
1085 "Claws", G_DIR_SEPARATOR_S,
1086 g_get_user_name(), G_DIR_SEPARATOR_S,
1088 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), path);
1090 } else if (gtk_toggle_button_get_active(
1091 GTK_TOGGLE_BUTTON(wizard->data_root_mmc2_radiobtn))) {
1092 path = g_strconcat(MMC2_PATH, G_DIR_SEPARATOR_S,
1093 "Claws", G_DIR_SEPARATOR_S,
1094 g_get_user_name(), G_DIR_SEPARATOR_S,
1096 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), path);
1103 static GtkWidget* mailbox_page (WizardWindow * wizard)
1105 GtkWidget *table = gtk_table_new(1,1, FALSE);
1109 gchar *uri, *mount_path;
1114 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1115 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1117 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1118 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1120 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1121 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1123 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1124 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1126 wizard->mailbox_label = gtk_label_new(_("<span weight=\"bold\">Mailbox name:</span>"));
1127 gtk_label_set_use_markup(GTK_LABEL(wizard->mailbox_label), TRUE);
1128 if (GTK_IS_MISC(wizard->mailbox_label))
1129 gtk_misc_set_alignment(GTK_MISC(wizard->mailbox_label), 1, 0.5);
1130 wizard->mailbox_name = gtk_entry_new();
1132 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), tmpl.mailbox?tmpl.mailbox:"");
1134 CLAWS_SET_TIP(wizard->mailbox_name, _("You can also specify an absolute path, for example: "
1135 "\"/home/john/Documents/Mail\""));
1137 gtk_box_pack_start(GTK_BOX(hbox), wizard->mailbox_label, FALSE, FALSE, 0);
1138 gtk_box_pack_start(GTK_BOX(hbox), wizard->mailbox_name, TRUE, TRUE, 0);
1141 wizard->data_root_nokia_radiobtn = gtk_radio_button_new_with_label(NULL,
1142 _("on internal memory"));
1143 wizard->data_root_mmc1_radiobtn = gtk_radio_button_new_with_label_from_widget(
1144 GTK_RADIO_BUTTON(wizard->data_root_nokia_radiobtn),
1145 _("on external memory card"));
1146 wizard->data_root_mmc2_radiobtn = gtk_radio_button_new_with_label_from_widget(
1147 GTK_RADIO_BUTTON(wizard->data_root_nokia_radiobtn),
1148 _("on internal memory card"));
1150 g_signal_connect(G_OBJECT(wizard->data_root_nokia_radiobtn), "toggled",
1151 G_CALLBACK(data_root_changed), wizard);
1152 g_signal_connect(G_OBJECT(wizard->data_root_mmc1_radiobtn), "toggled",
1153 G_CALLBACK(data_root_changed), wizard);
1154 g_signal_connect(G_OBJECT(wizard->data_root_mmc2_radiobtn), "toggled",
1155 G_CALLBACK(data_root_changed), wizard);
1157 wizard->volmon = gnome_vfs_get_volume_monitor();
1158 wizard->vol_mmc1 = gnome_vfs_volume_monitor_get_volume_for_path(wizard->volmon, MMC1_PATH);
1159 wizard->vol_mmc2 = gnome_vfs_volume_monitor_get_volume_for_path(wizard->volmon, MMC2_PATH);
1161 uri = gnome_vfs_volume_get_activation_uri (wizard->vol_mmc1);
1162 mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
1164 if (wizard->vol_mmc1 == NULL || !gnome_vfs_volume_is_mounted(wizard->vol_mmc1)
1165 || strcmp(mount_path, MMC1_PATH)) {
1166 gtk_widget_set_sensitive(wizard->data_root_mmc1_radiobtn, FALSE);
1170 uri = gnome_vfs_volume_get_activation_uri (wizard->vol_mmc2);
1171 mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
1173 if (wizard->vol_mmc2 == NULL || !gnome_vfs_volume_is_mounted(wizard->vol_mmc2)
1174 || strcmp(mount_path, MMC2_PATH)) {
1175 gtk_widget_set_sensitive(wizard->data_root_mmc2_radiobtn, FALSE);
1177 gtk_toggle_button_set_active(wizard->data_root_mmc2_radiobtn, TRUE);
1181 gnome_vfs_volume_unref(wizard->vol_mmc1);
1182 gnome_vfs_volume_unref(wizard->vol_mmc2);
1183 wizard->vol_mmc1 = NULL;
1184 wizard->vol_mmc2 = NULL;
1186 wizard->volmon_mount_sigid = g_signal_connect(G_OBJECT(wizard->volmon),
1187 "volume-mounted", G_CALLBACK(wizard_vol_mount_cb), wizard);
1188 wizard->volmon_unmount_sigid = g_signal_connect(G_OBJECT(wizard->volmon),
1189 "volume-unmounted", G_CALLBACK(wizard_vol_unmount_cb), wizard);
1191 vbox2 = gtk_vbox_new(FALSE, VSPACING_NARROW);
1192 gtk_box_pack_start (GTK_BOX(vbox2), wizard->data_root_nokia_radiobtn, FALSE, FALSE, 0);
1193 gtk_box_pack_start (GTK_BOX(vbox2), wizard->data_root_mmc1_radiobtn, FALSE, FALSE, 0);
1194 gtk_box_pack_start (GTK_BOX(vbox2), wizard->data_root_mmc2_radiobtn, FALSE, FALSE, 0);
1196 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1197 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1198 PACK_BOX(hbox, _("<span weight=\"bold\">Store data</span>"),
1205 static void smtp_auth_changed (GtkWidget *btn, gpointer data)
1207 WizardWindow *wizard = (WizardWindow *)data;
1208 gboolean do_auth = gtk_toggle_button_get_active(
1209 GTK_TOGGLE_BUTTON(wizard->smtp_auth));
1210 gtk_widget_set_sensitive(wizard->smtp_username, do_auth);
1211 gtk_widget_set_sensitive(wizard->smtp_username_label, do_auth);
1212 gtk_widget_set_sensitive(wizard->smtp_password, do_auth);
1213 gtk_widget_set_sensitive(wizard->smtp_password_label, do_auth);
1217 static void cert_browse_cb(GtkWidget *widget, gpointer data)
1219 GtkEntry *dest = GTK_ENTRY(data);
1221 gchar *utf8_filename;
1223 filename = filesel_select_file_open(_("Select certificate file"), NULL);
1224 if (!filename) return;
1226 utf8_filename = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
1227 if (!utf8_filename) {
1228 g_warning("cert_browse_cb(): failed to convert character set.");
1229 utf8_filename = g_strdup(filename);
1231 gtk_entry_set_text(dest, utf8_filename);
1232 g_free(utf8_filename);
1236 static GtkWidget* smtp_page (WizardWindow * wizard)
1238 GtkWidget *table = gtk_table_new(1, 1, FALSE);
1244 GtkWidget *smtp_cert_table;
1249 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1250 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1252 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1253 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1255 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1256 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1258 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1259 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1260 wizard->smtp_server = gtk_entry_new();
1261 text = get_default_server(wizard, "smtp");
1262 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
1265 CLAWS_SET_TIP(wizard->smtp_server,
1266 _("You can specify the port number by appending it at the end: "
1267 "\"mail.example.com:25\""));
1269 PACK_BOX(hbox, _("<span weight=\"bold\">SMTP server address:</span>"),
1270 wizard->smtp_server);
1273 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1274 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1275 wizard->smtp_auth = gtk_check_button_new_with_label(
1276 _("Use authentication"));
1277 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth),
1279 g_signal_connect(G_OBJECT(wizard->smtp_auth), "toggled",
1280 G_CALLBACK(smtp_auth_changed),
1282 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_auth, FALSE, FALSE, 0);
1284 text = get_default_smtp_account(wizard);
1286 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1287 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1288 wizard->smtp_username = gtk_entry_new();
1289 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_username), text);
1291 wizard->smtp_username_label = gtk_label_new(_("SMTP username:\n"
1292 "<span size=\"small\">(empty to use the same as receive)</span>"));
1293 gtk_label_set_use_markup(GTK_LABEL(wizard->smtp_username_label), TRUE);
1294 if (GTK_IS_MISC(wizard->smtp_username_label))
1295 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_username_label), 1, 0.5);
1296 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_username_label, FALSE, FALSE, 0);
1297 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_username, TRUE, TRUE, 0);
1299 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1300 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1301 wizard->smtp_password = gtk_entry_new();
1302 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_password), tmpl.smtppass?tmpl.smtppass:"");
1303 gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_password), FALSE);
1305 hildon_gtk_entry_set_input_mode(GTK_ENTRY(wizard->smtp_password),
1306 HILDON_GTK_INPUT_MODE_FULL | HILDON_GTK_INPUT_MODE_INVISIBLE);
1308 wizard->smtp_password_label = gtk_label_new(_("SMTP password:\n"
1309 "<span size=\"small\">(empty to use the same as receive)</span>"));
1310 gtk_label_set_use_markup(GTK_LABEL(wizard->smtp_password_label), TRUE);
1311 if (GTK_IS_MISC(wizard->smtp_password_label))
1312 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_password_label), 1, 0.5);
1313 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_password_label, FALSE, FALSE, 0);
1314 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_password, TRUE, TRUE, 0);
1316 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1317 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1318 wizard->smtp_use_ssl = gtk_check_button_new_with_label(
1319 _("Use SSL to connect to SMTP server"));
1320 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl),
1322 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_ssl, FALSE, FALSE, 0);
1324 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1325 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1326 wizard->smtp_use_tls = gtk_check_button_new_with_label(
1327 _("Use SSL via STARTTLS"));
1328 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls),
1330 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_tls, FALSE, FALSE, 0);
1331 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, wizard->smtp_use_tls);
1333 smtp_cert_table = gtk_table_new(3,3, FALSE);
1334 gtk_container_set_border_width(GTK_CONTAINER(smtp_cert_table), 8);
1335 gtk_box_pack_start (GTK_BOX(vbox), smtp_cert_table, FALSE, FALSE, 0);
1336 label = gtk_label_new(_("Client SSL certificate (optional)"));
1337 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
1338 gtk_table_attach(GTK_TABLE(smtp_cert_table), label, 0, 3, 0, 1, GTK_FILL, 0, 0, 0);
1339 label = gtk_label_new(_("File"));
1340 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1341 gtk_table_attach(GTK_TABLE(smtp_cert_table), label, 0, 1, 1, 2, GTK_FILL, 0, 0, 0);
1342 wizard->smtp_ssl_cert_file = gtk_entry_new();
1343 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_ssl_cert_file), tmpl.smtpssl_cert?tmpl.smtpssl_cert:"");
1344 gtk_table_attach(GTK_TABLE(smtp_cert_table), wizard->smtp_ssl_cert_file, 1, 2, 1, 2, GTK_FILL, 0, 0, 0);
1345 button = gtkut_get_browse_file_btn(_("Browse"));
1346 gtk_table_attach(GTK_TABLE(smtp_cert_table), button, 2, 3, 1, 2, GTK_FILL, 0, 0, 0);
1347 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, label);
1348 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, wizard->smtp_ssl_cert_file);
1349 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, button);
1350 g_signal_connect(G_OBJECT(button), "clicked",
1351 G_CALLBACK(cert_browse_cb), wizard->smtp_ssl_cert_file);
1353 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1354 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1355 label = gtk_label_new(_("Password"));
1356 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1357 gtk_table_attach(GTK_TABLE(smtp_cert_table), label, 0, 1, 2, 3, GTK_FILL, 0, 0, 0);
1358 wizard->smtp_ssl_cert_pass = gtk_entry_new();
1359 gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_ssl_cert_pass), FALSE);
1360 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_ssl_cert_pass), tmpl.smtpssl_cert_pass?tmpl.smtpssl_cert_pass:"");
1361 gtk_table_attach(GTK_TABLE(smtp_cert_table), wizard->smtp_ssl_cert_pass, 1, 2, 2, 3, GTK_FILL, 0, 0, 0);
1362 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, label);
1363 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, wizard->smtp_ssl_cert_pass);
1364 wizard->smtp_cert_table = smtp_cert_table;
1366 smtp_auth_changed(NULL, wizard);
1370 static void wizard_protocol_change(WizardWindow *wizard, RecvProtocol protocol)
1374 if (protocol == A_POP3) {
1375 text = get_default_server(wizard, "pop");
1376 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1377 gtk_widget_hide(wizard->recv_imap_label);
1378 gtk_widget_hide(wizard->recv_imap_subdir);
1379 gtk_widget_hide(wizard->subsonly_checkbtn);
1380 gtk_widget_show(wizard->recv_username);
1381 gtk_widget_show(wizard->recv_password);
1382 gtk_widget_show(wizard->recv_username_label);
1383 gtk_widget_show(wizard->recv_password_label);
1384 gtk_widget_hide(wizard->no_imap_warning);
1386 gtk_widget_show(wizard->recv_use_ssl);
1387 gtk_widget_show(wizard->recv_use_tls);
1388 gtk_widget_show(wizard->recv_cert_table);
1390 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1391 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1392 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1394 if (wizard->create_mailbox) {
1395 gtk_widget_show(wizard->mailbox_label);
1396 gtk_widget_show(wizard->mailbox_name);
1398 } else if (protocol == A_IMAP4) {
1399 #ifdef HAVE_LIBETPAN
1400 text = get_default_server(wizard, "imap");
1401 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1402 gtk_widget_show(wizard->recv_imap_label);
1403 gtk_widget_show(wizard->recv_imap_subdir);
1404 gtk_widget_show(wizard->subsonly_checkbtn);
1405 gtk_widget_show(wizard->recv_username);
1406 gtk_widget_show(wizard->recv_password);
1407 gtk_widget_show(wizard->recv_username_label);
1408 gtk_widget_show(wizard->recv_password_label);
1409 gtk_widget_hide(wizard->no_imap_warning);
1411 gtk_widget_show(wizard->recv_use_ssl);
1412 gtk_widget_show(wizard->recv_use_tls);
1413 gtk_widget_show(wizard->recv_cert_table);
1415 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1416 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1417 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1419 if (wizard->create_mailbox) {
1420 gtk_widget_hide(wizard->mailbox_label);
1421 gtk_widget_hide(wizard->mailbox_name);
1424 gtk_widget_hide(wizard->recv_imap_label);
1425 gtk_widget_hide(wizard->recv_imap_subdir);
1426 gtk_widget_hide(wizard->subsonly_checkbtn);
1427 gtk_widget_hide(wizard->recv_username);
1428 gtk_widget_hide(wizard->recv_password);
1429 gtk_widget_hide(wizard->recv_username_label);
1430 gtk_widget_hide(wizard->recv_password_label);
1431 gtk_widget_show(wizard->no_imap_warning);
1432 if (wizard->create_mailbox) {
1433 gtk_widget_hide(wizard->mailbox_label);
1434 gtk_widget_hide(wizard->mailbox_name);
1437 gtk_widget_hide(wizard->recv_use_ssl);
1438 gtk_widget_hide(wizard->recv_use_tls);
1439 gtk_widget_hide(wizard->recv_cert_table);
1441 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, FALSE);
1443 } else if (protocol == A_LOCAL) {
1444 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
1445 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Local mailbox:</span>"));
1446 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1447 gtk_widget_hide(wizard->no_imap_warning);
1448 gtk_widget_hide(wizard->recv_imap_label);
1449 gtk_widget_hide(wizard->recv_imap_subdir);
1450 gtk_widget_hide(wizard->subsonly_checkbtn);
1451 gtk_widget_hide(wizard->recv_username);
1452 gtk_widget_hide(wizard->recv_password);
1453 gtk_widget_hide(wizard->recv_username_label);
1454 gtk_widget_hide(wizard->recv_password_label);
1456 gtk_widget_hide(wizard->recv_use_ssl);
1457 gtk_widget_hide(wizard->recv_use_tls);
1458 gtk_widget_hide(wizard->recv_cert_table);
1460 if (wizard->create_mailbox) {
1461 gtk_widget_show(wizard->mailbox_label);
1462 gtk_widget_show(wizard->mailbox_name);
1464 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1468 static void wizard_protocol_changed(GtkComboBox *combo, gpointer data)
1470 WizardWindow *wizard = (WizardWindow *)data;
1471 RecvProtocol protocol = combobox_get_active_data(combo);
1473 wizard_protocol_change(wizard, protocol);
1476 static GtkWidget* recv_page (WizardWindow * wizard)
1478 GtkWidget *table = gtk_table_new(1,1, FALSE);
1484 GtkWidget *recv_cert_table;
1486 GtkListStore *store;
1492 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1493 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1495 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1496 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1498 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1499 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1501 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1502 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1503 wizard->recv_type = gtkut_sc_combobox_create(NULL, FALSE);
1504 store = GTK_LIST_STORE(gtk_combo_box_get_model(
1505 GTK_COMBO_BOX(wizard->recv_type)));
1507 COMBOBOX_ADD(store, _("POP3"), A_POP3);
1508 COMBOBOX_ADD(store, _("IMAP"), A_IMAP4);
1509 COMBOBOX_ADD(store, _("Local mbox file"), A_LOCAL);
1511 switch(tmpl.recvtype) {
1524 gtk_combo_box_set_active(GTK_COMBO_BOX (wizard->recv_type), index);
1525 g_signal_connect(G_OBJECT(wizard->recv_type), "changed",
1526 G_CALLBACK(wizard_protocol_changed),
1528 PACK_BOX(hbox, _("<span weight=\"bold\">Server type:</span>"),
1531 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1532 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1533 wizard->recv_server = gtk_entry_new();
1534 text = get_default_server(wizard, "pop");
1535 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1538 CLAWS_SET_TIP(wizard->recv_server,
1539 _("You can specify the port number by appending it at the end: "
1540 "\"mail.example.com:110\""));
1542 wizard->recv_label = gtk_label_new(_("<span weight=\"bold\">Server address:</span>"));
1543 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1544 if (GTK_IS_MISC(wizard->recv_label))
1545 gtk_misc_set_alignment(GTK_MISC(wizard->recv_label), 1, 0.5);
1546 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_label, FALSE, FALSE, 0);
1547 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_server, TRUE, TRUE, 0);
1549 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1550 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1551 wizard->recv_username = gtk_entry_new();
1552 wizard->recv_username_label = gtk_label_new(_("<span weight=\"bold\">Username:</span>"));
1553 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_username_label), TRUE);
1554 if (GTK_IS_MISC(wizard->recv_username_label))
1555 gtk_misc_set_alignment(GTK_MISC(wizard->recv_username_label), 1, 0.5);
1556 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_username_label, FALSE, FALSE, 0);
1557 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_username, TRUE, TRUE, 0);
1559 text = get_default_account(wizard);
1560 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
1563 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1564 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1565 wizard->recv_password = gtk_entry_new();
1566 gtk_entry_set_text(GTK_ENTRY(wizard->recv_password), tmpl.recvpass?tmpl.recvpass:"");
1567 wizard->recv_password_label = gtk_label_new(_("Password:"));
1568 if (GTK_IS_MISC(wizard->recv_password_label))
1569 gtk_misc_set_alignment(GTK_MISC(wizard->recv_password_label), 1, 0.5);
1570 gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_password), FALSE);
1572 hildon_gtk_entry_set_input_mode(GTK_ENTRY(wizard->recv_password),
1573 HILDON_GTK_INPUT_MODE_FULL | HILDON_GTK_INPUT_MODE_INVISIBLE);
1575 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_password_label, FALSE, FALSE, 0);
1576 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_password, TRUE, TRUE, 0);
1579 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1580 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1581 wizard->recv_use_ssl = gtk_check_button_new_with_label(
1582 _("Use SSL to connect to receiving server"));
1583 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl),
1585 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_ssl, FALSE, FALSE, 0);
1587 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1588 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1589 wizard->recv_use_tls = gtk_check_button_new_with_label(
1590 _("Use SSL via STARTTLS"));
1591 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls),
1593 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_tls, FALSE, FALSE, 0);
1594 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, wizard->recv_use_tls);
1596 recv_cert_table = gtk_table_new(3,3, FALSE);
1597 gtk_container_set_border_width(GTK_CONTAINER(recv_cert_table), 8);
1598 gtk_box_pack_start (GTK_BOX(vbox), recv_cert_table, FALSE, FALSE, 0);
1599 label = gtk_label_new(_("Client SSL certificate (optional)"));
1600 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
1601 gtk_table_attach(GTK_TABLE(recv_cert_table), label, 0, 3, 0, 1, GTK_FILL, 0, 0, 0);
1602 label = gtk_label_new(_("File"));
1603 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1604 gtk_table_attach(GTK_TABLE(recv_cert_table), label, 0, 1, 1, 2, GTK_FILL, 0, 0, 0);
1605 wizard->recv_ssl_cert_file = gtk_entry_new();
1606 gtk_entry_set_text(GTK_ENTRY(wizard->recv_ssl_cert_file), tmpl.recvssl_cert?tmpl.recvssl_cert:"");
1607 gtk_table_attach(GTK_TABLE(recv_cert_table), wizard->recv_ssl_cert_file, 1, 2, 1, 2, GTK_FILL, 0, 0, 0);
1608 button = gtkut_get_browse_file_btn(_("Browse"));
1609 gtk_table_attach(GTK_TABLE(recv_cert_table), button, 2, 3, 1, 2, GTK_FILL, 0, 0, 0);
1610 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, label);
1611 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, wizard->recv_ssl_cert_file);
1612 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, button);
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 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1618 label = gtk_label_new(_("Password"));
1619 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1620 gtk_table_attach(GTK_TABLE(recv_cert_table), label, 0, 1, 2, 3, GTK_FILL, 0, 0, 0);
1621 wizard->recv_ssl_cert_pass = gtk_entry_new();
1622 gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_ssl_cert_pass), FALSE);
1623 gtk_entry_set_text(GTK_ENTRY(wizard->recv_ssl_cert_pass), tmpl.recvssl_cert_pass?tmpl.recvssl_cert_pass:"");
1624 gtk_table_attach(GTK_TABLE(recv_cert_table), wizard->recv_ssl_cert_pass, 1, 2, 2, 3, GTK_FILL, 0, 0, 0);
1625 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, label);
1626 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, wizard->recv_ssl_cert_pass);
1627 wizard->recv_cert_table = recv_cert_table;
1629 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1630 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1631 wizard->recv_imap_subdir = gtk_entry_new();
1632 gtk_entry_set_text(GTK_ENTRY(wizard->recv_imap_subdir), tmpl.imapdir?tmpl.imapdir:"");
1633 wizard->recv_imap_label = gtk_label_new(_("IMAP server directory:"));
1634 if (GTK_IS_MISC(wizard->recv_imap_label))
1635 gtk_misc_set_alignment(GTK_MISC(wizard->recv_imap_label), 1, 0.5);
1636 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_label, FALSE, FALSE, 0);
1637 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_subdir, TRUE, TRUE, 0);
1639 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1640 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1641 wizard->subsonly_checkbtn = gtk_check_button_new_with_label(
1642 _("Show only subscribed folders"));
1643 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn),
1645 gtk_box_pack_start(GTK_BOX(hbox), wizard->subsonly_checkbtn, FALSE, FALSE, 0);
1647 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1648 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1649 wizard->no_imap_warning = gtk_label_new(_(
1650 "<span weight=\"bold\">Warning: this version of Claws Mail\n"
1651 "has been built without IMAP support.</span>"));
1652 gtk_label_set_use_markup(GTK_LABEL(wizard->no_imap_warning), TRUE);
1653 gtk_box_pack_start(GTK_BOX(hbox), wizard->no_imap_warning, FALSE, FALSE, 0);
1659 wizard_response_cb (GtkDialog * dialog, int response, gpointer data)
1661 WizardWindow * wizard = (WizardWindow *)data;
1662 int current_page, num_pages;
1663 gboolean skip_mailbox_page = FALSE;
1665 gint protocol = combobox_get_active_data(GTK_COMBO_BOX(wizard->recv_type));
1667 if (protocol == A_IMAP4) {
1668 skip_mailbox_page = TRUE;
1672 num_pages = g_slist_length(wizard->pages);
1674 current_page = gtk_notebook_get_current_page (
1675 GTK_NOTEBOOK(wizard->notebook));
1676 if (response == CANCEL)
1678 wizard->result = FALSE;
1679 wizard->finished = TRUE;
1680 gtk_widget_destroy (GTK_WIDGET(dialog));
1682 else if (response == FINISHED)
1684 if (!wizard_write_config(wizard)) {
1685 current_page = gtk_notebook_get_current_page (
1686 GTK_NOTEBOOK(wizard->notebook));
1689 wizard->result = TRUE;
1690 wizard->finished = TRUE;
1691 gtk_widget_destroy (GTK_WIDGET(dialog));
1695 if (response == GO_BACK)
1697 if (current_page > 0) {
1699 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1703 gtk_notebook_set_current_page (
1704 GTK_NOTEBOOK(wizard->notebook),
1708 else if (response == GO_FORWARD)
1710 if (current_page < (num_pages-1)) {
1712 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1716 gtk_notebook_set_current_page (
1717 GTK_NOTEBOOK(wizard->notebook),
1722 gtk_dialog_set_response_sensitive (dialog, GO_BACK,
1724 gtk_dialog_set_response_sensitive (dialog, GO_FORWARD,
1725 current_page < (num_pages - 1));
1726 if (current_page == (num_pages -1)) {
1727 gtk_dialog_set_response_sensitive (dialog, FINISHED, TRUE);
1728 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), FINISHED);
1730 gtk_dialog_set_response_sensitive (dialog, FINISHED, FALSE);
1731 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), GO_FORWARD);
1737 static gint wizard_close_cb(GtkWidget *widget, GdkEventAny *event,
1740 WizardWindow *wizard = (WizardWindow *)data;
1741 wizard->result = FALSE;
1742 wizard->finished = TRUE;
1747 #define PACK_WARNING(text) { \
1748 label = gtk_label_new(text); \
1749 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); \
1750 gtk_box_pack_end(GTK_BOX(widget), label, FALSE, FALSE, 0); \
1753 gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) {
1754 WizardWindow *wizard = g_new0(WizardWindow, 1);
1758 GtkWidget *scrolled_window;
1763 wizard->mainwin = mainwin;
1764 wizard->create_mailbox = create_mailbox;
1766 gtk_widget_hide(mainwin->window);
1768 wizard_read_defaults();
1770 wizard->window = gtk_dialog_new_with_buttons (_("Claws Mail Setup Wizard"),
1772 GTK_STOCK_GO_BACK, GO_BACK,
1773 GTK_STOCK_GO_FORWARD, GO_FORWARD,
1774 GTK_STOCK_SAVE, FINISHED,
1775 GTK_STOCK_CANCEL, CANCEL,
1777 gtk_widget_set_size_request(wizard->window, -1, 480);
1779 g_signal_connect(wizard->window, "response",
1780 G_CALLBACK(wizard_response_cb), wizard);
1781 gtk_widget_realize(wizard->window);
1782 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window),
1784 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1786 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1788 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1790 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1793 wizard->notebook = gtk_notebook_new();
1794 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(wizard->notebook), FALSE);
1795 gtk_notebook_set_show_border(GTK_NOTEBOOK(wizard->notebook), FALSE);
1796 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(wizard->window)->vbox),
1797 wizard->notebook, TRUE, TRUE, 0);
1799 wizard->pages = NULL;
1801 /*welcome page: 0 */
1803 page = create_page(wizard, _("Welcome to Claws Mail"));
1805 wizard->pages = g_slist_append(wizard->pages, page);
1806 widget = stock_pixmap_widget(wizard->window,
1807 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1809 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1811 text = g_strdup(_("Welcome to the Claws Mail setup wizard.\n\n"
1812 "We will begin by defining some basic "
1813 "information about you and your most common "
1814 "mail options so that you can start to use "
1815 "Claws Mail in less than five minutes."));
1816 widget = gtk_label_new(text);
1817 gtk_label_set_line_wrap(GTK_LABEL(widget), TRUE);
1819 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1821 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1822 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1823 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1824 gtk_box_pack_start(GTK_BOX(page), scrolled_window, TRUE, TRUE, 0);
1826 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1834 widget = create_page (wizard, _("About You"));
1835 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1836 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1837 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1838 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1840 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1842 PACK_WARNING(_("Bold fields must be completed"));
1844 wizard->pages = g_slist_append(wizard->pages, widget);
1846 /* recv+auth page: 2 */
1849 widget = create_page (wizard, _("Receiving mail"));
1850 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1851 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1852 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1853 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1855 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1857 PACK_WARNING(_("Bold fields must be completed"));
1859 wizard->pages = g_slist_append(wizard->pages, widget);
1864 widget = create_page (wizard, _("Sending mail"));
1865 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1866 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1867 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1868 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1870 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1872 PACK_WARNING(_("Bold fields must be completed"));
1874 wizard->pages = g_slist_append(wizard->pages, widget);
1876 /* mailbox page: 4 */
1877 if (create_mailbox) {
1880 widget = create_page (wizard, _("Saving mail on disk"));
1881 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1882 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1883 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1884 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1886 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1887 mailbox_page(wizard));
1888 PACK_WARNING(_("Bold fields must be completed"));
1890 wizard->pages = g_slist_append(wizard->pages, widget);
1896 page = create_page(wizard, _("Configuration finished"));
1898 wizard->pages = g_slist_append(wizard->pages, page);
1899 widget = stock_pixmap_widget(wizard->window,
1900 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1902 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1904 text = g_strdup(_("Claws Mail is now ready.\n"
1905 "Click Save to start."));
1906 widget = gtk_label_new(text);
1907 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1911 for (cur = wizard->pages; cur && cur->data; cur = cur->next) {
1912 gtk_notebook_append_page (GTK_NOTEBOOK(wizard->notebook),
1913 GTK_WIDGET(cur->data), NULL);
1916 g_signal_connect(G_OBJECT(wizard->window), "delete_event",
1917 G_CALLBACK(wizard_close_cb), wizard);
1918 gtk_widget_show_all (wizard->window);
1920 gtk_widget_hide(wizard->recv_imap_label);
1921 gtk_widget_hide(wizard->recv_imap_subdir);
1922 gtk_widget_hide(wizard->subsonly_checkbtn);
1924 wizard_protocol_change(wizard, tmpl.recvtype);
1926 while (!wizard->finished)
1927 gtk_main_iteration();
1929 result = wizard->result;
1933 gtk_widget_show(mainwin->window);