2 * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2007 Colin Leroy <colin@colino.net>
4 * and the Claws Mail team
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
28 #include <glib/gi18n.h>
29 #include <gdk/gdkkeysyms.h>
30 #include <gtk/gtkwidget.h>
31 #include <gtk/gtkvbox.h>
32 #include <gtk/gtkbox.h>
33 #include <gtk/gtktable.h>
34 #include <gtk/gtkentry.h>
35 #include <gtk/gtklabel.h>
36 #include <gtk/gtknotebook.h>
37 #include <gtk/gtktogglebutton.h>
38 #include <gtk/gtkcheckbutton.h>
54 #include "prefs_account.h"
55 #include "mainwindow.h"
56 #include "stock_pixmap.h"
59 #include "alertpanel.h"
63 #include "prefs_common.h"
66 #include <libgnomevfs/gnome-vfs-volume.h>
67 #include <libgnomevfs/gnome-vfs-volume-monitor.h>
68 #include <libgnomevfs/gnome-vfs-utils.h>
79 int WELCOME_PAGE = -1;
83 int MAILBOX_PAGE = -1;
96 GtkWidget *organization;
98 GtkWidget *mailbox_name;
99 GtkWidget *mailbox_label;
101 GtkWidget *smtp_server;
102 GtkWidget *smtp_auth;
103 GtkWidget *smtp_username;
104 GtkWidget *smtp_password;
105 GtkWidget *smtp_username_label;
106 GtkWidget *smtp_password_label;
108 GtkWidget *recv_type;
109 GtkWidget *recv_label;
110 GtkWidget *recv_server;
111 GtkWidget *recv_username;
112 GtkWidget *recv_password;
113 GtkWidget *recv_username_label;
114 GtkWidget *recv_password_label;
115 GtkWidget *recv_imap_label;
116 GtkWidget *recv_imap_subdir;
117 GtkWidget *subsonly_checkbtn;
118 GtkWidget *no_imap_warning;
120 GtkWidget *smtp_use_ssl;
121 GtkWidget *recv_use_ssl;
122 GtkWidget *smtp_use_tls;
123 GtkWidget *recv_use_tls;
127 GtkWidget *data_root_nokia_radiobtn;
128 GtkWidget *data_root_mmc1_radiobtn;
129 GtkWidget *data_root_mmc2_radiobtn;
130 GnomeVFSVolumeMonitor *volmon;
131 gulong volmon_mount_sigid;
132 gulong volmon_unmount_sigid;
133 GnomeVFSVolume *vol_mmc1;
134 GnomeVFSVolume *vol_mmc2;
136 gboolean create_mailbox;
142 typedef struct _AccountTemplate {
151 RecvProtocol recvtype;
163 static AccountTemplate tmpl;
165 static PrefParam template_params[] = {
166 {"name", "$USERNAME",
167 &tmpl.name, P_STRING, NULL, NULL, NULL},
168 {"domain", "$DEFAULTDOMAIN",
169 &tmpl.domain, P_STRING, NULL, NULL, NULL},
170 {"email", "$NAME_MAIL@$DOMAIN",
171 &tmpl.email, P_STRING, NULL, NULL, NULL},
173 &tmpl.organization, P_STRING, NULL, NULL, NULL},
174 {"smtpserver", "smtp.$DOMAIN",
175 &tmpl.smtpserver, P_STRING, NULL, NULL, NULL},
176 {"smtpauth", "FALSE",
177 &tmpl.smtpauth, P_BOOL, NULL, NULL, NULL},
179 &tmpl.smtpuser, P_STRING, NULL, NULL, NULL},
181 &tmpl.smtppass, P_STRING, NULL, NULL, NULL},
183 &tmpl.recvtype, P_INT, NULL, NULL, NULL},
184 {"recvserver", "pop.$DOMAIN",
185 &tmpl.recvserver, P_STRING, NULL, NULL, NULL},
186 {"recvuser", "$LOGIN",
187 &tmpl.recvuser, P_STRING, NULL, NULL, NULL},
189 &tmpl.recvpass, P_STRING, NULL, NULL, NULL},
191 &tmpl.imapdir, P_STRING, NULL, NULL, NULL},
193 &tmpl.subsonly, P_BOOL, NULL, NULL, NULL},
194 {"mboxfile", "/var/mail/$LOGIN",
195 &tmpl.mboxfile, P_STRING, NULL, NULL, NULL},
197 &tmpl.mailbox, P_STRING, NULL, NULL, NULL},
199 &tmpl.smtpssl, P_INT, NULL, NULL, NULL},
201 &tmpl.recvssl, P_INT, NULL, NULL, NULL},
202 {NULL, NULL, NULL, P_INT, NULL, NULL, NULL}
206 static gchar *accountrc_tmpl =
207 "[AccountTemplate]\n"
208 "#you can use $DEFAULTDOMAIN here\n"
209 "#domain must be defined before the variables that use it\n"
210 "#by default, domain is extracted from the hostname\n"
213 "#you can use $USERNAME for name (this is the default)\n"
216 "#you can use $LOGIN, $NAME_MAIL and $DOMAIN here \n"
217 "#$NAME_MAIL is the name without uppercase and with dots instead\n"
219 "#the default is $NAME_MAIL@$DOMAIN\n"
222 "#you can use $DOMAIN here\n"
223 "#the default organization is empty\n"
226 "#you can use $DOMAIN here \n"
227 "#the default is stmp.$DOMAIN\n"
230 "#Whether to use smtp authentication\n"
231 "#the default is 0 (no)\n"
235 "#you can use $LOGIN, $NAME_MAIL, $DOMAIN or $EMAIL here\n"
236 "#the default is empty (same as reception username)\n"
240 "#the default is empty (same as reception password)\n"
243 "#recvtype can be:\n"
246 "#5 for a local mbox file\n"
249 "#you can use $DOMAIN here \n"
250 "#the default is {pop,imap}.$DOMAIN\n"
253 "#you can use $LOGIN, $NAME_MAIL, $DOMAIN or $EMAIL here\n"
254 "#default is $LOGIN\n"
257 "#default is empty\n"
260 "#imap dir if imap (relative to the home on the server)\n"
261 "#default is empty\n"
264 "#show subscribed folders only, if imap\n"
268 "#mbox file if local\n"
269 "#you can use $LOGIN here\n"
270 "#default is /var/mail/$LOGIN\n"
273 "#mailbox name if pop3 or local\n"
274 "#relative path from the user's home\n"
275 "#default is \"Mail\"\n"
278 "#whether to use ssl on STMP connections\n"
279 "#default is 0, 1 is ssl, 2 is starttls\n"
282 "#whether to use ssl on pop or imap connections\n"
283 "#default is 0, 1 is ssl, 2 is starttls\n"
286 static gchar *wizard_get_default_domain_name(void)
288 static gchar *domain_name = NULL;
290 if (domain_name == NULL) {
291 domain_name = g_strdup(get_domain_name());
292 if (strchr(domain_name, '.') != strrchr(domain_name, '.')
293 && strlen(strchr(domain_name, '.')) > 6) {
294 gchar *tmp = g_strdup(strchr(domain_name, '.')+1);
302 static gchar *get_name_for_mail(void)
304 gchar *name = g_strdup(tmpl.name);
308 while(strstr(name, " "))
309 *strstr(name, " ")='.';
314 #define PARSE_DEFAULT(str) { \
315 gchar *tmp = NULL, *new = NULL; \
317 tmp = g_strdup(str); \
318 if (strstr(str, "$USERNAME")) { \
319 tmp = g_strdup(str); \
320 *strstr(tmp, "$USERNAME") = '\0'; \
321 new = g_strconcat(tmp, g_get_real_name(), \
322 strstr(str, "$USERNAME")+strlen("$USERNAME"), \
329 if (strstr(str, "$LOGIN")) { \
330 tmp = g_strdup(str); \
331 *strstr(tmp, "$LOGIN") = '\0'; \
332 new = g_strconcat(tmp, g_get_user_name(), \
333 strstr(str, "$LOGIN")+strlen("$LOGIN"), \
340 if (strstr(str, "$EMAIL")) { \
341 tmp = g_strdup(str); \
342 *strstr(tmp, "$EMAIL") = '\0'; \
343 new = g_strconcat(tmp, tmpl.email, \
344 strstr(str, "$EMAIL")+strlen("$EMAIL"), \
351 if (strstr(str, "$NAME_MAIL")) { \
352 tmp = g_strdup(str); \
353 *strstr(tmp, "$NAME_MAIL") = '\0'; \
354 new = g_strconcat(tmp, get_name_for_mail(), \
355 strstr(str, "$NAME_MAIL")+strlen("$NAME_MAIL"), \
362 if (strstr(str, "$DEFAULTDOMAIN")) { \
363 tmp = g_strdup(str); \
364 *strstr(tmp, "$DEFAULTDOMAIN") = '\0'; \
365 new = g_strconcat(tmp, wizard_get_default_domain_name(), \
366 strstr(str, "$DEFAULTDOMAIN")+strlen("$DEFAULTDOMAIN"), \
373 if (strstr(str, "$DOMAIN")) { \
374 tmp = g_strdup(str); \
375 *strstr(tmp, "$DOMAIN") = '\0'; \
376 new = g_strconcat(tmp, tmpl.domain, \
377 strstr(str, "$DOMAIN")+strlen("$DOMAIN"), \
386 static void wizard_read_defaults(void)
390 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, "accountrc.tmpl", NULL);
391 if (!is_file_exist(rcpath)) {
392 str_write_to_file(accountrc_tmpl, rcpath);
395 prefs_read_config(template_params, "AccountTemplate", rcpath, NULL);
397 PARSE_DEFAULT(tmpl.domain);
398 PARSE_DEFAULT(tmpl.name);
399 PARSE_DEFAULT(tmpl.email);
400 PARSE_DEFAULT(tmpl.organization);
401 PARSE_DEFAULT(tmpl.smtpserver);
402 PARSE_DEFAULT(tmpl.smtpuser);
403 PARSE_DEFAULT(tmpl.smtppass);
404 PARSE_DEFAULT(tmpl.recvserver);
405 PARSE_DEFAULT(tmpl.recvuser);
406 PARSE_DEFAULT(tmpl.recvpass);
407 PARSE_DEFAULT(tmpl.imapdir);
408 PARSE_DEFAULT(tmpl.mboxfile);
409 PARSE_DEFAULT(tmpl.mailbox);
412 "%s, %s, %s, %s, %s, %d, %s, %s, %s, %s, %s, %s, %d, %d\n",
413 tmpl.name,tmpl.domain,tmpl.email,tmpl.organization,tmpl.smtpserver,
414 tmpl.recvtype,tmpl.recvserver,tmpl.recvuser,tmpl.recvpass,
415 tmpl.imapdir,tmpl.mboxfile,tmpl.mailbox,tmpl.smtpssl,tmpl.recvssl);
420 static void initialize_fonts(WizardWindow *wizard)
422 GtkWidget *widget = wizard->email;
423 gint size = pango_font_description_get_size(
424 widget->style->font_desc)
428 tmp = g_strdup(prefs_common.textfont);
429 if (strrchr(tmp, ' ')) {
430 *(strrchr(tmp, ' ')) = '\0';
431 new = g_strdup_printf("%s %d", tmp, size);
432 g_free(prefs_common.textfont);
433 prefs_common.textfont = new;
437 tmp = g_strdup(prefs_common.smallfont);
438 if (strrchr(tmp, ' ')) {
439 *(strrchr(tmp, ' ')) = '\0';
440 new = g_strdup_printf("%s %d", tmp, size);
441 g_free(prefs_common.smallfont);
442 prefs_common.smallfont = new;
446 tmp = g_strdup(prefs_common.normalfont);
447 if (strrchr(tmp, ' ')) {
448 *(strrchr(tmp, ' ')) = '\0';
449 new = g_strdup_printf("%s %d", tmp, size);
450 g_free(prefs_common.normalfont);
451 prefs_common.normalfont = new;
456 #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"
457 #define FACE "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAM1BMVEUAAAAcJCI\n\
458 ONl1JUi0+Z4daY2NZciPabV9ykS5kj6Wsl2ybmZOBsMjZxK2wzN3Pzczs7OsCAGN0AAAAAXRSTlM\n\
459 AQObYZgAAAAFiS0dEAIgFHUgAAAIVSURBVEjH1ZbtlqMgDIaFECoGhPu/2s0b0Lais/NzN6d1OJ7\n\
460 3yReQzrL8B5Zy3rvl9At52Pf2tv1vSMjtYj8jaa8XUyI/yn3YD6sigj/2Tf5Bn069MIsTPHvx/t5\n\
461 /3rU/6JCIY3YwGe26r/cwUfE3cFe5T28L0K5rJAUHEeYAQxs8DHojjk3M9wECU4xxjXisI8RA0gy\n\
462 oczJZJOjxiTFZVTchAnIRJrgdmEGDyFfAI3UuG5FmYTkR9RDrIC4H0SqV4pzpEcUp0HNLjwBv+jA\n\
463 dikUE5g9iBvzmu3sH2oDk4lnHd829+2Q9gj6kDqDPg7hsGwBzH02fE3ZCt6ZHmlNKIMjMeRwra5I\n\
464 ecgNoBnLGPmzaHPJIwLY8Sq2M/tLUJfj0QcqmfVXAdLSStIYF8dzWjBBb2VgvDa4mO9oc651OiUo\n\
465 BEKbZokdPATF9E9oKAjQJcJOniaPXrVZRAnVWaqIyqRoNC8ZJvgCcW8XN39RqxVP1rS8Yd4WnCdN\n\
466 aRTo2jJRDbg3vtCpEUGffgDPhqKDaSuVqYtOplFIvIcx3HUI5/MuIWl6vKyBjNlqEru8hbFXqBPA\n\
467 5TpHGIUZOePeaIyzfQ/g9Xg0opU1AvdfXM9floYhv92pPAE96OZtkPV8eivgQi9RTfwPUU36I26n\n\
468 Hy+WuCJzAT7efMSeA1TNf2/VugDz+dN139xfA5ffxGZDD+MvcP/uvyB80wzZ76wbz8gAAAABJRU5\n\
471 static void write_welcome_email(WizardWindow *wizard)
477 const gchar *mailbox = gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name));
478 Folder *folder = folder_find_from_path(mailbox);
479 FolderItem *inbox = folder ? folder->inbox:NULL;
480 gchar *file = get_tmp_file();
481 gchar enc_from_name[BUFFSIZE], enc_to_name[BUFFSIZE], enc_subject[BUFFSIZE];
483 get_rfc822_date(buf_date, sizeof(buf_date));
485 conv_encode_header_full(enc_subject, sizeof(enc_subject),
486 Q_("Welcome Mail Subject|Welcome to Claws Mail"),
487 strlen("Subject: "), FALSE, CS_INTERNAL);
488 conv_encode_header_full(enc_to_name, sizeof(enc_to_name),
489 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)),
490 strlen("To: "), TRUE, CS_INTERNAL);
491 conv_encode_header_full(enc_from_name, sizeof(enc_from_name),
492 _("The Claws Mail Team"),
493 strlen("From: "), TRUE, CS_INTERNAL);
495 head = g_strdup_printf(
502 "Content-Type: text/plain; charset=UTF-8\n",
506 gtk_entry_get_text(GTK_ENTRY(wizard->email)),
507 buf_date, enc_subject, XFACE, FACE);
508 body = g_strdup_printf(
510 "Welcome to Claws Mail\n"
511 "---------------------\n"
513 "Now that you have set up your account you can fetch your\n"
514 "mail by clicking the 'Get Mail' button at the left of the\n"
517 "Claws Mail has lots of extra features accessible via plugins,\n"
518 "like anti-spam filtering and learning (via the Bogofilter or\n"
519 "SpamAssassin plugins), privacy protection (via PGP/Mime), an RSS\n"
520 "aggregator, a calendar, and much more. You can load them from\n"
521 "the menu entry '/Configuration/Plugins'.\n"
523 "You can change your Account Preferences by using the menu\n"
524 "entry '/Configuration/Preferences for current account'\n"
525 "and change the general Preferences by using\n"
526 "'/Configuration/Preferences'.\n"
528 "You can find further information in the Claws Mail manual,\n"
529 "which can be accessed by using the menu entry '/Help/Manual'\n"
530 "or online at the URL given below.\n"
538 "Mailing Lists: <%s>\n"
542 "Claws Mail is free software, released under the terms\n"
543 "of the GNU General Public License, version 3 or later, as\n"
544 "published by the Free Software Foundation, 51 Franklin Street,\n"
545 "Fifth Floor, Boston, MA 02110-1301, USA. The license can be\n"
550 "If you wish to donate to the Claws Mail project you can do\n"
552 HOMEPAGE_URI, MANUAL_URI, FAQ_URI, THEMES_URI, MAILING_LIST_URI,
553 GPL_URI, DONATE_URI);
555 msg = g_strconcat(head, body, NULL);
557 if (inbox && inbox->total_msgs == 0
558 && str_write_to_file(msg, file) >= 0) {
559 MsgFlags flags = { MSG_UNREAD|MSG_NEW, 0};
560 folder_item_add_msg(inbox, file, &flags, FALSE);
569 static gboolean wizard_write_config(WizardWindow *wizard)
571 static gboolean mailbox_ok = FALSE;
572 PrefsAccount *prefs_account = prefs_account_new();
573 GList *account_list = NULL;
574 GtkWidget *menu, *menuitem;
575 gchar *smtp_server, *recv_server;
577 gint smtp_port, recv_port;
579 SSLType smtp_ssl_type, recv_ssl_type;
582 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(wizard->recv_type));
583 menuitem = gtk_menu_get_active(GTK_MENU(menu));
584 prefs_account->protocol = GPOINTER_TO_INT
585 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
588 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4 &&
589 !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)))) {
590 alertpanel_error(_("Please enter the mailbox name."));
591 g_free(prefs_account);
592 gtk_notebook_set_current_page (
593 GTK_NOTEBOOK(wizard->notebook),
599 g_free(prefs_common.data_root);
600 if (gtk_toggle_button_get_active(
601 GTK_TOGGLE_BUTTON(wizard->data_root_nokia_radiobtn)))
602 prefs_common.data_root = NULL;
603 else if (gtk_toggle_button_get_active(
604 GTK_TOGGLE_BUTTON(wizard->data_root_mmc1_radiobtn)))
605 prefs_common.data_root = g_strdup(MMC1_PATH);
606 else if (gtk_toggle_button_get_active(
607 GTK_TOGGLE_BUTTON(wizard->data_root_mmc2_radiobtn)))
608 prefs_common.data_root = g_strdup(MMC2_PATH);
609 if (wizard->volmon_mount_sigid)
610 g_signal_handler_disconnect(
611 G_OBJECT(wizard->volmon),
612 wizard->volmon_mount_sigid);
613 if (wizard->volmon_unmount_sigid)
614 g_signal_handler_disconnect(
615 G_OBJECT(wizard->volmon),
616 wizard->volmon_unmount_sigid);
620 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
621 mailbox_ok = setup_write_mailbox_path(wizard->mainwin,
623 GTK_ENTRY(wizard->mailbox_name)));
629 /* alertpanel done by setup_write_mailbox_path */
630 g_free(prefs_account);
631 gtk_notebook_set_current_page (
632 GTK_NOTEBOOK(wizard->notebook),
637 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->full_name)))
638 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->email)))) {
639 alertpanel_error(_("Please enter your name and email address."));
640 g_free(prefs_account);
641 gtk_notebook_set_current_page (
642 GTK_NOTEBOOK(wizard->notebook),
647 if (prefs_account->protocol != A_LOCAL) {
648 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)))
649 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
650 alertpanel_error(_("Please enter your receiving server "
652 g_free(prefs_account);
653 gtk_notebook_set_current_page (
654 GTK_NOTEBOOK(wizard->notebook),
659 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
660 alertpanel_error(_("Please enter your username."));
661 g_free(prefs_account);
662 gtk_notebook_set_current_page (
663 GTK_NOTEBOOK(wizard->notebook),
669 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)))) {
670 alertpanel_error(_("Please enter your SMTP server."));
671 g_free(prefs_account);
672 gtk_notebook_set_current_page (
673 GTK_NOTEBOOK(wizard->notebook),
678 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
679 if (prefs_account->protocol == A_LOCAL
680 && !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)))) {
681 alertpanel_error(_("Please enter your SMTP username."));
682 g_free(prefs_account);
683 gtk_notebook_set_current_page (
684 GTK_NOTEBOOK(wizard->notebook),
687 } /* if it's not local we'll use the reception server */
690 if (prefs_account->protocol != A_LOCAL)
691 prefs_account->account_name = g_strdup_printf("%s@%s",
692 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)),
693 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
695 prefs_account->account_name = g_strdup_printf("%s",
696 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
698 recv_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
699 smtp_server = g_strdup(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)));
701 if (prefs_account->protocol != A_LOCAL && strstr(recv_server, ":")) {
702 recv_port = atoi(strstr(recv_server, ":")+1);
703 *(strstr(recv_server, ":")) = '\0';
704 if (prefs_account->protocol == A_IMAP4) {
705 prefs_account->set_imapport = TRUE;
706 prefs_account->imapport = recv_port;
707 } else if (prefs_account->protocol == A_POP3) {
708 prefs_account->set_popport = TRUE;
709 prefs_account->popport = recv_port;
712 if (strstr(smtp_server, ":")) {
713 smtp_port = atoi(strstr(smtp_server, ":")+1);
714 *(strstr(smtp_server, ":")) = '\0';
715 prefs_account->set_smtpport = TRUE;
716 prefs_account->smtpport = smtp_port;
719 prefs_account->name = g_strdup(
720 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)));
721 prefs_account->address = g_strdup(
722 gtk_entry_get_text(GTK_ENTRY(wizard->email)));
723 prefs_account->organization = g_strdup(
724 gtk_entry_get_text(GTK_ENTRY(wizard->organization)));
725 prefs_account->smtp_server = g_strdup(smtp_server);
727 tmp = g_path_get_basename(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)));
728 prefs_account->inbox = g_strdup_printf("#mh/%s/inbox",
729 (!strcmp("Mail", gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name))))
732 prefs_account->local_inbox = g_strdup(prefs_account->inbox);
734 if (prefs_account->protocol != A_LOCAL)
735 prefs_account->recv_server = g_strdup(recv_server);
737 prefs_account->local_mbox = g_strdup(recv_server);
742 prefs_account->userid = g_strdup(
743 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)));
744 prefs_account->passwd = g_strdup(
745 gtk_entry_get_text(GTK_ENTRY(wizard->recv_password)));
747 prefs_account->smtp_userid = g_strdup(
748 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_username)));
749 prefs_account->smtp_passwd = g_strdup(
750 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_password)));
751 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth))) {
752 prefs_account->use_smtp_auth = TRUE;
756 smtp_ssl_type = SSL_NONE;
757 recv_ssl_type = SSL_NONE;
759 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl))) {
760 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls)))
761 smtp_ssl_type = SSL_STARTTLS;
763 smtp_ssl_type = SSL_TUNNEL;
765 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl))) {
766 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls)))
767 recv_ssl_type = SSL_STARTTLS;
769 recv_ssl_type = SSL_TUNNEL;
772 prefs_account->ssl_smtp = smtp_ssl_type;
774 if (prefs_account->protocol == A_IMAP4)
775 prefs_account->ssl_imap = recv_ssl_type;
777 prefs_account->ssl_pop = recv_ssl_type;
780 if (prefs_account->protocol == A_IMAP4) {
781 gchar *directory = gtk_editable_get_chars(
782 GTK_EDITABLE(wizard->recv_imap_subdir), 0, -1);
783 if (directory && strlen(directory)) {
784 prefs_account->imap_dir = g_strdup(directory);
786 prefs_account->imap_subsonly =
787 gtk_toggle_button_get_active(
788 GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn));
792 account_list = g_list_append(account_list, prefs_account);
793 prefs_account_write_config_all(account_list);
794 prefs_account_free(prefs_account);
795 account_read_config_all();
797 initialize_fonts(wizard);
798 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4)
799 write_welcome_email(wizard);
802 plugin_load_standard_plugins();
807 static GtkWidget* create_page (WizardWindow *wizard, const char * title)
815 vbox = gtk_vbox_new (FALSE, 6);
816 gtk_container_set_border_width (GTK_CONTAINER(vbox), 10);
818 /* create the titlebar */
819 hbox = gtk_hbox_new (FALSE, 12);
820 image = stock_pixmap_widget(wizard->window,
821 STOCK_PIXMAP_CLAWS_MAIL_ICON);
822 gtk_box_pack_start (GTK_BOX(hbox), image, FALSE, FALSE, 0);
823 title_string = g_strconcat ("<span size=\"xx-large\" weight=\"ultrabold\">", title ? title : "", "</span>", NULL);
824 w = gtk_label_new (title_string);
825 gtk_label_set_use_markup (GTK_LABEL(w), TRUE);
826 g_free (title_string);
827 gtk_box_pack_start (GTK_BOX(hbox), w, FALSE, FALSE, 0);
829 /* pack the titlebar */
830 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
832 /* pack the separator */
833 gtk_box_pack_start (GTK_BOX(vbox), gtk_hseparator_new(), FALSE, FALSE, 0);
836 w = gtk_alignment_new (0, 0, 0, 0);
837 gtk_widget_set_size_request (w, 0, 6);
838 gtk_box_pack_start (GTK_BOX(vbox), w, FALSE, FALSE, 0);
843 #define PACK_BOX(hbox,text,entry) { \
844 GtkWidget *label = gtk_label_new(text); \
845 gtk_label_set_use_markup(GTK_LABEL(label), TRUE); \
846 if (GTK_IS_MISC(label)) \
847 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); \
848 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); \
849 gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); \
852 static gchar *get_default_server(WizardWindow * wizard, const gchar *type)
854 if (!strcmp(type, "smtp")) {
855 if (!tmpl.smtpserver || !strlen(tmpl.smtpserver))
856 return g_strconcat(type, ".", tmpl.domain, NULL);
858 return g_strdup(tmpl.smtpserver);
860 if (!tmpl.recvserver || !strlen(tmpl.recvserver))
861 return g_strconcat(type, ".", tmpl.domain, NULL);
863 return g_strdup(tmpl.recvserver);
867 static gchar *get_default_account(WizardWindow * wizard)
869 gchar *result = NULL;
871 if (!tmpl.recvuser || !strlen(tmpl.recvuser)) {
872 result = gtk_editable_get_chars(
873 GTK_EDITABLE(wizard->email), 0, -1);
875 if (strstr(result, "@")) {
876 *(strstr(result,"@")) = '\0';
879 result = g_strdup(tmpl.recvuser);
884 static gchar *get_default_smtp_account(WizardWindow * wizard)
886 gchar *result = NULL;
888 if (!tmpl.smtpuser || !strlen(tmpl.smtpuser)) {
891 result = g_strdup(tmpl.smtpuser);
896 static void wizard_email_changed(GtkWidget *widget, gpointer data)
898 WizardWindow *wizard = (WizardWindow *)data;
899 RecvProtocol protocol;
901 protocol = GPOINTER_TO_INT
902 (g_object_get_data(G_OBJECT(wizard->recv_type), MENU_VAL_ID));
904 text = get_default_server(wizard, "smtp");
905 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
908 text = get_default_account(wizard);
909 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
912 if (protocol == A_POP3) {
913 text = get_default_server(wizard, "pop");
914 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
916 } else if (protocol == A_IMAP4) {
917 text = get_default_server(wizard, "imap");
918 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
920 } else if (protocol == A_LOCAL) {
921 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
926 static GtkWidget* user_page (WizardWindow * wizard)
928 GtkWidget *table = gtk_table_new(1,1, FALSE);
932 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
933 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
935 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
936 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
938 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
939 GTK_EXPAND|GTK_FILL, 0, 0, 0);
941 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
942 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
943 wizard->full_name = gtk_entry_new();
944 gtk_entry_set_text(GTK_ENTRY(wizard->full_name), tmpl.name?tmpl.name:"");
945 PACK_BOX(hbox, _("<span weight=\"bold\">Your name:</span>"),
948 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
949 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
950 wizard->email = gtk_entry_new();
951 gtk_entry_set_text(GTK_ENTRY(wizard->email), tmpl.email?tmpl.email:"");
952 PACK_BOX(hbox, _("<span weight=\"bold\">Your email address:</span>"),
955 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
956 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
957 wizard->organization = gtk_entry_new();
958 gtk_entry_set_text(GTK_ENTRY(wizard->organization), tmpl.organization?tmpl.organization:"");
959 PACK_BOX(hbox, _("Your organization:"), wizard->organization);
961 g_signal_connect(G_OBJECT(wizard->email), "changed",
962 G_CALLBACK(wizard_email_changed),
968 static void wizard_vol_mount_cb(GnomeVFSVolumeMonitor *vfs, GnomeVFSVolume *vol, WizardWindow *wizard)
970 gchar *uri = gnome_vfs_volume_get_activation_uri (vol);
971 gchar *mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
974 if(!strcmp(mount_path, MMC1_PATH)) {
975 gtk_widget_set_sensitive(wizard->data_root_mmc1_radiobtn, TRUE);
977 if(!strcmp(mount_path, MMC2_PATH)) {
978 gtk_widget_set_sensitive(wizard->data_root_mmc2_radiobtn, TRUE);
983 static void wizard_vol_unmount_cb(GnomeVFSVolumeMonitor *vfs, GnomeVFSVolume *vol, WizardWindow *wizard)
985 gchar *uri = gnome_vfs_volume_get_activation_uri (vol);
986 gchar *mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
989 if(!strcmp(mount_path, MMC1_PATH)) {
990 gtk_widget_set_sensitive(wizard->data_root_mmc1_radiobtn, FALSE);
991 if (gtk_toggle_button_get_active(
992 GTK_TOGGLE_BUTTON(wizard->data_root_mmc1_radiobtn))) {
993 gtk_toggle_button_set_active(
994 GTK_TOGGLE_BUTTON(wizard->data_root_nokia_radiobtn), TRUE);
997 if(!strcmp(mount_path, MMC2_PATH)) {
998 gtk_widget_set_sensitive(wizard->data_root_mmc2_radiobtn, FALSE);
999 if (gtk_toggle_button_get_active(
1000 GTK_TOGGLE_BUTTON(wizard->data_root_mmc2_radiobtn))) {
1001 gtk_toggle_button_set_active(
1002 GTK_TOGGLE_BUTTON(wizard->data_root_nokia_radiobtn), TRUE);
1009 void data_root_changed (GtkToggleButton *toggle_btn,
1010 WizardWindow *wizard)
1012 gchar *name = g_path_get_basename(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)));
1014 if (gtk_toggle_button_get_active(
1015 GTK_TOGGLE_BUTTON(wizard->data_root_nokia_radiobtn)))
1016 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), name);
1017 else if (gtk_toggle_button_get_active(
1018 GTK_TOGGLE_BUTTON(wizard->data_root_mmc1_radiobtn))) {
1019 path = g_strconcat(MMC1_PATH, G_DIR_SEPARATOR_S,
1020 "Claws", G_DIR_SEPARATOR_S,
1021 g_get_user_name(), G_DIR_SEPARATOR_S,
1023 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), path);
1025 } else if (gtk_toggle_button_get_active(
1026 GTK_TOGGLE_BUTTON(wizard->data_root_mmc2_radiobtn))) {
1027 path = g_strconcat(MMC2_PATH, G_DIR_SEPARATOR_S,
1028 "Claws", G_DIR_SEPARATOR_S,
1029 g_get_user_name(), G_DIR_SEPARATOR_S,
1031 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), path);
1038 static GtkWidget* mailbox_page (WizardWindow * wizard)
1040 GtkWidget *table = gtk_table_new(1,1, FALSE);
1044 gchar *uri, *mount_path;
1047 GtkTooltips *tips = gtk_tooltips_new();
1049 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1050 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1052 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1053 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1055 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1056 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1058 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1059 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1061 wizard->mailbox_label = gtk_label_new(_("<span weight=\"bold\">Mailbox name:</span>"));
1062 gtk_label_set_use_markup(GTK_LABEL(wizard->mailbox_label), TRUE);
1063 if (GTK_IS_MISC(wizard->mailbox_label))
1064 gtk_misc_set_alignment(GTK_MISC(wizard->mailbox_label), 1, 0.5);
1065 wizard->mailbox_name = gtk_entry_new();
1067 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), tmpl.mailbox?tmpl.mailbox:"");
1069 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->mailbox_name,
1070 _("You can also specify an absolute path, for example: "
1071 "\"/home/john/Documents/Mail\""),
1074 gtk_box_pack_start(GTK_BOX(hbox), wizard->mailbox_label, FALSE, FALSE, 0);
1075 gtk_box_pack_start(GTK_BOX(hbox), wizard->mailbox_name, TRUE, TRUE, 0);
1078 wizard->data_root_nokia_radiobtn = gtk_radio_button_new_with_label(NULL,
1079 _("on internal memory"));
1080 wizard->data_root_mmc1_radiobtn = gtk_radio_button_new_with_label_from_widget(
1081 GTK_RADIO_BUTTON(wizard->data_root_nokia_radiobtn),
1082 _("on /media/mmc1"));
1083 wizard->data_root_mmc2_radiobtn = gtk_radio_button_new_with_label_from_widget(
1084 GTK_RADIO_BUTTON(wizard->data_root_nokia_radiobtn),
1085 _("on /media/mmc2"));
1087 g_signal_connect(G_OBJECT(wizard->data_root_nokia_radiobtn), "toggled",
1088 G_CALLBACK(data_root_changed), wizard);
1089 g_signal_connect(G_OBJECT(wizard->data_root_mmc1_radiobtn), "toggled",
1090 G_CALLBACK(data_root_changed), wizard);
1091 g_signal_connect(G_OBJECT(wizard->data_root_mmc2_radiobtn), "toggled",
1092 G_CALLBACK(data_root_changed), wizard);
1094 wizard->volmon = gnome_vfs_get_volume_monitor();
1095 wizard->vol_mmc1 = gnome_vfs_volume_monitor_get_volume_for_path(wizard->volmon, MMC1_PATH);
1096 wizard->vol_mmc2 = gnome_vfs_volume_monitor_get_volume_for_path(wizard->volmon, MMC2_PATH);
1098 uri = gnome_vfs_volume_get_activation_uri (wizard->vol_mmc1);
1099 mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
1101 if (wizard->vol_mmc1 == NULL || !gnome_vfs_volume_is_mounted(wizard->vol_mmc1)
1102 || strcmp(mount_path, MMC1_PATH)) {
1103 gtk_widget_set_sensitive(wizard->data_root_mmc1_radiobtn, FALSE);
1107 uri = gnome_vfs_volume_get_activation_uri (wizard->vol_mmc2);
1108 mount_path = uri?gnome_vfs_get_local_path_from_uri (uri):NULL;
1110 if (wizard->vol_mmc2 == NULL || !gnome_vfs_volume_is_mounted(wizard->vol_mmc2)
1111 || strcmp(mount_path, MMC2_PATH)) {
1112 gtk_widget_set_sensitive(wizard->data_root_mmc2_radiobtn, FALSE);
1116 gnome_vfs_volume_unref(wizard->vol_mmc1);
1117 gnome_vfs_volume_unref(wizard->vol_mmc2);
1118 wizard->vol_mmc1 = NULL;
1119 wizard->vol_mmc2 = NULL;
1121 wizard->volmon_mount_sigid = g_signal_connect(G_OBJECT(wizard->volmon),
1122 "volume-mounted", G_CALLBACK(wizard_vol_mount_cb), wizard);
1123 wizard->volmon_unmount_sigid = g_signal_connect(G_OBJECT(wizard->volmon),
1124 "volume-unmounted", G_CALLBACK(wizard_vol_unmount_cb), wizard);
1126 vbox2 = gtk_vbox_new(FALSE, VSPACING_NARROW);
1127 gtk_box_pack_start (GTK_BOX(vbox2), wizard->data_root_nokia_radiobtn, FALSE, FALSE, 0);
1128 gtk_box_pack_start (GTK_BOX(vbox2), wizard->data_root_mmc1_radiobtn, FALSE, FALSE, 0);
1129 gtk_box_pack_start (GTK_BOX(vbox2), wizard->data_root_mmc2_radiobtn, FALSE, FALSE, 0);
1131 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1132 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1133 PACK_BOX(hbox, _("<span weight=\"bold\">Store data</span>"),
1140 static void smtp_auth_changed (GtkWidget *btn, gpointer data)
1142 WizardWindow *wizard = (WizardWindow *)data;
1143 gboolean do_auth = gtk_toggle_button_get_active(
1144 GTK_TOGGLE_BUTTON(wizard->smtp_auth));
1145 gtk_widget_set_sensitive(wizard->smtp_username, do_auth);
1146 gtk_widget_set_sensitive(wizard->smtp_username_label, do_auth);
1147 gtk_widget_set_sensitive(wizard->smtp_password, do_auth);
1148 gtk_widget_set_sensitive(wizard->smtp_password_label, do_auth);
1151 static GtkWidget* smtp_page (WizardWindow * wizard)
1153 GtkWidget *table = gtk_table_new(1, 1, FALSE);
1156 GtkTooltips *tips = gtk_tooltips_new();
1159 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1160 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1162 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1163 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1165 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1166 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1168 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1169 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1170 wizard->smtp_server = gtk_entry_new();
1171 text = get_default_server(wizard, "smtp");
1172 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
1175 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->smtp_server,
1176 _("You can specify the port number by appending it at the end: "
1177 "\"mail.example.com:25\""),
1180 PACK_BOX(hbox, _("<span weight=\"bold\">SMTP server address:</span>"),
1181 wizard->smtp_server);
1184 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1185 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1186 wizard->smtp_auth = gtk_check_button_new_with_label(
1187 _("Use authentication"));
1188 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_auth),
1190 g_signal_connect(G_OBJECT(wizard->smtp_auth), "toggled",
1191 G_CALLBACK(smtp_auth_changed),
1193 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_auth, FALSE, FALSE, 0);
1195 text = get_default_smtp_account(wizard);
1197 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1198 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1199 wizard->smtp_username = gtk_entry_new();
1200 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_username), text);
1202 wizard->smtp_username_label = gtk_label_new(_("SMTP username:\n"
1203 "<span size=\"small\">(empty to use the same as receive)</span>"));
1204 gtk_label_set_use_markup(GTK_LABEL(wizard->smtp_username_label), TRUE);
1205 if (GTK_IS_MISC(wizard->smtp_username_label))
1206 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_username_label), 1, 0.5);
1207 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_username_label, FALSE, FALSE, 0);
1208 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_username, TRUE, TRUE, 0);
1210 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1211 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1212 wizard->smtp_password = gtk_entry_new();
1213 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_password), tmpl.smtppass?tmpl.smtppass:"");
1214 gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_password), FALSE);
1215 wizard->smtp_password_label = gtk_label_new(_("SMTP password:\n"
1216 "<span size=\"small\">(empty to use the same as receive)</span>"));
1217 gtk_label_set_use_markup(GTK_LABEL(wizard->smtp_password_label), TRUE);
1218 if (GTK_IS_MISC(wizard->smtp_password_label))
1219 gtk_misc_set_alignment(GTK_MISC(wizard->smtp_password_label), 1, 0.5);
1220 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_password_label, FALSE, FALSE, 0);
1221 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_password, TRUE, TRUE, 0);
1223 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1224 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1225 wizard->smtp_use_ssl = gtk_check_button_new_with_label(
1226 _("Use SSL to connect to SMTP server"));
1227 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl),
1229 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_ssl, FALSE, FALSE, 0);
1231 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1232 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1233 wizard->smtp_use_tls = gtk_check_button_new_with_label(
1234 _("Use SSL via STARTTLS"));
1235 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls),
1237 gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_tls, FALSE, FALSE, 0);
1238 SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, wizard->smtp_use_tls);
1240 smtp_auth_changed(NULL, wizard);
1244 static void wizard_protocol_change(WizardWindow *wizard, RecvProtocol protocol)
1248 if (protocol == A_POP3) {
1249 text = get_default_server(wizard, "pop");
1250 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1251 gtk_widget_hide(wizard->recv_imap_label);
1252 gtk_widget_hide(wizard->recv_imap_subdir);
1253 gtk_widget_hide(wizard->subsonly_checkbtn);
1254 gtk_widget_show(wizard->recv_username);
1255 gtk_widget_show(wizard->recv_password);
1256 gtk_widget_show(wizard->recv_username_label);
1257 gtk_widget_show(wizard->recv_password_label);
1258 gtk_widget_hide(wizard->no_imap_warning);
1260 gtk_widget_show(wizard->recv_use_ssl);
1261 gtk_widget_show(wizard->recv_use_tls);
1263 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1264 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1265 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1267 gtk_widget_show(wizard->mailbox_label);
1268 gtk_widget_show(wizard->mailbox_name);
1269 } else if (protocol == A_IMAP4) {
1270 #ifdef HAVE_LIBETPAN
1271 text = get_default_server(wizard, "imap");
1272 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1273 gtk_widget_show(wizard->recv_imap_label);
1274 gtk_widget_show(wizard->recv_imap_subdir);
1275 gtk_widget_show(wizard->subsonly_checkbtn);
1276 gtk_widget_show(wizard->recv_username);
1277 gtk_widget_show(wizard->recv_password);
1278 gtk_widget_show(wizard->recv_username_label);
1279 gtk_widget_show(wizard->recv_password_label);
1280 gtk_widget_hide(wizard->no_imap_warning);
1282 gtk_widget_show(wizard->recv_use_ssl);
1283 gtk_widget_show(wizard->recv_use_tls);
1285 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
1286 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1287 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1289 gtk_widget_hide(wizard->mailbox_label);
1290 gtk_widget_hide(wizard->mailbox_name);
1292 gtk_widget_hide(wizard->recv_imap_label);
1293 gtk_widget_hide(wizard->recv_imap_subdir);
1294 gtk_widget_hide(wizard->subsonly_checkbtn);
1295 gtk_widget_hide(wizard->recv_username);
1296 gtk_widget_hide(wizard->recv_password);
1297 gtk_widget_hide(wizard->recv_username_label);
1298 gtk_widget_hide(wizard->recv_password_label);
1299 gtk_widget_show(wizard->no_imap_warning);
1300 gtk_widget_hide(wizard->mailbox_label);
1301 gtk_widget_hide(wizard->mailbox_name);
1303 gtk_widget_hide(wizard->recv_use_ssl);
1304 gtk_widget_hide(wizard->recv_use_tls);
1306 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, FALSE);
1308 } else if (protocol == A_LOCAL) {
1309 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:"");
1310 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Local mailbox:</span>"));
1311 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1312 gtk_widget_hide(wizard->no_imap_warning);
1313 gtk_widget_hide(wizard->recv_imap_label);
1314 gtk_widget_hide(wizard->recv_imap_subdir);
1315 gtk_widget_hide(wizard->subsonly_checkbtn);
1316 gtk_widget_hide(wizard->recv_username);
1317 gtk_widget_hide(wizard->recv_password);
1318 gtk_widget_hide(wizard->recv_username_label);
1319 gtk_widget_hide(wizard->recv_password_label);
1321 gtk_widget_hide(wizard->recv_use_ssl);
1322 gtk_widget_hide(wizard->recv_use_tls);
1324 gtk_widget_show(wizard->mailbox_label);
1325 gtk_widget_show(wizard->mailbox_name);
1326 gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE);
1330 static void wizard_protocol_changed(GtkMenuItem *menuitem, gpointer data)
1332 WizardWindow *wizard = (WizardWindow *)data;
1333 RecvProtocol protocol;
1334 protocol = GPOINTER_TO_INT
1335 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
1337 wizard_protocol_change(wizard, protocol);
1340 static GtkWidget* recv_page (WizardWindow * wizard)
1342 GtkWidget *table = gtk_table_new(1,1, FALSE);
1343 GtkWidget *menu = gtk_menu_new();
1344 GtkWidget *menuitem;
1345 GtkTooltips *tips = gtk_tooltips_new();
1351 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
1352 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
1354 vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
1355 gtk_container_set_border_width(GTK_CONTAINER(vbox), VSPACING_NARROW_2);
1357 gtk_table_attach(GTK_TABLE(table), vbox, 0,1,1,2,
1358 GTK_EXPAND|GTK_FILL, 0, 0, 0);
1360 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1361 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1362 wizard->recv_type = gtk_option_menu_new();
1364 MENUITEM_ADD (menu, menuitem, _("POP3"), A_POP3);
1365 g_signal_connect(G_OBJECT(menuitem), "activate",
1366 G_CALLBACK(wizard_protocol_changed),
1369 MENUITEM_ADD (menu, menuitem, _("IMAP"), A_IMAP4);
1370 g_signal_connect(G_OBJECT(menuitem), "activate",
1371 G_CALLBACK(wizard_protocol_changed),
1374 MENUITEM_ADD (menu, menuitem, _("Local mbox file"), A_LOCAL);
1375 g_signal_connect(G_OBJECT(menuitem), "activate",
1376 G_CALLBACK(wizard_protocol_changed),
1379 gtk_option_menu_set_menu (GTK_OPTION_MENU (wizard->recv_type), menu);
1380 switch(tmpl.recvtype) {
1393 gtk_option_menu_set_history(GTK_OPTION_MENU (wizard->recv_type), index);
1394 PACK_BOX(hbox, _("<span weight=\"bold\">Server type:</span>"),
1397 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1398 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1399 wizard->recv_server = gtk_entry_new();
1400 text = get_default_server(wizard, "pop");
1401 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
1404 gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), wizard->recv_server,
1405 _("You can specify the port number by appending it at the end: "
1406 "\"mail.example.com:110\""),
1409 wizard->recv_label = gtk_label_new(_("<span weight=\"bold\">Server address:</span>"));
1410 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
1411 if (GTK_IS_MISC(wizard->recv_label))
1412 gtk_misc_set_alignment(GTK_MISC(wizard->recv_label), 1, 0.5);
1413 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_label, FALSE, FALSE, 0);
1414 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_server, TRUE, TRUE, 0);
1416 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1417 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1418 wizard->recv_username = gtk_entry_new();
1419 wizard->recv_username_label = gtk_label_new(_("<span weight=\"bold\">Username:</span>"));
1420 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_username_label), TRUE);
1421 if (GTK_IS_MISC(wizard->recv_username_label))
1422 gtk_misc_set_alignment(GTK_MISC(wizard->recv_username_label), 1, 0.5);
1423 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_username_label, FALSE, FALSE, 0);
1424 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_username, TRUE, TRUE, 0);
1426 text = get_default_account(wizard);
1427 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
1430 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1431 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1432 wizard->recv_password = gtk_entry_new();
1433 gtk_entry_set_text(GTK_ENTRY(wizard->recv_password), tmpl.recvpass?tmpl.recvpass:"");
1434 wizard->recv_password_label = gtk_label_new(_("Password:"));
1435 if (GTK_IS_MISC(wizard->recv_password_label))
1436 gtk_misc_set_alignment(GTK_MISC(wizard->recv_password_label), 1, 0.5);
1437 gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_password), FALSE);
1438 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_password_label, FALSE, FALSE, 0);
1439 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_password, TRUE, TRUE, 0);
1442 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1443 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1444 wizard->recv_use_ssl = gtk_check_button_new_with_label(
1445 _("Use SSL to connect to receiving server"));
1446 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl),
1448 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_ssl, FALSE, FALSE, 0);
1450 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1451 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1452 wizard->recv_use_tls = gtk_check_button_new_with_label(
1453 _("Use SSL via STARTTLS"));
1454 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls),
1456 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_use_tls, FALSE, FALSE, 0);
1457 SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, wizard->recv_use_tls);
1459 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1460 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1461 wizard->recv_imap_subdir = gtk_entry_new();
1462 gtk_entry_set_text(GTK_ENTRY(wizard->recv_imap_subdir), tmpl.imapdir?tmpl.imapdir:"");
1463 wizard->recv_imap_label = gtk_label_new(_("IMAP server directory:"));
1464 if (GTK_IS_MISC(wizard->recv_imap_label))
1465 gtk_misc_set_alignment(GTK_MISC(wizard->recv_imap_label), 1, 0.5);
1466 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_label, FALSE, FALSE, 0);
1467 gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_subdir, TRUE, TRUE, 0);
1469 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1470 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1471 wizard->subsonly_checkbtn = gtk_check_button_new_with_label(
1472 _("Show only subscribed folders"));
1473 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn),
1475 gtk_box_pack_start(GTK_BOX(hbox), wizard->subsonly_checkbtn, FALSE, FALSE, 0);
1477 hbox = gtk_hbox_new(FALSE, VSPACING_NARROW);
1478 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1479 wizard->no_imap_warning = gtk_label_new(_(
1480 "<span weight=\"bold\">Warning: this version of Claws Mail\n"
1481 "has been built without IMAP support.</span>"));
1482 gtk_label_set_use_markup(GTK_LABEL(wizard->no_imap_warning), TRUE);
1483 gtk_box_pack_start(GTK_BOX(hbox), wizard->no_imap_warning, FALSE, FALSE, 0);
1489 wizard_response_cb (GtkDialog * dialog, int response, gpointer data)
1491 WizardWindow * wizard = (WizardWindow *)data;
1492 int current_page, num_pages;
1493 GtkWidget *menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(wizard->recv_type));
1494 GtkWidget *menuitem = gtk_menu_get_active(GTK_MENU(menu));
1495 gint protocol = GPOINTER_TO_INT
1496 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
1497 gboolean skip_mailbox_page = FALSE;
1500 if (protocol == A_IMAP4) {
1501 skip_mailbox_page = TRUE;
1505 num_pages = g_slist_length(wizard->pages);
1507 current_page = gtk_notebook_get_current_page (
1508 GTK_NOTEBOOK(wizard->notebook));
1509 if (response == CANCEL)
1511 wizard->result = FALSE;
1512 wizard->finished = TRUE;
1513 gtk_widget_destroy (GTK_WIDGET(dialog));
1515 else if (response == FINISHED)
1517 if (!wizard_write_config(wizard)) {
1518 current_page = gtk_notebook_get_current_page (
1519 GTK_NOTEBOOK(wizard->notebook));
1522 wizard->result = TRUE;
1523 wizard->finished = TRUE;
1524 gtk_widget_destroy (GTK_WIDGET(dialog));
1528 if (response == GO_BACK)
1530 if (current_page > 0) {
1532 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1536 gtk_notebook_set_current_page (
1537 GTK_NOTEBOOK(wizard->notebook),
1541 else if (response == GO_FORWARD)
1543 if (current_page < (num_pages-1)) {
1545 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
1549 gtk_notebook_set_current_page (
1550 GTK_NOTEBOOK(wizard->notebook),
1555 gtk_dialog_set_response_sensitive (dialog, GO_BACK,
1557 gtk_dialog_set_response_sensitive (dialog, GO_FORWARD,
1558 current_page < (num_pages - 1));
1559 if (current_page == (num_pages -1)) {
1560 gtk_dialog_set_response_sensitive (dialog, FINISHED, TRUE);
1561 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), FINISHED);
1563 gtk_dialog_set_response_sensitive (dialog, FINISHED, FALSE);
1564 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), GO_FORWARD);
1570 static gint wizard_close_cb(GtkWidget *widget, GdkEventAny *event,
1573 WizardWindow *wizard = (WizardWindow *)data;
1574 wizard->result = FALSE;
1575 wizard->finished = TRUE;
1580 #define PACK_WARNING(text) { \
1581 label = gtk_label_new(text); \
1582 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); \
1583 gtk_box_pack_end(GTK_BOX(widget), label, FALSE, FALSE, 0); \
1586 gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) {
1587 WizardWindow *wizard = g_new0(WizardWindow, 1);
1591 GtkWidget *scrolled_window;
1596 wizard->mainwin = mainwin;
1597 wizard->create_mailbox = create_mailbox;
1599 gtk_widget_hide(mainwin->window);
1601 wizard_read_defaults();
1603 wizard->window = gtk_dialog_new_with_buttons (_("Claws Mail Setup Wizard"),
1605 GTK_STOCK_GO_BACK, GO_BACK,
1606 GTK_STOCK_GO_FORWARD, GO_FORWARD,
1607 GTK_STOCK_SAVE, FINISHED,
1608 GTK_STOCK_CANCEL, CANCEL,
1611 g_signal_connect(wizard->window, "response",
1612 G_CALLBACK(wizard_response_cb), wizard);
1613 gtk_widget_realize(wizard->window);
1614 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window),
1616 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1618 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1620 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1622 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
1625 wizard->notebook = gtk_notebook_new();
1626 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(wizard->notebook), FALSE);
1627 gtk_notebook_set_show_border(GTK_NOTEBOOK(wizard->notebook), FALSE);
1628 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(wizard->window)->vbox),
1629 wizard->notebook, TRUE, TRUE, 0);
1631 wizard->pages = NULL;
1633 /*welcome page: 0 */
1635 page = create_page(wizard, _("Welcome to Claws Mail"));
1637 wizard->pages = g_slist_append(wizard->pages, page);
1638 widget = stock_pixmap_widget(wizard->window,
1639 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1641 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1643 text = g_strdup(_("Welcome to the Claws Mail setup wizard.\n\n"
1644 "We will begin by defining some basic "
1645 "information about you and your most common "
1646 "mail options so that you can start to use "
1647 "Claws Mail in less than five minutes."));
1648 widget = gtk_label_new(text);
1649 gtk_label_set_line_wrap(GTK_LABEL(widget), TRUE);
1651 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1653 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1654 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1655 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1656 gtk_box_pack_start(GTK_BOX(page), scrolled_window, TRUE, TRUE, 0);
1658 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1666 widget = create_page (wizard, _("About You"));
1667 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1668 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1669 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1670 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1672 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1674 PACK_WARNING(_("Bold fields must be completed"));
1676 wizard->pages = g_slist_append(wizard->pages, widget);
1678 /* recv+auth page: 2 */
1681 widget = create_page (wizard, _("Receiving mail"));
1682 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1683 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1684 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1685 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1687 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1689 PACK_WARNING(_("Bold fields must be completed"));
1691 wizard->pages = g_slist_append(wizard->pages, widget);
1696 widget = create_page (wizard, _("Sending mail"));
1697 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1698 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1699 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1700 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1702 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1704 PACK_WARNING(_("Bold fields must be completed"));
1706 wizard->pages = g_slist_append(wizard->pages, widget);
1708 /* mailbox page: 4 */
1709 if (create_mailbox) {
1712 widget = create_page (wizard, _("Saving mail on disk"));
1713 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
1714 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
1715 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1716 gtk_box_pack_start(GTK_BOX(widget), scrolled_window, TRUE, TRUE, 0);
1718 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
1719 mailbox_page(wizard));
1720 PACK_WARNING(_("Bold fields must be completed"));
1722 wizard->pages = g_slist_append(wizard->pages, widget);
1728 page = create_page(wizard, _("Configuration finished"));
1730 wizard->pages = g_slist_append(wizard->pages, page);
1731 widget = stock_pixmap_widget(wizard->window,
1732 STOCK_PIXMAP_CLAWS_MAIL_LOGO);
1734 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1736 text = g_strdup(_("Claws Mail is now ready.\n"
1737 "Click Save to start."));
1738 widget = gtk_label_new(text);
1739 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
1743 for (cur = wizard->pages; cur && cur->data; cur = cur->next) {
1744 gtk_notebook_append_page (GTK_NOTEBOOK(wizard->notebook),
1745 GTK_WIDGET(cur->data), NULL);
1748 g_signal_connect(G_OBJECT(wizard->window), "delete_event",
1749 G_CALLBACK(wizard_close_cb), wizard);
1750 gtk_widget_show_all (wizard->window);
1752 gtk_widget_hide(wizard->recv_imap_label);
1753 gtk_widget_hide(wizard->recv_imap_subdir);
1754 gtk_widget_hide(wizard->subsonly_checkbtn);
1756 wizard_protocol_change(wizard, tmpl.recvtype);
1758 while (!wizard->finished)
1759 gtk_main_iteration();
1761 result = wizard->result;
1765 gtk_widget_show(mainwin->window);