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"
61 #include "prefs_common.h"
81 GtkWidget *organization;
83 GtkWidget *mailbox_name;
85 GtkWidget *smtp_server;
88 GtkWidget *recv_label;
89 GtkWidget *recv_server;
90 GtkWidget *recv_username;
91 GtkWidget *recv_password;
92 GtkWidget *recv_username_label;
93 GtkWidget *recv_password_label;
94 GtkWidget *recv_imap_label;
95 GtkWidget *recv_imap_subdir;
98 GtkWidget *smtp_use_ssl;
99 GtkWidget *recv_use_ssl;
102 gboolean create_mailbox;
108 static void initialize_fonts(WizardWindow *wizard)
110 GtkWidget *widget = wizard->email;
111 gint size = pango_font_description_get_size(
112 widget->style->font_desc)
116 tmp = g_strdup(prefs_common.textfont);
117 if (strrchr(tmp, ' ')) {
118 *(strrchr(tmp, ' ')) = '\0';
119 new = g_strdup_printf("%s %d", tmp, size);
120 g_free(prefs_common.textfont);
121 prefs_common.textfont = new;
125 tmp = g_strdup(prefs_common.smallfont);
126 if (strrchr(tmp, ' ')) {
127 *(strrchr(tmp, ' ')) = '\0';
128 new = g_strdup_printf("%s %d", tmp, size);
129 g_free(prefs_common.smallfont);
130 prefs_common.smallfont = new;
134 tmp = g_strdup(prefs_common.normalfont);
135 if (strrchr(tmp, ' ')) {
136 *(strrchr(tmp, ' ')) = '\0';
137 new = g_strdup_printf("%s %d", tmp, size);
138 g_free(prefs_common.normalfont);
139 prefs_common.normalfont = new;
144 static void write_welcome_email(WizardWindow *wizard)
151 const gchar *mailbox = gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name));
152 Folder *folder = folder_find_from_path(mailbox);
153 FolderItem *inbox = folder ? folder->inbox:NULL;
154 gchar *file = get_tmp_file();
156 get_rfc822_date(buf_date, sizeof(buf_date));
158 subj = g_strdup_printf(_("Welcome to Sylpheed-Claws"));
160 head = g_strdup_printf(
161 "From: %s <sylpheed-claws-users@lists.sf.net>\n"
165 "Content-Type: text/plain; charset=UTF-8\n",
166 _("Sylpheed-Claws Team"),
167 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)),
168 gtk_entry_get_text(GTK_ENTRY(wizard->email)),
170 body = g_strdup_printf(
172 "Welcome to Sylpheed-Claws\n"
173 "-------------------------\n"
175 "Now that you have set up your account you can fetch your\n"
176 "mail by clicking the 'Get Mail' button at the left of the\n"
179 "You can change your Account Preferences by using the menu\n"
180 "entry '/Configuration/Preferences for current account'\n"
181 "and change the general Preferences by using\n"
182 "'/Configuration/Preferences'.\n"
184 "You can find futher information in the Sylpheed-Claws manual,\n"
185 "which can be accessed by using the menu entry '/Help/Manual'\n"
186 "or online at the URL given below.\n"
194 "Mailing Lists: <%s>\n"
198 "Sylpheed-Claws is free software, released under the terms\n"
199 "of the GNU General Public License, version 2 or later, as\n"
200 "published by the Free Software Foundation, 51 Franklin Street,\n"
201 "Fifth Floor, Boston, MA 02110-1301, USA. The license can be\n"
206 "If you wish to donate to the Sylpheed-Claws project you can do\n"
208 HOMEPAGE_URI, MANUAL_URI, FAQ_URI, THEMES_URI, MAILING_LIST_URI,
209 GPL_URI, DONATE_URI);
211 msg = g_strconcat(head, body, NULL);
213 if (inbox && inbox->total_msgs == 0
214 && str_write_to_file(msg, file) >= 0) {
215 MsgFlags flags = { MSG_UNREAD|MSG_NEW, 0};
216 folder_item_add_msg(inbox, file, &flags, FALSE);
224 static gboolean wizard_write_config(WizardWindow *wizard)
226 gboolean mailbox_ok = FALSE;
227 PrefsAccount *prefs_account = prefs_account_new();
228 GList *account_list = NULL;
229 GtkWidget *menu, *menuitem;
231 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(wizard->recv_type));
232 menuitem = gtk_menu_get_active(GTK_MENU(menu));
233 prefs_account->protocol = GPOINTER_TO_INT
234 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
236 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) {
237 mailbox_ok = setup_write_mailbox_path(wizard->mainwin,
238 gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)));
243 gtk_notebook_set_current_page (
244 GTK_NOTEBOOK(wizard->notebook),
249 if (prefs_account->protocol != A_LOCAL)
250 prefs_account->account_name = g_strdup_printf("%s@%s",
251 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)),
252 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
254 prefs_account->account_name = g_strdup_printf("%s",
255 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
257 prefs_account->name = g_strdup(
258 gtk_entry_get_text(GTK_ENTRY(wizard->full_name)));
259 prefs_account->address = g_strdup(
260 gtk_entry_get_text(GTK_ENTRY(wizard->email)));
261 prefs_account->organization = g_strdup(
262 gtk_entry_get_text(GTK_ENTRY(wizard->organization)));
263 prefs_account->smtp_server = g_strdup(
264 gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)));
266 if (prefs_account->protocol != A_LOCAL)
267 prefs_account->recv_server = g_strdup(
268 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
270 prefs_account->local_mbox = g_strdup(
271 gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)));
273 prefs_account->userid = g_strdup(
274 gtk_entry_get_text(GTK_ENTRY(wizard->recv_username)));
275 prefs_account->passwd = g_strdup(
276 gtk_entry_get_text(GTK_ENTRY(wizard->recv_password)));
279 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl)))
280 prefs_account->ssl_smtp = SSL_TUNNEL;
281 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->recv_use_ssl))) {
282 if (prefs_account->protocol == A_IMAP4)
283 prefs_account->ssl_imap = SSL_TUNNEL;
285 prefs_account->ssl_pop = SSL_TUNNEL;
288 if (prefs_account->protocol == A_IMAP4) {
289 gchar *directory = gtk_editable_get_chars(
290 GTK_EDITABLE(wizard->recv_imap_subdir), 0, -1);
291 if (directory && strlen(directory)) {
292 prefs_account->imap_dir = g_strdup(directory);
297 account_list = g_list_append(account_list, prefs_account);
298 prefs_account_write_config_all(account_list);
299 prefs_account_free(prefs_account);
300 account_read_config_all();
302 initialize_fonts(wizard);
303 if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4)
304 write_welcome_email(wizard);
309 static GtkWidget* create_page (WizardWindow *wizard, const char * title)
317 vbox = gtk_vbox_new (FALSE, 6);
318 gtk_container_set_border_width (GTK_CONTAINER(vbox), 10);
320 /* create the titlebar */
321 hbox = gtk_hbox_new (FALSE, 12);
322 image = stock_pixmap_widget(wizard->window,
323 STOCK_PIXMAP_SYLPHEED_ICON);
324 gtk_box_pack_start (GTK_BOX(hbox), image, FALSE, FALSE, 0);
325 title_string = g_strconcat ("<span size=\"xx-large\" weight=\"ultrabold\">", title ? title : "", "</span>", NULL);
326 w = gtk_label_new (title_string);
327 gtk_label_set_use_markup (GTK_LABEL(w), TRUE);
328 g_free (title_string);
329 gtk_box_pack_start (GTK_BOX(hbox), w, FALSE, FALSE, 0);
331 /* pack the titlebar */
332 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
334 /* pack the separator */
335 gtk_box_pack_start (GTK_BOX(vbox), gtk_hseparator_new(), FALSE, FALSE, 0);
338 w = gtk_alignment_new (0, 0, 0, 0);
339 gtk_widget_set_size_request (w, 0, 6);
340 gtk_box_pack_start (GTK_BOX(vbox), w, FALSE, FALSE, 0);
345 #define GTK_TABLE_ADD_ROW_AT(table,text,entry,i) { \
346 GtkWidget *label = gtk_label_new(text); \
347 gtk_table_attach(GTK_TABLE(table), label, \
348 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0); \
349 if (GTK_IS_MISC(label)) \
350 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); \
351 gtk_table_attach(GTK_TABLE(table), entry, \
352 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0); \
355 static gchar *get_default_email_addr(void)
357 gchar *domain_name = g_strdup(get_domain_name());
359 if (strchr(domain_name, '.') != strrchr(domain_name, '.')
360 && strlen(strchr(domain_name, '.')) > 6) {
361 gchar *tmp = g_strdup(strchr(domain_name, '.')+1);
365 result = g_strdup_printf("%s@%s",
372 static gchar *get_default_server(WizardWindow * wizard, const gchar *type)
374 gchar *domain_name = g_strdup(get_domain_name());
377 if (strchr(domain_name, '.') != strrchr(domain_name, '.')
378 && strlen(strchr(domain_name, '.')) > 6) {
379 gchar *tmp = g_strdup(strchr(domain_name, '.')+1);
382 } else if (strchr(domain_name, '.') == NULL) {
383 /* only hostname found, use email suffix */
385 mail = gtk_editable_get_chars(GTK_EDITABLE(wizard->email), 0, -1);
387 if (strlen (mail) && strstr(mail, "@")) {
389 domain_name = g_strdup(strstr(mail, "@")+1);
393 result = g_strdup_printf("%s.%s",
399 static void wizard_email_changed(GtkWidget *widget, gpointer data)
401 WizardWindow *wizard = (WizardWindow *)data;
402 RecvProtocol protocol;
404 protocol = GPOINTER_TO_INT
405 (g_object_get_data(G_OBJECT(wizard->recv_type), MENU_VAL_ID));
407 text = get_default_server(wizard, "smtp");
408 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
411 if (protocol == A_POP3) {
412 text = get_default_server(wizard, "pop");
413 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
415 } else if (protocol == A_IMAP4) {
416 text = get_default_server(wizard, "imap");
417 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
419 } else if (protocol == A_LOCAL) {
420 gchar *mbox = g_strdup_printf("/var/mail/%s", g_get_user_name());
421 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), mbox);
426 static GtkWidget* user_page (WizardWindow * wizard)
428 GtkWidget *table = gtk_table_new(3,2, FALSE);
432 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
433 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
435 wizard->full_name = gtk_entry_new();
436 gtk_entry_set_text(GTK_ENTRY(wizard->full_name), g_get_real_name());
437 GTK_TABLE_ADD_ROW_AT(table, _("Your name:"),
438 wizard->full_name, i); i++;
440 wizard->email = gtk_entry_new();
441 text = get_default_email_addr();
442 gtk_entry_set_text(GTK_ENTRY(wizard->email), text);
444 GTK_TABLE_ADD_ROW_AT(table, _("Your email address:"),
445 wizard->email, i); i++;
447 wizard->organization = gtk_entry_new();
448 GTK_TABLE_ADD_ROW_AT(table, _("Your organization:"),
449 wizard->organization, i); i++;
451 g_signal_connect(G_OBJECT(wizard->email), "changed",
452 G_CALLBACK(wizard_email_changed),
457 static GtkWidget* mailbox_page (WizardWindow * wizard)
459 GtkWidget *table = gtk_table_new(1,2, FALSE);
462 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
463 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
465 wizard->mailbox_name = gtk_entry_new();
466 gtk_entry_set_text(GTK_ENTRY(wizard->mailbox_name), "Mail");
467 GTK_TABLE_ADD_ROW_AT(table, _("Mailbox name:"),
468 wizard->mailbox_name, i); i++;
473 static GtkWidget* smtp_page (WizardWindow * wizard)
475 GtkWidget *table = gtk_table_new(1,2, FALSE);
479 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
480 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
482 wizard->smtp_server = gtk_entry_new();
483 text = get_default_server(wizard, "smtp");
484 gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text);
486 GTK_TABLE_ADD_ROW_AT(table, _("SMTP server address:"),
487 wizard->smtp_server, i); i++;
491 static void wizard_protocol_changed(GtkMenuItem *menuitem, gpointer data)
493 WizardWindow *wizard = (WizardWindow *)data;
494 RecvProtocol protocol;
496 protocol = GPOINTER_TO_INT
497 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
499 if (protocol == A_POP3) {
500 text = get_default_server(wizard, "pop");
501 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
502 gtk_widget_hide(wizard->recv_imap_label);
503 gtk_widget_hide(wizard->recv_imap_subdir);
504 gtk_widget_show(wizard->recv_username);
505 gtk_widget_show(wizard->recv_password);
506 gtk_widget_show(wizard->recv_username_label);
507 gtk_widget_show(wizard->recv_password_label);
508 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("Server address:"));
510 } else if (protocol == A_IMAP4) {
511 text = get_default_server(wizard, "imap");
512 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
513 gtk_widget_show(wizard->recv_imap_label);
514 gtk_widget_show(wizard->recv_imap_subdir);
515 gtk_widget_show(wizard->recv_username);
516 gtk_widget_show(wizard->recv_password);
517 gtk_widget_show(wizard->recv_username_label);
518 gtk_widget_show(wizard->recv_password_label);
519 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("Server address:"));
521 } else if (protocol == A_LOCAL) {
522 gchar *mbox = g_strdup_printf("/var/mail/%s", g_get_user_name());
523 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), mbox);
525 gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("Local mailbox:"));
526 gtk_widget_hide(wizard->recv_imap_label);
527 gtk_widget_hide(wizard->recv_imap_subdir);
528 gtk_widget_hide(wizard->recv_username);
529 gtk_widget_hide(wizard->recv_password);
530 gtk_widget_hide(wizard->recv_username_label);
531 gtk_widget_hide(wizard->recv_password_label);
535 static GtkWidget* recv_page (WizardWindow * wizard)
537 GtkWidget *table = gtk_table_new(5,2, FALSE);
538 GtkWidget *menu = gtk_menu_new();
543 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
544 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
546 wizard->recv_type = gtk_option_menu_new();
548 MENUITEM_ADD (menu, menuitem, _("POP3"), A_POP3);
549 g_signal_connect(G_OBJECT(menuitem), "activate",
550 G_CALLBACK(wizard_protocol_changed),
552 MENUITEM_ADD (menu, menuitem, _("IMAP"), A_IMAP4);
553 g_signal_connect(G_OBJECT(menuitem), "activate",
554 G_CALLBACK(wizard_protocol_changed),
556 MENUITEM_ADD (menu, menuitem, _("Local mbox file"), A_LOCAL);
557 g_signal_connect(G_OBJECT(menuitem), "activate",
558 G_CALLBACK(wizard_protocol_changed),
561 gtk_option_menu_set_menu (GTK_OPTION_MENU (wizard->recv_type), menu);
562 GTK_TABLE_ADD_ROW_AT(table, _("Server type:"),
563 wizard->recv_type, i); i++;
565 wizard->recv_server = gtk_entry_new();
566 text = get_default_server(wizard, "pop");
567 gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text);
570 wizard->recv_label = gtk_label_new(_("Server address:"));
571 gtk_table_attach(GTK_TABLE(table), wizard->recv_label,
572 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
573 if (GTK_IS_MISC(wizard->recv_label))
574 gtk_misc_set_alignment(GTK_MISC(wizard->recv_label), 1, 0.5);
575 gtk_table_attach(GTK_TABLE(table), wizard->recv_server,
576 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
579 wizard->recv_username = gtk_entry_new();
580 wizard->recv_username_label = gtk_label_new(_("Username:"));
581 gtk_table_attach(GTK_TABLE(table), wizard->recv_username_label,
582 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
583 if (GTK_IS_MISC(wizard->recv_username_label))
584 gtk_misc_set_alignment(GTK_MISC(wizard->recv_username_label), 1, 0.5);
585 gtk_table_attach(GTK_TABLE(table), wizard->recv_username,
586 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
589 wizard->recv_password = gtk_entry_new();
590 wizard->recv_password_label = gtk_label_new(_("Password:"));
591 gtk_table_attach(GTK_TABLE(table), wizard->recv_password_label,
592 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
593 if (GTK_IS_MISC(wizard->recv_password_label))
594 gtk_misc_set_alignment(GTK_MISC(wizard->recv_password_label), 1, 0.5);
595 gtk_table_attach(GTK_TABLE(table), wizard->recv_password,
596 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
597 gtk_entry_set_visibility(GTK_ENTRY(wizard->recv_password), FALSE);
600 wizard->recv_imap_subdir = gtk_entry_new();
601 wizard->recv_imap_label = gtk_label_new(_("IMAP server directory:"));
603 gtk_table_attach(GTK_TABLE(table), wizard->recv_imap_label,
604 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
605 if (GTK_IS_MISC(wizard->recv_imap_label))
606 gtk_misc_set_alignment(GTK_MISC(wizard->recv_imap_label), 1, 0.5);
607 gtk_table_attach(GTK_TABLE(table), wizard->recv_imap_subdir,
608 1,2,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
616 static GtkWidget* ssl_page (WizardWindow * wizard)
618 GtkWidget *table = gtk_table_new(2,2, FALSE);
621 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
622 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
624 wizard->smtp_use_ssl = gtk_check_button_new_with_label(
625 _("Use SSL to connect to SMTP server"));
626 gtk_table_attach(GTK_TABLE(table), wizard->smtp_use_ssl,
627 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0); i++;
629 wizard->recv_use_ssl = gtk_check_button_new_with_label(
630 _("Use SSL to connect to receiving server"));
631 gtk_table_attach(GTK_TABLE(table), wizard->recv_use_ssl,
632 0,1,i,i+1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
639 wizard_response_cb (GtkDialog * dialog, int response, gpointer data)
641 WizardWindow * wizard = (WizardWindow *)data;
642 int current_page, num_pages;
643 GtkWidget *menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(wizard->recv_type));
644 GtkWidget *menuitem = gtk_menu_get_active(GTK_MENU(menu));
645 gint protocol = GPOINTER_TO_INT
646 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
647 gboolean skip_mailbox_page = FALSE;
649 if (protocol == A_IMAP4) {
650 skip_mailbox_page = TRUE;
653 num_pages = g_slist_length(wizard->pages);
655 current_page = gtk_notebook_get_current_page (
656 GTK_NOTEBOOK(wizard->notebook));
657 if (response == CANCEL)
659 wizard->result = FALSE;
660 wizard->finished = TRUE;
661 gtk_widget_destroy (GTK_WIDGET(dialog));
663 else if (response == FINISHED)
665 if (!wizard_write_config(wizard)) {
666 current_page = gtk_notebook_get_current_page (
667 GTK_NOTEBOOK(wizard->notebook));
670 wizard->result = TRUE;
671 wizard->finished = TRUE;
672 gtk_widget_destroy (GTK_WIDGET(dialog));
676 if (response == GO_BACK)
678 if (current_page > 0) {
680 if (current_page == 4 && skip_mailbox_page) {
684 gtk_notebook_set_current_page (
685 GTK_NOTEBOOK(wizard->notebook),
689 else if (response == GO_FORWARD)
691 if (current_page < (num_pages-1)) {
693 if (current_page == 4 && skip_mailbox_page) {
697 gtk_notebook_set_current_page (
698 GTK_NOTEBOOK(wizard->notebook),
703 gtk_dialog_set_response_sensitive (dialog, GO_BACK,
705 gtk_dialog_set_response_sensitive (dialog, GO_FORWARD,
706 current_page < (num_pages - 1));
707 gtk_dialog_set_response_sensitive (dialog, FINISHED,
708 current_page == (num_pages - 1));
712 static gint wizard_close_cb(GtkWidget *widget, GdkEventAny *event,
715 WizardWindow *wizard = (WizardWindow *)data;
716 wizard->result = FALSE;
717 wizard->finished = TRUE;
722 gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) {
723 WizardWindow *wizard = g_new0(WizardWindow, 1);
730 wizard->mainwin = mainwin;
731 wizard->create_mailbox = create_mailbox;
733 gtk_widget_hide(mainwin->window);
735 wizard->window = gtk_dialog_new_with_buttons (_("Sylpheed-Claws Setup Wizard"),
737 GTK_STOCK_GO_BACK, GO_BACK,
738 GTK_STOCK_GO_FORWARD, GO_FORWARD,
739 GTK_STOCK_SAVE, FINISHED,
740 GTK_STOCK_CANCEL, CANCEL,
743 g_signal_connect(wizard->window, "response",
744 G_CALLBACK(wizard_response_cb), wizard);
745 gtk_widget_realize(wizard->window);
746 gtk_dialog_set_default_response(GTK_DIALOG(wizard->window),
748 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
750 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
752 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
754 gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window),
757 wizard->notebook = gtk_notebook_new();
758 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(wizard->notebook), FALSE);
759 gtk_notebook_set_show_border(GTK_NOTEBOOK(wizard->notebook), FALSE);
760 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(wizard->window)->vbox),
761 wizard->notebook, TRUE, TRUE, 0);
763 wizard->pages = NULL;
766 page = create_page(wizard, _("Welcome to Sylpheed-Claws"));
768 wizard->pages = g_slist_append(wizard->pages, page);
769 widget = stock_pixmap_widget(wizard->window,
770 STOCK_PIXMAP_SYLPHEED_LOGO);
772 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
774 text = g_strdup(_("Welcome to the Sylpheed-Claws setup wizard.\n\n"
775 "We will begin by defining some basic "
776 "information about you and your most common "
777 "mail options so that you can start to use "
778 "Sylpheed-Claws in less than five minutes."));
779 widget = gtk_label_new(text);
780 gtk_label_set_line_wrap(GTK_LABEL(widget), TRUE);
781 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
785 widget = create_page (wizard, _("About You"));
786 gtk_box_pack_start (GTK_BOX(widget), user_page(wizard), FALSE, FALSE, 0);
787 wizard->pages = g_slist_append(wizard->pages, widget);
790 widget = create_page (wizard, _("Sending mail"));
791 gtk_box_pack_start (GTK_BOX(widget), smtp_page(wizard), FALSE, FALSE, 0);
792 wizard->pages = g_slist_append(wizard->pages, widget);
794 /* recv+auth page: 3 */
795 widget = create_page (wizard, _("Receiving mail"));
796 gtk_box_pack_start (GTK_BOX(widget), recv_page(wizard), FALSE, FALSE, 0);
797 wizard->pages = g_slist_append(wizard->pages, widget);
799 /* mailbox page: 4 */
800 if (create_mailbox) {
801 widget = create_page (wizard, _("Saving mail on disk"));
802 gtk_box_pack_start (GTK_BOX(widget), mailbox_page(wizard), FALSE, FALSE, 0);
803 wizard->pages = g_slist_append(wizard->pages, widget);
807 widget = create_page (wizard, _("Security"));
808 gtk_box_pack_start (GTK_BOX(widget), ssl_page(wizard), FALSE, FALSE, 0);
809 wizard->pages = g_slist_append(wizard->pages, widget);
813 page = create_page(wizard, _("Configuration finished"));
815 wizard->pages = g_slist_append(wizard->pages, page);
816 widget = stock_pixmap_widget(wizard->window,
817 STOCK_PIXMAP_SYLPHEED_LOGO);
819 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
821 text = g_strdup(_("Sylpheed-Claws is now ready.\n\n"
822 "Click Save to start."));
823 widget = gtk_label_new(text);
824 gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0);
828 for (cur = wizard->pages; cur && cur->data; cur = cur->next) {
829 gtk_notebook_append_page (GTK_NOTEBOOK(wizard->notebook),
830 GTK_WIDGET(cur->data), NULL);
833 g_signal_connect(G_OBJECT(wizard->window), "delete_event",
834 G_CALLBACK(wizard_close_cb), wizard);
835 gtk_widget_show_all (wizard->window);
837 gtk_widget_hide(wizard->recv_imap_label);
838 gtk_widget_hide(wizard->recv_imap_subdir);
840 while (!wizard->finished)
841 gtk_main_iteration();
843 result = wizard->result;
847 gtk_widget_show(mainwin->window);