2 * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2011 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 gtk_widget_get_style(widget)->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);
996 GtkWidget *user_table;
998 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
999 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1001 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1002 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1004 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1005 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1007 user_table = gtk_table_new(3, 2, FALSE);
1008 gtk_table_set_row_spacings(GTK_TABLE(user_table), VSPACING_NARROW);
1009 gtk_box_pack_start(GTK_BOX(vbox), user_table, FALSE, FALSE, 0);
1011 label = gtk_label_new(_("<span weight=\"bold\">Your name:</span>"));
1012 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
1013 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1014 gtk_table_attach(GTK_TABLE(user_table), label, 0,1,0,1,
1015 GTK_FILL, 0, VSPACING_NARROW, 0);
1016 wizard->full_name = gtk_entry_new();
1017 gtk_entry_set_text(GTK_ENTRY(wizard->full_name), tmpl.name?tmpl.name:"");
1018 gtk_table_attach(GTK_TABLE(user_table), wizard->full_name, 1,2,0,1,
1019 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1021 label = gtk_label_new(_("<span weight=\"bold\">Your email address:</span>"));
1022 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
1023 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1024 gtk_table_attach(GTK_TABLE(user_table), label, 0,1,1,2,
1025 GTK_FILL, 0, VSPACING_NARROW, 0);
1026 wizard->email = gtk_entry_new();
1027 gtk_entry_set_text(GTK_ENTRY(wizard->email), tmpl.email?tmpl.email:"");
1028 gtk_table_attach(GTK_TABLE(user_table), wizard->email, 1,2,1,2,
1029 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1031 label = gtk_label_new(_("Your organization:"));
1032 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1033 gtk_table_attach(GTK_TABLE(user_table), label, 0,1,2,3,
1034 GTK_FILL, 0, VSPACING_NARROW, 0);
1035 wizard->organization = gtk_entry_new();
1036 gtk_entry_set_text(GTK_ENTRY(wizard->organization), tmpl.organization?tmpl.organization:"");
1037 gtk_table_attach(GTK_TABLE(user_table), wizard->organization, 1,2,2,3,
1038 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1040 g_signal_connect(G_OBJECT(wizard->email), "changed",
1041 G_CALLBACK(wizard_email_changed),
1047 static void wizard_vol_mount_cb(GnomeVFSVolumeMonitor *vfs, GnomeVFSVolume *vol, WizardWindow *wizard)
1049 gchar *uri = gnome_vfs_volume_get_activation_uri (vol);
1050 gchar *mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
1053 if(!strcmp(mount_path, MMC1_PATH)) {
1054 gtk_widget_set_sensitive(wizard->data_root_mmc1_radiobtn, TRUE);
1056 if(!strcmp(mount_path, MMC2_PATH)) {
1057 gtk_widget_set_sensitive(wizard->data_root_mmc2_radiobtn, TRUE);
1062 static void wizard_vol_unmount_cb(GnomeVFSVolumeMonitor *vfs, GnomeVFSVolume *vol, WizardWindow *wizard)
1064 gchar *uri = gnome_vfs_volume_get_activation_uri (vol);
1065 gchar *mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
1068 if(!strcmp(mount_path, MMC1_PATH)) {
1069 gtk_widget_set_sensitive(wizard->data_root_mmc1_radiobtn, FALSE);
1070 if (gtk_toggle_button_get_active(
1071 GTK_TOGGLE_BUTTON(wizard->data_root_mmc1_radiobtn))) {
1072 gtk_toggle_button_set_active(
1073 GTK_TOGGLE_BUTTON(wizard->data_root_nokia_radiobtn), TRUE);
1076 if(!strcmp(mount_path, MMC2_PATH)) {
1077 gtk_widget_set_sensitive(wizard->data_root_mmc2_radiobtn, FALSE);
1078 if (gtk_toggle_button_get_active(
1079 GTK_TOGGLE_BUTTON(wizard->data_root_mmc2_radiobtn))) {
1080 gtk_toggle_button_set_active(
1081 GTK_TOGGLE_BUTTON(wizard->data_root_nokia_radiobtn), TRUE);
1088 void data_root_changed (GtkToggleButton *toggle_btn,
1089 WizardWindow *wizard)
1091 gchar *name = g_path_get_basename(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)));
1093 if (gtk_toggle_button_get_active(
1094 GTK_TOGGLE_BUTTON(wizard->data_root_nokia_radiobtn)))
1095 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), name);
1096 else if (gtk_toggle_button_get_active(
1097 GTK_TOGGLE_BUTTON(wizard->data_root_mmc1_radiobtn))) {
1098 path = g_strconcat(MMC1_PATH, G_DIR_SEPARATOR_S,
1099 "Claws", G_DIR_SEPARATOR_S,
1100 g_get_user_name(), G_DIR_SEPARATOR_S,
1102 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), path);
1104 } else if (gtk_toggle_button_get_active(
1105 GTK_TOGGLE_BUTTON(wizard->data_root_mmc2_radiobtn))) {
1106 path = g_strconcat(MMC2_PATH, G_DIR_SEPARATOR_S,
1107 "Claws", G_DIR_SEPARATOR_S,
1108 g_get_user_name(), G_DIR_SEPARATOR_S,
1110 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), path);
1117 static GtkWidget* mailbox_page (WizardWindow * wizard)
1119 GtkWidget *table = gtk_table_new(1,1, FALSE);
1123 gchar *uri, *mount_path;
1127 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1128 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1130 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1131 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1133 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1134 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1136 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1137 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1139 wizard->mailbox_label = gtk_label_new(_("<span weight=\"bold\">Mailbox name:</span>"));
1140 gtk_label_set_use_markup(GTK_LABEL(wizard->mailbox_label), TRUE);
1141 if (GTK_IS_MISC(wizard->mailbox_label))
1142 gtk_misc_set_alignment(GTK_MISC(wizard->mailbox_label), 1, 0.5);
1143 wizard->mailbox_name = gtk_entry_new();
1145 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), tmpl.mailbox?tmpl.mailbox:"");
1147 CLAWS_SET_TIP(wizard->mailbox_name, _("You can also specify an absolute path, for example: "
1148 "\"/home/john/Documents/Mail\""));
1150 gtk_box_pack_start(GTK_BOX(hbox), wizard->mailbox_label, FALSE, FALSE, 0);
1151 gtk_box_pack_start(GTK_BOX(hbox), wizard->mailbox_name, TRUE, TRUE, 0);
1154 wizard->data_root_nokia_radiobtn = gtk_radio_button_new_with_label(NULL,
1155 _("on internal memory"));
1156 wizard->data_root_mmc1_radiobtn = gtk_radio_button_new_with_label_from_widget(
1157 GTK_RADIO_BUTTON(wizard->data_root_nokia_radiobtn),
1158 _("on external memory card"));
1159 wizard->data_root_mmc2_radiobtn = gtk_radio_button_new_with_label_from_widget(
1160 GTK_RADIO_BUTTON(wizard->data_root_nokia_radiobtn),
1161 _("on internal memory card"));
1163 g_signal_connect(G_OBJECT(wizard->data_root_nokia_radiobtn), "toggled",
1164 G_CALLBACK(data_root_changed), wizard);
1165 g_signal_connect(G_OBJECT(wizard->data_root_mmc1_radiobtn), "toggled",
1166 G_CALLBACK(data_root_changed), wizard);
1167 g_signal_connect(G_OBJECT(wizard->data_root_mmc2_radiobtn), "toggled",
1168 G_CALLBACK(data_root_changed), wizard);
1170 wizard->volmon = gnome_vfs_get_volume_monitor();
1171 wizard->vol_mmc1 = gnome_vfs_volume_monitor_get_volume_for_path(wizard->volmon, MMC1_PATH);
1172 wizard->vol_mmc2 = gnome_vfs_volume_monitor_get_volume_for_path(wizard->volmon, MMC2_PATH);
1174 uri = gnome_vfs_volume_get_activation_uri (wizard->vol_mmc1);
1175 mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
1177 if (wizard->vol_mmc1 == NULL || !gnome_vfs_volume_is_mounted(wizard->vol_mmc1)
1178 || strcmp(mount_path, MMC1_PATH)) {
1179 gtk_widget_set_sensitive(wizard->data_root_mmc1_radiobtn, FALSE);
1183 uri = gnome_vfs_volume_get_activation_uri (wizard->vol_mmc2);
1184 mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
1186 if (wizard->vol_mmc2 == NULL || !gnome_vfs_volume_is_mounted(wizard->vol_mmc2)
1187 || strcmp(mount_path, MMC2_PATH)) {
1188 gtk_widget_set_sensitive(wizard->data_root_mmc2_radiobtn, FALSE);
1190 gtk_toggle_button_set_active(wizard->data_root_mmc2_radiobtn, TRUE);
1194 gnome_vfs_volume_unref(wizard->vol_mmc1);
1195 gnome_vfs_volume_unref(wizard->vol_mmc2);
1196 wizard->vol_mmc1 = NULL;
1197 wizard->vol_mmc2 = NULL;
1199 wizard->volmon_mount_sigid = g_signal_connect(G_OBJECT(wizard->volmon),
1200 "volume-mounted", G_CALLBACK(wizard_vol_mount_cb), wizard);
1201 wizard->volmon_unmount_sigid = g_signal_connect(G_OBJECT(wizard->volmon),
1202 "volume-unmounted", G_CALLBACK(wizard_vol_unmount_cb), wizard);
1204 vbox2 = gtk_vbox_new(FALSE, VSPACING_NARROW);
1205 gtk_box_pack_start (GTK_BOX(vbox2), wizard->data_root_nokia_radiobtn, FALSE, FALSE, 0);
1206 gtk_box_pack_start (GTK_BOX(vbox2), wizard->data_root_mmc1_radiobtn, FALSE, FALSE, 0);
1207 gtk_box_pack_start (GTK_BOX(vbox2), wizard->data_root_mmc2_radiobtn, FALSE, FALSE, 0);
1209 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1210 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1211 PACK_BOX(hbox, _("<span weight=\"bold\">Store data</span>"), vbox2);
1217 static void smtp_auth_changed (GtkWidget *btn, gpointer data)
1219 WizardWindow *wizard = (WizardWindow *)data;
1220 gboolean do_auth = gtk_toggle_button_get_active(
1221 GTK_TOGGLE_BUTTON(wizard->smtp_auth));
1222 gtk_widget_set_sensitive(wizard->smtp_username, do_auth);
1223 gtk_widget_set_sensitive(wizard->smtp_username_label, do_auth);
1224 gtk_widget_set_sensitive(wizard->smtp_password, do_auth);
1225 gtk_widget_set_sensitive(wizard->smtp_password_label, do_auth);
1229 static void cert_browse_cb(GtkWidget *widget, gpointer data)
1231 GtkEntry *dest = GTK_ENTRY(data);
1233 gchar *utf8_filename;
1235 filename = filesel_select_file_open(_("Select certificate file"), NULL);
1236 if (!filename) return;
1238 utf8_filename = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
1239 if (!utf8_filename) {
1240 g_warning("cert_browse_cb(): failed to convert character set.");
1241 utf8_filename = g_strdup(filename);
1243 gtk_entry_set_text(dest, utf8_filename);
1244 g_free(utf8_filename);
1248 static GtkWidget* smtp_page (WizardWindow * wizard)
1250 GtkWidget *table = gtk_table_new(1, 1, FALSE);
1253 GtkWidget *hbox_spc;
1254 GtkWidget *smtp_auth_table;
1258 GtkWidget *smtp_cert_table;
1262 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1263 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1265 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1266 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1268 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1269 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1271 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1272 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1273 wizard->smtp_server = gtk_entry_new();
1274 text = get_default_server(wizard, "smtp");
1275 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
1278 CLAWS_SET_TIP(wizard->smtp_server,
1279 _("You can specify the port number by appending it at the end: "
1280 "\"mail.example.com:25\""));
1282 PACK_BOX(hbox, _("<span weight=\"bold\">SMTP server address:</span>"),
1283 wizard->smtp_server);
1285 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1286 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1287 wizard->smtp_auth = gtk_check_button_new_with_label(
1288 _("Use authentication"));
1289 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth),
1291 g_signal_connect(G_OBJECT(wizard->smtp_auth), "toggled",
1292 G_CALLBACK(smtp_auth_changed),
1294 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_auth, FALSE, FALSE, 0);
1296 label = gtk_label_new(_("<span size=\"small\">(empty to use the same as receive)</span>"));
1297 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
1298 SET_TOGGLE_SENSITIVITY (wizard->smtp_auth, label);
1299 gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 0);
1301 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1302 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1303 hbox_spc = gtk_hbox_new (FALSE, 0);
1304 gtk_widget_set_size_request (hbox_spc, 12, -1);
1305 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1306 smtp_auth_table = gtk_table_new(2, 2, FALSE);
1307 SET_TOGGLE_SENSITIVITY (wizard->smtp_auth, smtp_auth_table);
1308 gtk_box_pack_start(GTK_BOX(hbox), smtp_auth_table, TRUE, TRUE, 0);
1310 wizard->smtp_username_label = gtk_label_new(_("SMTP username:"));
1311 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_username_label), 1, 0.5);
1312 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_username_label, 0,1,0,1,
1313 GTK_FILL, 0, VSPACING_NARROW, 0);
1314 text = get_default_smtp_account(wizard);
1315 wizard->smtp_username = gtk_entry_new();
1316 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_username), text);
1318 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_username, 1,2,0,1,
1319 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1321 wizard->smtp_password_label = gtk_label_new(_("SMTP password:"));
1322 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_password_label), 1, 0.5);
1323 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_password_label, 0,1,1,2,
1324 GTK_FILL, 0, VSPACING_NARROW, 0);
1325 wizard->smtp_password = gtk_entry_new();
1326 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_password), tmpl.smtppass?tmpl.smtppass:"");
1327 gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_password), FALSE);
1329 hildon_gtk_entry_set_input_mode(GTK_ENTRY(wizard->smtp_password),
1330 HILDON_GTK_INPUT_MODE_FULL | HILDON_GTK_INPUT_MODE_INVISIBLE);
1332 gtk_table_attach(GTK_TABLE(smtp_auth_table), wizard->smtp_password, 1,2,1,2,
1333 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1335 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1336 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1337 wizard->smtp_use_ssl = gtk_check_button_new_with_label(
1338 _("Use SSL to connect to SMTP server"));
1339 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl),
1341 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_ssl, FALSE, FALSE, 0);
1343 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1344 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1345 hbox_spc = gtk_hbox_new (FALSE, 0);
1346 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1347 gtk_widget_set_size_request (hbox_spc, 12, -1);
1348 wizard->smtp_use_tls = gtk_check_button_new_with_label(
1349 _("Use SSL via STARTTLS"));
1350 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls),
1352 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_tls, FALSE, FALSE, 0);
1353 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, wizard->smtp_use_tls);
1355 smtp_cert_table = gtk_table_new(3,3, FALSE);
1356 gtk_box_pack_start (GTK_BOX(vbox), smtp_cert_table, FALSE, FALSE, 4);
1357 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1358 hbox_spc = gtk_hbox_new (FALSE, 0);
1359 gtk_widget_set_size_request (hbox_spc, 12, -1);
1360 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1361 label = gtk_label_new(_("Client SSL certificate (optional)"));
1362 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
1363 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1364 gtk_table_attach(GTK_TABLE(smtp_cert_table), hbox, 0, 3, 0, 1, GTK_FILL, 0, 0, 0);
1365 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1366 hbox_spc = gtk_hbox_new (FALSE, 0);
1367 gtk_widget_set_size_request (hbox_spc, 12, -1);
1368 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1369 label = gtk_label_new(_("File"));
1370 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1371 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1372 gtk_table_attach(GTK_TABLE(smtp_cert_table), hbox, 0, 1, 1, 2,
1373 GTK_FILL, 0, VSPACING_NARROW, 0);
1374 wizard->smtp_ssl_cert_file = gtk_entry_new();
1375 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_ssl_cert_file), tmpl.smtpssl_cert?tmpl.smtpssl_cert:"");
1376 gtk_table_attach(GTK_TABLE(smtp_cert_table), wizard->smtp_ssl_cert_file, 1, 2, 1, 2, GTK_FILL, 0, 0, 0);
1377 button = gtkut_get_browse_file_btn(_("Browse"));
1378 gtk_table_attach(GTK_TABLE(smtp_cert_table), button, 2, 3, 1, 2,
1379 GTK_FILL, 0, VSPACING_NARROW, 0);
1380 g_signal_connect(G_OBJECT(button), "clicked",
1381 G_CALLBACK(cert_browse_cb), wizard->smtp_ssl_cert_file);
1383 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1384 hbox_spc = gtk_hbox_new (FALSE, 0);
1385 gtk_widget_set_size_request (hbox_spc, 12, -1);
1386 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1387 label = gtk_label_new(_("Password"));
1388 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1389 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1390 gtk_table_attach(GTK_TABLE(smtp_cert_table), hbox, 0, 1, 2, 3,
1391 GTK_FILL, 0, VSPACING_NARROW, 0);
1392 wizard->smtp_ssl_cert_pass = gtk_entry_new();
1393 gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_ssl_cert_pass), FALSE);
1394 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_ssl_cert_pass), tmpl.smtpssl_cert_pass?tmpl.smtpssl_cert_pass:"");
1395 gtk_table_attach(GTK_TABLE(smtp_cert_table), wizard->smtp_ssl_cert_pass, 1, 2, 2, 3, GTK_FILL, 0, 0, 0);
1396 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, smtp_cert_table);
1397 wizard->smtp_cert_table = smtp_cert_table;
1399 smtp_auth_changed(NULL, wizard);
1403 static void wizard_protocol_change(WizardWindow *wizard, RecvProtocol protocol)
1407 if (protocol == A_POP3) {
1408 text = get_default_server(wizard, "pop");
1409 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1410 gtk_widget_hide(wizard->recv_imap_label);
1411 gtk_widget_hide(wizard->recv_imap_subdir);
1412 gtk_widget_hide(wizard->subsonly_checkbtn);
1413 gtk_widget_show(wizard->recv_username);
1414 gtk_widget_show(wizard->recv_password);
1415 gtk_widget_show(wizard->recv_username_label);
1416 gtk_widget_show(wizard->recv_password_label);
1417 gtk_widget_hide(wizard->no_imap_warning);
1419 gtk_widget_show(wizard->recv_use_ssl);
1420 gtk_widget_show(wizard->recv_use_tls);
1421 gtk_widget_show(wizard->recv_cert_table);
1423 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1424 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1425 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1427 if (wizard->create_mailbox) {
1428 gtk_widget_show(wizard->mailbox_label);
1429 gtk_widget_show(wizard->mailbox_name);
1431 } else if (protocol == A_IMAP4) {
1432 #ifdef HAVE_LIBETPAN
1433 text = get_default_server(wizard, "imap");
1434 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1435 gtk_widget_show(wizard->recv_imap_label);
1436 gtk_widget_show(wizard->recv_imap_subdir);
1437 gtk_widget_show(wizard->subsonly_checkbtn);
1438 gtk_widget_show(wizard->recv_username);
1439 gtk_widget_show(wizard->recv_password);
1440 gtk_widget_show(wizard->recv_username_label);
1441 gtk_widget_show(wizard->recv_password_label);
1442 gtk_widget_hide(wizard->no_imap_warning);
1444 gtk_widget_show(wizard->recv_use_ssl);
1445 gtk_widget_show(wizard->recv_use_tls);
1446 gtk_widget_show(wizard->recv_cert_table);
1448 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1449 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1450 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1452 if (wizard->create_mailbox) {
1453 gtk_widget_hide(wizard->mailbox_label);
1454 gtk_widget_hide(wizard->mailbox_name);
1457 gtk_widget_hide(wizard->recv_imap_label);
1458 gtk_widget_hide(wizard->recv_imap_subdir);
1459 gtk_widget_hide(wizard->subsonly_checkbtn);
1460 gtk_widget_hide(wizard->recv_username);
1461 gtk_widget_hide(wizard->recv_password);
1462 gtk_widget_hide(wizard->recv_username_label);
1463 gtk_widget_hide(wizard->recv_password_label);
1464 gtk_widget_show(wizard->no_imap_warning);
1465 if (wizard->create_mailbox) {
1466 gtk_widget_hide(wizard->mailbox_label);
1467 gtk_widget_hide(wizard->mailbox_name);
1470 gtk_widget_hide(wizard->recv_use_ssl);
1471 gtk_widget_hide(wizard->recv_use_tls);
1472 gtk_widget_hide(wizard->recv_cert_table);
1474 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, FALSE);
1476 } else if (protocol == A_LOCAL) {
1477 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
1478 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Local mailbox:</span>"));
1479 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1480 gtk_widget_hide(wizard->no_imap_warning);
1481 gtk_widget_hide(wizard->recv_imap_label);
1482 gtk_widget_hide(wizard->recv_imap_subdir);
1483 gtk_widget_hide(wizard->subsonly_checkbtn);
1484 gtk_widget_hide(wizard->recv_username);
1485 gtk_widget_hide(wizard->recv_password);
1486 gtk_widget_hide(wizard->recv_username_label);
1487 gtk_widget_hide(wizard->recv_password_label);
1489 gtk_widget_hide(wizard->recv_use_ssl);
1490 gtk_widget_hide(wizard->recv_use_tls);
1491 gtk_widget_hide(wizard->recv_cert_table);
1493 if (wizard->create_mailbox) {
1494 gtk_widget_show(wizard->mailbox_label);
1495 gtk_widget_show(wizard->mailbox_name);
1497 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1501 static void wizard_protocol_changed(GtkComboBox *combo, gpointer data)
1503 WizardWindow *wizard = (WizardWindow *)data;
1504 RecvProtocol protocol = combobox_get_active_data(combo);
1506 wizard_protocol_change(wizard, protocol);
1509 static GtkWidget* recv_page (WizardWindow * wizard)
1511 GtkWidget *table = gtk_table_new(1,1, FALSE);
1514 GtkWidget *hbox_spc;
1515 GtkWidget *recv_table;
1519 GtkWidget *recv_cert_table;
1521 GtkListStore *store;
1526 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1527 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1529 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1530 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1532 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1533 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1535 recv_table = gtk_table_new(4, 2, FALSE);
1536 gtk_box_pack_start(GTK_BOX(vbox), recv_table, FALSE, FALSE, 0);
1538 label = gtk_label_new(_("<span weight=\"bold\">Server type:</span>"));
1539 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1540 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
1541 gtk_table_attach(GTK_TABLE(recv_table), label, 0,1,0,1,
1542 GTK_FILL, 0, VSPACING_NARROW, 0);
1543 wizard->recv_type = gtkut_sc_combobox_create(NULL, FALSE);
1544 store = GTK_LIST_STORE(gtk_combo_box_get_model(
1545 GTK_COMBO_BOX(wizard->recv_type)));
1547 COMBOBOX_ADD(store, _("POP3"), A_POP3);
1548 COMBOBOX_ADD(store, _("IMAP"), A_IMAP4);
1549 COMBOBOX_ADD(store, _("Local mbox file"), A_LOCAL);
1551 switch(tmpl.recvtype) {
1564 gtk_combo_box_set_active(GTK_COMBO_BOX (wizard->recv_type), index);
1565 g_signal_connect(G_OBJECT(wizard->recv_type), "changed",
1566 G_CALLBACK(wizard_protocol_changed),
1568 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_type, 1,2,0,1,
1569 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1571 wizard->recv_label = gtk_label_new(_("<span weight=\"bold\">Server address:</span>"));
1572 gtk_misc_set_alignment(GTK_MISC(wizard->recv_label), 1, 0.5);
1573 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1574 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_label, 0,1,1,2,
1575 GTK_FILL, 0, VSPACING_NARROW, 0);
1576 wizard->recv_server = gtk_entry_new();
1577 text = get_default_server(wizard, "pop");
1578 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1581 CLAWS_SET_TIP(wizard->recv_server,
1582 _("You can specify the port number by appending it at the end: "
1583 "\"mail.example.com:110\""));
1584 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_server, 1,2,1,2,
1585 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1587 wizard->recv_username_label = gtk_label_new(_("<span weight=\"bold\">Username:</span>"));
1588 gtk_misc_set_alignment(GTK_MISC(wizard->recv_username_label), 1, 0.5);
1589 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_username_label), TRUE);
1590 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_username_label, 0,1,2,3,
1591 GTK_FILL, 0, VSPACING_NARROW, 0);
1592 wizard->recv_username = gtk_entry_new();
1593 text = get_default_account(wizard);
1594 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
1596 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_username, 1,2,2,3,
1597 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1599 wizard->recv_password_label = gtk_label_new(_("Password:"));
1600 gtk_misc_set_alignment(GTK_MISC(wizard->recv_password_label), 1, 0.5);
1601 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_password_label, 0,1,3,4,
1602 GTK_FILL, 0, VSPACING_NARROW, 0);
1603 wizard->recv_password = gtk_entry_new();
1604 gtk_entry_set_text(GTK_ENTRY(wizard->recv_password), tmpl.recvpass?tmpl.recvpass:"");
1605 gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_password), FALSE);
1606 gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_password, 1,2,3,4,
1607 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1609 hildon_gtk_entry_set_input_mode(GTK_ENTRY(wizard->recv_password),
1610 HILDON_GTK_INPUT_MODE_FULL | HILDON_GTK_INPUT_MODE_INVISIBLE);
1614 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1615 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1616 wizard->recv_use_ssl = gtk_check_button_new_with_label(
1617 _("Use SSL to connect to receiving server"));
1618 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl),
1620 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_ssl, FALSE, FALSE, 0);
1622 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1623 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1624 hbox_spc = gtk_hbox_new (FALSE, 0);
1625 gtk_widget_set_size_request (hbox_spc, 12, -1);
1626 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1627 wizard->recv_use_tls = gtk_check_button_new_with_label(
1628 _("Use SSL via STARTTLS"));
1629 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls),
1631 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_tls, FALSE, FALSE, 0);
1632 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, wizard->recv_use_tls);
1634 recv_cert_table = gtk_table_new(3,3, FALSE);
1635 gtk_box_pack_start (GTK_BOX(vbox), recv_cert_table, FALSE, FALSE, 4);
1636 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1637 hbox_spc = gtk_hbox_new (FALSE, 0);
1638 gtk_widget_set_size_request (hbox_spc, 12, -1);
1639 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1640 label = gtk_label_new(_("Client SSL certificate (optional)"));
1641 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
1642 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1643 gtk_table_attach(GTK_TABLE(recv_cert_table), hbox, 0, 3, 0, 1, GTK_FILL, 0, 0, 0);
1644 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1645 hbox_spc = gtk_hbox_new (FALSE, 0);
1646 gtk_widget_set_size_request (hbox_spc, 12, -1);
1647 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1648 label = gtk_label_new(_("File"));
1649 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1650 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1651 gtk_table_attach(GTK_TABLE(recv_cert_table), hbox, 0, 1, 1, 2,
1652 GTK_FILL, 0, VSPACING_NARROW, 0);
1653 wizard->recv_ssl_cert_file = gtk_entry_new();
1654 gtk_entry_set_text(GTK_ENTRY(wizard->recv_ssl_cert_file), tmpl.recvssl_cert?tmpl.recvssl_cert:"");
1655 gtk_table_attach(GTK_TABLE(recv_cert_table), wizard->recv_ssl_cert_file, 1, 2, 1, 2, GTK_FILL, 0, 0, 0);
1656 button = gtkut_get_browse_file_btn(_("Browse"));
1657 gtk_table_attach(GTK_TABLE(recv_cert_table), button, 2, 3, 1, 2,
1658 GTK_FILL, 0, VSPACING_NARROW, 0);
1659 g_signal_connect(G_OBJECT(button), "clicked",
1660 G_CALLBACK(cert_browse_cb), wizard->recv_ssl_cert_file);
1662 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1663 hbox_spc = gtk_hbox_new (FALSE, 0);
1664 gtk_widget_set_size_request (hbox_spc, 12, -1);
1665 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1666 label = gtk_label_new(_("Password"));
1667 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
1668 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
1669 gtk_table_attach(GTK_TABLE(recv_cert_table), hbox, 0, 1, 2, 3,
1670 GTK_FILL, 0, VSPACING_NARROW, 0);
1671 wizard->recv_ssl_cert_pass = gtk_entry_new();
1672 gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_ssl_cert_pass), FALSE);
1673 gtk_entry_set_text(GTK_ENTRY(wizard->recv_ssl_cert_pass), tmpl.recvssl_cert_pass?tmpl.recvssl_cert_pass:"");
1674 gtk_table_attach(GTK_TABLE(recv_cert_table), wizard->recv_ssl_cert_pass, 1, 2, 2, 3, GTK_FILL, 0, 0, 0);
1675 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, recv_cert_table);
1676 wizard->recv_cert_table = recv_cert_table;
1678 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1679 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1680 wizard->recv_imap_subdir = gtk_entry_new();
1681 gtk_entry_set_text(GTK_ENTRY(wizard->recv_imap_subdir), tmpl.imapdir?tmpl.imapdir:"");
1682 wizard->recv_imap_label = gtk_label_new(_("IMAP server directory:"));
1683 gtk_misc_set_alignment(GTK_MISC(wizard->recv_imap_label), 1, 0.5);
1684 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_label, FALSE, FALSE, 0);
1685 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_subdir, TRUE, TRUE, 0);
1687 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1688 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1689 hbox_spc = gtk_hbox_new (FALSE, 0);
1690 gtk_widget_set_size_request (hbox_spc, 12, -1);
1691 gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1692 wizard->subsonly_checkbtn = gtk_check_button_new_with_label(
1693 _("Show only subscribed folders"));
1694 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn),
1696 gtk_box_pack_start(GTK_BOX(hbox), wizard->subsonly_checkbtn, FALSE, FALSE, 0);
1698 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1699 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1700 wizard->no_imap_warning = gtk_label_new(_(
1701 "<span weight=\"bold\">Warning: this version of Claws Mail\n"
1702 "has been built without IMAP support.</span>"));
1703 gtk_label_set_use_markup(GTK_LABEL(wizard->no_imap_warning), TRUE);
1704 gtk_box_pack_start(GTK_BOX(hbox), wizard->no_imap_warning, FALSE, FALSE, 0);
1710 wizard_response_cb (GtkDialog * dialog, int response, gpointer data)
1712 WizardWindow * wizard = (WizardWindow *)data;
1713 int current_page, num_pages;
1714 gboolean skip_mailbox_page = FALSE;
1716 gint protocol = combobox_get_active_data(GTK_COMBO_BOX(wizard->recv_type));
1718 if (protocol == A_IMAP4) {
1719 skip_mailbox_page = TRUE;
1723 num_pages = g_slist_length(wizard->pages);
1725 current_page = gtk_notebook_get_current_page (
1726 GTK_NOTEBOOK(wizard->notebook));
1727 if (response == CANCEL)
1729 wizard->result = FALSE;
1730 wizard->finished = TRUE;
1731 gtk_widget_destroy (GTK_WIDGET(dialog));
1733 else if (response == FINISHED)
1735 if (!wizard_write_config(wizard)) {
1736 current_page = gtk_notebook_get_current_page (
1737 GTK_NOTEBOOK(wizard->notebook));
1740 wizard->result = TRUE;
1741 wizard->finished = TRUE;
1742 gtk_widget_destroy (GTK_WIDGET(dialog));
1746 if (response == GO_BACK)
1748 if (current_page > 0) {
1750 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1754 gtk_notebook_set_current_page (
1755 GTK_NOTEBOOK(wizard->notebook),
1759 else if (response == GO_FORWARD)
1761 if (current_page < (num_pages-1)) {
1763 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1767 gtk_notebook_set_current_page (
1768 GTK_NOTEBOOK(wizard->notebook),
1773 gtk_dialog_set_response_sensitive (dialog, GO_BACK,
1775 gtk_dialog_set_response_sensitive (dialog, GO_FORWARD,
1776 current_page < (num_pages - 1));
1777 if (current_page == (num_pages -1)) {
1778 gtk_dialog_set_response_sensitive (dialog, FINISHED, TRUE);
1779 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), FINISHED);
1781 gtk_dialog_set_response_sensitive (dialog, FINISHED, FALSE);
1782 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), GO_FORWARD);
1788 static gint wizard_close_cb(GtkWidget *widget, GdkEventAny *event,
1791 WizardWindow *wizard = (WizardWindow *)data;
1792 wizard->result = FALSE;
1793 wizard->finished = TRUE;
1798 #define PACK_WARNING(text) { \
1799 label = gtk_label_new(text); \
1800 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); \
1801 gtk_box_pack_end(GTK_BOX(widget), label, FALSE, FALSE, 0); \
1804 gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) {
1805 WizardWindow *wizard = g_new0(WizardWindow, 1);
1809 GtkWidget *scrolled_window;
1814 wizard->mainwin = mainwin;
1815 wizard->create_mailbox = create_mailbox;
1817 gtk_widget_hide(mainwin->window);
1819 wizard_read_defaults();
1821 wizard->window = gtk_dialog_new_with_buttons (_("Claws Mail Setup Wizard"),
1823 GTK_STOCK_GO_BACK, GO_BACK,
1824 GTK_STOCK_GO_FORWARD, GO_FORWARD,
1825 GTK_STOCK_SAVE, FINISHED,
1826 GTK_STOCK_CANCEL, CANCEL,
1828 gtk_widget_set_size_request(wizard->window, -1, 480);
1829 gtk_window_set_position(GTK_WINDOW(wizard->window), GTK_WIN_POS_CENTER);
1831 g_signal_connect(wizard->window, "response",
1832 G_CALLBACK(wizard_response_cb), wizard);
1833 gtk_widget_realize(wizard->window);
1834 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window),
1836 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1838 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1840 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1842 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1845 wizard->notebook = gtk_notebook_new();
1846 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(wizard->notebook), FALSE);
1847 gtk_notebook_set_show_border(GTK_NOTEBOOK(wizard->notebook), FALSE);
1848 gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(wizard->window))),
1849 wizard->notebook, TRUE, TRUE, 0);
1851 wizard->pages = NULL;
1853 /*welcome page: 0 */
1855 page = create_page(wizard, _("Welcome to Claws Mail"));
1857 wizard->pages = g_slist_append(wizard->pages, page);
1858 widget = stock_pixmap_widget(wizard->window,
1859 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1861 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1863 text = g_strdup(_("Welcome to the Claws Mail setup wizard.\n\n"
1864 "We will begin by defining some basic "
1865 "information about you and your most common "
1866 "mail options so that you can start to use "
1867 "Claws Mail in less than five minutes."));
1868 widget = gtk_label_new(text);
1869 gtk_label_set_line_wrap(GTK_LABEL(widget), TRUE);
1871 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1873 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1874 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1875 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1876 gtk_box_pack_start(GTK_BOX(page), scrolled_window, TRUE, TRUE, 0);
1878 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1886 widget = create_page (wizard, _("About You"));
1887 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1888 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1889 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1890 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1892 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1894 PACK_WARNING(_("Bold fields must be completed"));
1896 wizard->pages = g_slist_append(wizard->pages, widget);
1898 /* recv+auth page: 2 */
1901 widget = create_page (wizard, _("Receiving mail"));
1902 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1903 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1904 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1905 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1907 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1909 PACK_WARNING(_("Bold fields must be completed"));
1911 wizard->pages = g_slist_append(wizard->pages, widget);
1916 widget = create_page (wizard, _("Sending mail"));
1917 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1918 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1919 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1920 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1922 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1924 PACK_WARNING(_("Bold fields must be completed"));
1926 wizard->pages = g_slist_append(wizard->pages, widget);
1928 /* mailbox page: 4 */
1929 if (create_mailbox) {
1932 widget = create_page (wizard, _("Saving mail on disk"));
1933 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1934 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1935 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1936 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1938 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1939 mailbox_page(wizard));
1940 PACK_WARNING(_("Bold fields must be completed"));
1942 wizard->pages = g_slist_append(wizard->pages, widget);
1948 page = create_page(wizard, _("Configuration finished"));
1950 wizard->pages = g_slist_append(wizard->pages, page);
1951 widget = stock_pixmap_widget(wizard->window,
1952 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1954 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1956 text = g_strdup(_("Claws Mail is now ready.\n"
1957 "Click Save to start."));
1958 widget = gtk_label_new(text);
1959 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1963 for (cur = wizard->pages; cur && cur->data; cur = cur->next) {
1964 gtk_notebook_append_page (GTK_NOTEBOOK(wizard->notebook),
1965 GTK_WIDGET(cur->data), NULL);
1968 g_signal_connect(G_OBJECT(wizard->window), "delete_event",
1969 G_CALLBACK(wizard_close_cb), wizard);
1970 gtk_widget_show_all (wizard->window);
1972 gtk_widget_hide(wizard->recv_imap_label);
1973 gtk_widget_hide(wizard->recv_imap_subdir);
1974 gtk_widget_hide(wizard->subsonly_checkbtn);
1976 wizard_protocol_change(wizard, tmpl.recvtype);
1978 while (!wizard->finished)
1979 gtk_main_iteration();
1981 result = wizard->result;
1985 gtk_widget_show(mainwin->window);