2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2004 Hiroyuki Yamamoto
4 * This file (C) 2004 Colin Leroy
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 2 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, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
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>
53 #include "prefs_account.h"
54 #include "mainwindow.h"
55 #include "stock_pixmap.h"
58 #include "alertpanel.h"
62 #include "prefs_common.h"
72 int WELCOME_PAGE = -1;
76 int MAILBOX_PAGE = -1;
90 GtkWidget *organization;
92 GtkWidget *mailbox_name;
94 GtkWidget *smtp_server;
97 GtkWidget *recv_label;
98 GtkWidget *recv_server;
99 GtkWidget *recv_username;
100 GtkWidget *recv_password;
101 GtkWidget *recv_username_label;
102 GtkWidget *recv_password_label;
103 GtkWidget *recv_imap_label;
104 GtkWidget *recv_imap_subdir;
107 GtkWidget *smtp_use_ssl;
108 GtkWidget *recv_use_ssl;
111 gboolean create_mailbox;
117 static void initialize_fonts(WizardWindow *wizard)
119 GtkWidget *widget = wizard->email;
120 gint size = pango_font_description_get_size(
121 widget->style->font_desc)
125 tmp = g_strdup(prefs_common.textfont);
126 if (strrchr(tmp, ' ')) {
127 *(strrchr(tmp, ' ')) = '\0';
128 new = g_strdup_printf("%s %d", tmp, size);
129 g_free(prefs_common.textfont);
130 prefs_common.textfont = new;
134 tmp = g_strdup(prefs_common.smallfont);
135 if (strrchr(tmp, ' ')) {
136 *(strrchr(tmp, ' ')) = '\0';
137 new = g_strdup_printf("%s %d", tmp, size);
138 g_free(prefs_common.smallfont);
139 prefs_common.smallfont = new;
143 tmp = g_strdup(prefs_common.normalfont);
144 if (strrchr(tmp, ' ')) {
145 *(strrchr(tmp, ' ')) = '\0';
146 new = g_strdup_printf("%s %d", tmp, size);
147 g_free(prefs_common.normalfont);
148 prefs_common.normalfont = new;
153 #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"
155 static void write_welcome_email(WizardWindow *wizard)
162 const gchar *mailbox = gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name));
163 Folder *folder = folder_find_from_path(mailbox);
164 FolderItem *inbox = folder ? folder->inbox:NULL;
165 gchar *file = get_tmp_file();
167 get_rfc822_date(buf_date, sizeof(buf_date));
169 subj = g_strdup_printf(_("Welcome to Sylpheed-Claws"));
171 head = g_strdup_printf(
172 "From: %s <sylpheed-claws-users@lists.sf.net>\n"
177 "Content-Type: text/plain; charset=UTF-8\n",
178 _("Sylpheed-Claws Team"),
179 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)),
180 gtk_entry_get_text(GTK_ENTRY(wizard->email)),
181 buf_date, subj, XFACE);
182 body = g_strdup_printf(
184 "Welcome to Sylpheed-Claws\n"
185 "-------------------------\n"
187 "Now that you have set up your account you can fetch your\n"
188 "mail by clicking the 'Get Mail' button at the left of the\n"
191 "You can change your Account Preferences by using the menu\n"
192 "entry '/Configuration/Preferences for current account'\n"
193 "and change the general Preferences by using\n"
194 "'/Configuration/Preferences'.\n"
196 "You can find further information in the Sylpheed-Claws manual,\n"
197 "which can be accessed by using the menu entry '/Help/Manual'\n"
198 "or online at the URL given below.\n"
206 "Mailing Lists: <%s>\n"
210 "Sylpheed-Claws is free software, released under the terms\n"
211 "of the GNU General Public License, version 2 or later, as\n"
212 "published by the Free Software Foundation, 51 Franklin Street,\n"
213 "Fifth Floor, Boston, MA 02110-1301, USA. The license can be\n"
218 "If you wish to donate to the Sylpheed-Claws project you can do\n"
220 HOMEPAGE_URI, MANUAL_URI, FAQ_URI, THEMES_URI, MAILING_LIST_URI,
221 GPL_URI, DONATE_URI);
223 msg = g_strconcat(head, body, NULL);
225 if (inbox && inbox->total_msgs == 0
226 && str_write_to_file(msg, file) >= 0) {
227 MsgFlags flags = { MSG_UNREAD|MSG_NEW, 0};
228 folder_item_add_msg(inbox, file, &flags, FALSE);
238 static gboolean wizard_write_config(WizardWindow *wizard)
240 static gboolean mailbox_ok = FALSE;
241 PrefsAccount *prefs_account = prefs_account_new();
242 GList *account_list = NULL;
243 GtkWidget *menu, *menuitem;
245 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(wizard->recv_type));
246 menuitem = gtk_menu_get_active(GTK_MENU(menu));
247 prefs_account->protocol = GPOINTER_TO_INT
248 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
251 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4 &&
252 !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)))) {
253 alertpanel_error(_("Please enter the mailbox name."));
254 g_free(prefs_account);
255 gtk_notebook_set_current_page (
256 GTK_NOTEBOOK(wizard->notebook),
262 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
263 mailbox_ok = setup_write_mailbox_path(wizard->mainwin,
265 GTK_ENTRY(wizard->mailbox_name)));
271 /* alertpanel done by setup_write_mailbox_path */
272 g_free(prefs_account);
273 gtk_notebook_set_current_page (
274 GTK_NOTEBOOK(wizard->notebook),
279 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->full_name)))
280 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->email)))) {
281 alertpanel_error(_("Please enter your name and email address."));
282 g_free(prefs_account);
283 gtk_notebook_set_current_page (
284 GTK_NOTEBOOK(wizard->notebook),
289 if (prefs_account->protocol != A_LOCAL) {
290 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)))
291 || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
292 alertpanel_error(_("Please enter your receiving server "
294 g_free(prefs_account);
295 gtk_notebook_set_current_page (
296 GTK_NOTEBOOK(wizard->notebook),
301 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) {
302 alertpanel_error(_("Please enter your username."));
303 g_free(prefs_account);
304 gtk_notebook_set_current_page (
305 GTK_NOTEBOOK(wizard->notebook),
311 if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)))) {
312 alertpanel_error(_("Please enter your SMTP server."));
313 g_free(prefs_account);
314 gtk_notebook_set_current_page (
315 GTK_NOTEBOOK(wizard->notebook),
321 if (prefs_account->protocol != A_LOCAL)
322 prefs_account->account_name = g_strdup_printf("%s@%s",
323 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)),
324 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
326 prefs_account->account_name = g_strdup_printf("%s",
327 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
329 prefs_account->name = g_strdup(
330 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)));
331 prefs_account->address = g_strdup(
332 gtk_entry_get_text(GTK_ENTRY(wizard->email)));
333 prefs_account->organization = g_strdup(
334 gtk_entry_get_text(GTK_ENTRY(wizard->organization)));
335 prefs_account->smtp_server = g_strdup(
336 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)));
338 if (prefs_account->protocol != A_LOCAL)
339 prefs_account->recv_server = g_strdup(
340 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
342 prefs_account->local_mbox = g_strdup(
343 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
345 prefs_account->userid = g_strdup(
346 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)));
347 prefs_account->passwd = g_strdup(
348 gtk_entry_get_text(GTK_ENTRY(wizard->recv_password)));
351 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl)))
352 prefs_account->ssl_smtp = SSL_TUNNEL;
353 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl))) {
354 if (prefs_account->protocol == A_IMAP4)
355 prefs_account->ssl_imap = SSL_TUNNEL;
357 prefs_account->ssl_pop = SSL_TUNNEL;
360 if (prefs_account->protocol == A_IMAP4) {
361 gchar *directory = gtk_editable_get_chars(
362 GTK_EDITABLE(wizard->recv_imap_subdir), 0, -1);
363 if (directory && strlen(directory)) {
364 prefs_account->imap_dir = g_strdup(directory);
369 account_list = g_list_append(account_list, prefs_account);
370 prefs_account_write_config_all(account_list);
371 prefs_account_free(prefs_account);
372 account_read_config_all();
374 initialize_fonts(wizard);
375 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4)
376 write_welcome_email(wizard);
381 static GtkWidget* create_page (WizardWindow *wizard, const char * title)
389 vbox = gtk_vbox_new (FALSE, 6);
390 gtk_container_set_border_width (GTK_CONTAINER(vbox), 10);
392 /* create the titlebar */
393 hbox = gtk_hbox_new (FALSE, 12);
394 image = stock_pixmap_widget(wizard->window,
395 STOCK_PIXMAP_SYLPHEED_ICON);
396 gtk_box_pack_start (GTK_BOX(hbox), image, FALSE, FALSE, 0);
397 title_string = g_strconcat ("<span size=\"xx-large\" weight=\"ultrabold\">", title ? title : "", "</span>", NULL);
398 w = gtk_label_new (title_string);
399 gtk_label_set_use_markup (GTK_LABEL(w), TRUE);
400 g_free (title_string);
401 gtk_box_pack_start (GTK_BOX(hbox), w, FALSE, FALSE, 0);
403 /* pack the titlebar */
404 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
406 /* pack the separator */
407 gtk_box_pack_start (GTK_BOX(vbox), gtk_hseparator_new(), FALSE, FALSE, 0);
410 w = gtk_alignment_new (0, 0, 0, 0);
411 gtk_widget_set_size_request (w, 0, 6);
412 gtk_box_pack_start (GTK_BOX(vbox), w, FALSE, FALSE, 0);
417 #define GTK_TABLE_ADD_ROW_AT(table,text,entry,i) { \
418 GtkWidget *label = gtk_label_new(text); \
419 gtk_table_attach(GTK_TABLE(table), label, \
420 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0); \
421 gtk_label_set_use_markup(GTK_LABEL(label), TRUE); \
422 if (GTK_IS_MISC(label)) \
423 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); \
424 gtk_table_attach(GTK_TABLE(table), entry, \
425 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0); \
428 static gchar *get_default_email_addr(void)
430 gchar *domain_name = g_strdup(get_domain_name());
432 if (strchr(domain_name, '.') != strrchr(domain_name, '.')
433 && strlen(strchr(domain_name, '.')) > 6) {
434 gchar *tmp = g_strdup(strchr(domain_name, '.')+1);
438 result = g_strdup_printf("%s@%s",
445 static gchar *get_default_server(WizardWindow * wizard, const gchar *type)
447 gchar *domain_name = NULL;
448 gchar *tmp = gtk_editable_get_chars(
449 GTK_EDITABLE(wizard->email), 0, -1);
452 if (strstr(tmp, "@")) {
453 domain_name = g_strdup(strstr(tmp,"@")+1);
455 domain_name = g_strdup(get_domain_name());
460 result = g_strdup_printf("%s.%s",
466 static gchar *get_default_account(WizardWindow * wizard)
468 gchar *result = gtk_editable_get_chars(
469 GTK_EDITABLE(wizard->email), 0, -1);
471 if (strstr(result, "@")) {
472 *(strstr(result,"@")) = '\0';
478 static void wizard_email_changed(GtkWidget *widget, gpointer data)
480 WizardWindow *wizard = (WizardWindow *)data;
481 RecvProtocol protocol;
483 protocol = GPOINTER_TO_INT
484 (g_object_get_data(G_OBJECT(wizard->recv_type), MENU_VAL_ID));
486 text = get_default_server(wizard, "smtp");
487 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
490 text = get_default_account(wizard);
491 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
494 if (protocol == A_POP3) {
495 text = get_default_server(wizard, "pop");
496 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
498 } else if (protocol == A_IMAP4) {
499 text = get_default_server(wizard, "imap");
500 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
502 } else if (protocol == A_LOCAL) {
503 gchar *mbox = g_strdup_printf("/var/mail/%s", g_get_user_name());
504 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), mbox);
510 static GtkWidget* user_page (WizardWindow * wizard)
512 GtkWidget *table = gtk_table_new(3,2, FALSE);
516 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
517 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
519 wizard->full_name = gtk_entry_new();
520 gtk_entry_set_text(GTK_ENTRY(wizard->full_name), g_get_real_name());
521 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">Your name:</span>"),
522 wizard->full_name, i); i++;
524 wizard->email = gtk_entry_new();
525 text = get_default_email_addr();
526 gtk_entry_set_text(GTK_ENTRY(wizard->email), text);
528 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">Your email address:</span>"),
529 wizard->email, i); i++;
531 wizard->organization = gtk_entry_new();
532 GTK_TABLE_ADD_ROW_AT(table, _("Your organization:"),
533 wizard->organization, i); i++;
535 g_signal_connect(G_OBJECT(wizard->email), "changed",
536 G_CALLBACK(wizard_email_changed),
541 static GtkWidget* mailbox_page (WizardWindow * wizard)
543 GtkWidget *table = gtk_table_new(1,2, FALSE);
546 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
547 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
549 wizard->mailbox_name = gtk_entry_new();
550 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), "Mail");
551 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">Mailbox name:</span>"),
552 wizard->mailbox_name, i); i++;
557 static GtkWidget* smtp_page (WizardWindow * wizard)
559 GtkWidget *table = gtk_table_new(1,2, FALSE);
563 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
564 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
566 wizard->smtp_server = gtk_entry_new();
567 text = get_default_server(wizard, "smtp");
568 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
570 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">SMTP server address:</span>"),
571 wizard->smtp_server, i); i++;
575 static void wizard_protocol_changed(GtkMenuItem *menuitem, gpointer data)
577 WizardWindow *wizard = (WizardWindow *)data;
578 RecvProtocol protocol;
580 protocol = GPOINTER_TO_INT
581 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
583 if (protocol == A_POP3) {
584 text = get_default_server(wizard, "pop");
585 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
586 gtk_widget_hide(wizard->recv_imap_label);
587 gtk_widget_hide(wizard->recv_imap_subdir);
588 gtk_widget_show(wizard->recv_username);
589 gtk_widget_show(wizard->recv_password);
590 gtk_widget_show(wizard->recv_username_label);
591 gtk_widget_show(wizard->recv_password_label);
592 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
593 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
595 } else if (protocol == A_IMAP4) {
596 text = get_default_server(wizard, "imap");
597 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
598 gtk_widget_show(wizard->recv_imap_label);
599 gtk_widget_show(wizard->recv_imap_subdir);
600 gtk_widget_show(wizard->recv_username);
601 gtk_widget_show(wizard->recv_password);
602 gtk_widget_show(wizard->recv_username_label);
603 gtk_widget_show(wizard->recv_password_label);
604 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>"));
605 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
607 } else if (protocol == A_LOCAL) {
608 gchar *mbox = g_strdup_printf("/var/mail/%s", g_get_user_name());
609 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), mbox);
611 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Local mailbox:</span>"));
612 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
613 gtk_widget_hide(wizard->recv_imap_label);
614 gtk_widget_hide(wizard->recv_imap_subdir);
615 gtk_widget_hide(wizard->recv_username);
616 gtk_widget_hide(wizard->recv_password);
617 gtk_widget_hide(wizard->recv_username_label);
618 gtk_widget_hide(wizard->recv_password_label);
622 static GtkWidget* recv_page (WizardWindow * wizard)
624 GtkWidget *table = gtk_table_new(5,2, FALSE);
625 GtkWidget *menu = gtk_menu_new();
630 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
631 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
633 wizard->recv_type = gtk_option_menu_new();
635 MENUITEM_ADD (menu, menuitem, _("POP3"), A_POP3);
636 g_signal_connect(G_OBJECT(menuitem), "activate",
637 G_CALLBACK(wizard_protocol_changed),
639 MENUITEM_ADD (menu, menuitem, _("IMAP"), A_IMAP4);
640 g_signal_connect(G_OBJECT(menuitem), "activate",
641 G_CALLBACK(wizard_protocol_changed),
643 MENUITEM_ADD (menu, menuitem, _("Local mbox file"), A_LOCAL);
644 g_signal_connect(G_OBJECT(menuitem), "activate",
645 G_CALLBACK(wizard_protocol_changed),
648 gtk_option_menu_set_menu (GTK_OPTION_MENU (wizard->recv_type), menu);
649 GTK_TABLE_ADD_ROW_AT(table, _("<span weight=\"bold\">Server type:</span>"),
650 wizard->recv_type, i); i++;
652 wizard->recv_server = gtk_entry_new();
653 text = get_default_server(wizard, "pop");
654 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
657 wizard->recv_label = gtk_label_new(_("<span weight=\"bold\">Server address:</span>"));
658 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE);
659 gtk_table_attach(GTK_TABLE(table), wizard->recv_label,
660 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
661 if (GTK_IS_MISC(wizard->recv_label))
662 gtk_misc_set_alignment(GTK_MISC(wizard->recv_label), 1, 0.5);
663 gtk_table_attach(GTK_TABLE(table), wizard->recv_server,
664 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
667 wizard->recv_username = gtk_entry_new();
668 wizard->recv_username_label = gtk_label_new(_("<span weight=\"bold\">Username:</span>"));
669 gtk_label_set_use_markup(GTK_LABEL(wizard->recv_username_label), TRUE);
670 gtk_table_attach(GTK_TABLE(table), wizard->recv_username_label,
671 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
672 if (GTK_IS_MISC(wizard->recv_username_label))
673 gtk_misc_set_alignment(GTK_MISC(wizard->recv_username_label), 1, 0.5);
674 gtk_table_attach(GTK_TABLE(table), wizard->recv_username,
675 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
678 text = get_default_account(wizard);
679 gtk_entry_set_text(GTK_ENTRY(wizard->recv_username), text);
682 wizard->recv_password = gtk_entry_new();
683 wizard->recv_password_label = gtk_label_new(_("Password:"));
684 gtk_table_attach(GTK_TABLE(table), wizard->recv_password_label,
685 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
686 if (GTK_IS_MISC(wizard->recv_password_label))
687 gtk_misc_set_alignment(GTK_MISC(wizard->recv_password_label), 1, 0.5);
688 gtk_table_attach(GTK_TABLE(table), wizard->recv_password,
689 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
690 gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_password), FALSE);
693 wizard->recv_imap_subdir = gtk_entry_new();
694 wizard->recv_imap_label = gtk_label_new(_("IMAP server directory:"));
696 gtk_table_attach(GTK_TABLE(table), wizard->recv_imap_label,
697 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
698 if (GTK_IS_MISC(wizard->recv_imap_label))
699 gtk_misc_set_alignment(GTK_MISC(wizard->recv_imap_label), 1, 0.5);
700 gtk_table_attach(GTK_TABLE(table), wizard->recv_imap_subdir,
701 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
709 static GtkWidget* ssl_page (WizardWindow * wizard)
711 GtkWidget *table = gtk_table_new(2,2, FALSE);
714 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
715 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
717 wizard->smtp_use_ssl = gtk_check_button_new_with_label(
718 _("Use SSL to connect to SMTP server"));
719 gtk_table_attach(GTK_TABLE(table), wizard->smtp_use_ssl,
720 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0); i++;
722 wizard->recv_use_ssl = gtk_check_button_new_with_label(
723 _("Use SSL to connect to receiving server"));
724 gtk_table_attach(GTK_TABLE(table), wizard->recv_use_ssl,
725 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
732 wizard_response_cb (GtkDialog * dialog, int response, gpointer data)
734 WizardWindow * wizard = (WizardWindow *)data;
735 int current_page, num_pages;
736 GtkWidget *menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(wizard->recv_type));
737 GtkWidget *menuitem = gtk_menu_get_active(GTK_MENU(menu));
738 gint protocol = GPOINTER_TO_INT
739 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
740 gboolean skip_mailbox_page = FALSE;
742 if (protocol == A_IMAP4) {
743 skip_mailbox_page = TRUE;
746 num_pages = g_slist_length(wizard->pages);
748 current_page = gtk_notebook_get_current_page (
749 GTK_NOTEBOOK(wizard->notebook));
750 if (response == CANCEL)
752 wizard->result = FALSE;
753 wizard->finished = TRUE;
754 gtk_widget_destroy (GTK_WIDGET(dialog));
756 else if (response == FINISHED)
758 if (!wizard_write_config(wizard)) {
759 current_page = gtk_notebook_get_current_page (
760 GTK_NOTEBOOK(wizard->notebook));
763 wizard->result = TRUE;
764 wizard->finished = TRUE;
765 gtk_widget_destroy (GTK_WIDGET(dialog));
769 if (response == GO_BACK)
771 if (current_page > 0) {
773 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
777 gtk_notebook_set_current_page (
778 GTK_NOTEBOOK(wizard->notebook),
782 else if (response == GO_FORWARD)
784 if (current_page < (num_pages-1)) {
786 if (current_page == MAILBOX_PAGE && skip_mailbox_page) {
790 gtk_notebook_set_current_page (
791 GTK_NOTEBOOK(wizard->notebook),
796 gtk_dialog_set_response_sensitive (dialog, GO_BACK,
798 gtk_dialog_set_response_sensitive (dialog, GO_FORWARD,
799 current_page < (num_pages - 1));
800 gtk_dialog_set_response_sensitive (dialog, FINISHED,
801 current_page == (num_pages - 1));
805 static gint wizard_close_cb(GtkWidget *widget, GdkEventAny *event,
808 WizardWindow *wizard = (WizardWindow *)data;
809 wizard->result = FALSE;
810 wizard->finished = TRUE;
815 #define PACK_WARNING(text) { \
816 label = gtk_label_new(text); \
817 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); \
818 gtk_box_pack_end(GTK_BOX(widget), label, FALSE, FALSE, 0); \
821 gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) {
822 WizardWindow *wizard = g_new0(WizardWindow, 1);
830 wizard->mainwin = mainwin;
831 wizard->create_mailbox = create_mailbox;
833 gtk_widget_hide(mainwin->window);
835 wizard->window = gtk_dialog_new_with_buttons (_("Sylpheed-Claws Setup Wizard"),
837 GTK_STOCK_GO_BACK, GO_BACK,
838 GTK_STOCK_GO_FORWARD, GO_FORWARD,
839 GTK_STOCK_SAVE, FINISHED,
840 GTK_STOCK_CANCEL, CANCEL,
843 g_signal_connect(wizard->window, "response",
844 G_CALLBACK(wizard_response_cb), wizard);
845 gtk_widget_realize(wizard->window);
846 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window),
848 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
850 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
852 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
854 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
857 wizard->notebook = gtk_notebook_new();
858 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(wizard->notebook), FALSE);
859 gtk_notebook_set_show_border(GTK_NOTEBOOK(wizard->notebook), FALSE);
860 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(wizard->window)->vbox),
861 wizard->notebook, TRUE, TRUE, 0);
863 wizard->pages = NULL;
867 page = create_page(wizard, _("Welcome to Sylpheed-Claws"));
869 wizard->pages = g_slist_append(wizard->pages, page);
870 widget = stock_pixmap_widget(wizard->window,
871 STOCK_PIXMAP_SYLPHEED_LOGO);
873 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
875 text = g_strdup(_("Welcome to the Sylpheed-Claws setup wizard.\n\n"
876 "We will begin by defining some basic "
877 "information about you and your most common "
878 "mail options so that you can start to use "
879 "Sylpheed-Claws in less than five minutes."));
880 widget = gtk_label_new(text);
881 gtk_label_set_line_wrap(GTK_LABEL(widget), TRUE);
882 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
888 widget = create_page (wizard, _("About You"));
889 gtk_box_pack_start (GTK_BOX(widget), user_page(wizard), FALSE, FALSE, 0);
890 PACK_WARNING(_("Bold fields must be completed"));
892 wizard->pages = g_slist_append(wizard->pages, widget);
897 widget = create_page (wizard, _("Sending mail"));
898 gtk_box_pack_start (GTK_BOX(widget), smtp_page(wizard), FALSE, FALSE, 0);
899 PACK_WARNING(_("Bold fields must be completed"));
901 wizard->pages = g_slist_append(wizard->pages, widget);
903 /* recv+auth page: 3 */
906 widget = create_page (wizard, _("Receiving mail"));
907 gtk_box_pack_start (GTK_BOX(widget), recv_page(wizard), FALSE, FALSE, 0);
908 PACK_WARNING(_("Bold fields must be completed"));
910 wizard->pages = g_slist_append(wizard->pages, widget);
912 /* mailbox page: 4 */
913 if (create_mailbox) {
916 widget = create_page (wizard, _("Saving mail on disk"));
917 gtk_box_pack_start (GTK_BOX(widget), mailbox_page(wizard), FALSE, FALSE, 0);
918 PACK_WARNING(_("Bold fields must be completed"));
920 wizard->pages = g_slist_append(wizard->pages, widget);
926 widget = create_page (wizard, _("Security"));
927 gtk_box_pack_start (GTK_BOX(widget), ssl_page(wizard), FALSE, FALSE, 0);
928 PACK_WARNING(_("Bold fields must be completed"));
930 wizard->pages = g_slist_append(wizard->pages, widget);
936 page = create_page(wizard, _("Configuration finished"));
938 wizard->pages = g_slist_append(wizard->pages, page);
939 widget = stock_pixmap_widget(wizard->window,
940 STOCK_PIXMAP_SYLPHEED_LOGO);
942 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
944 text = g_strdup(_("Sylpheed-Claws is now ready.\n\n"
945 "Click Save to start."));
946 widget = gtk_label_new(text);
947 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
951 for (cur = wizard->pages; cur && cur->data; cur = cur->next) {
952 gtk_notebook_append_page (GTK_NOTEBOOK(wizard->notebook),
953 GTK_WIDGET(cur->data), NULL);
956 g_signal_connect(G_OBJECT(wizard->window), "delete_event",
957 G_CALLBACK(wizard_close_cb), wizard);
958 gtk_widget_show_all (wizard->window);
960 gtk_widget_hide(wizard->recv_imap_label);
961 gtk_widget_hide(wizard->recv_imap_subdir);
963 while (!wizard->finished)
964 gtk_main_iteration();
966 result = wizard->result;
970 gtk_widget_show(mainwin->window);