diff options
Diffstat (limited to 'mail')
-rw-r--r-- | mail/ChangeLog | 43 | ||||
-rw-r--r-- | mail/Makefile.am | 2 | ||||
-rw-r--r-- | mail/mail-account-editor.c | 827 | ||||
-rw-r--r-- | mail/mail-account-editor.h | 51 | ||||
-rw-r--r-- | mail/mail-account-gui.c | 1086 | ||||
-rw-r--r-- | mail/mail-account-gui.h | 99 | ||||
-rw-r--r-- | mail/mail-accounts.c | 49 | ||||
-rw-r--r-- | mail/mail-accounts.h | 1 | ||||
-rw-r--r-- | mail/mail-config-druid.c | 1404 | ||||
-rw-r--r-- | mail/mail-config-druid.h | 75 | ||||
-rw-r--r-- | mail/mail-config.c | 61 | ||||
-rw-r--r-- | mail/mail-config.glade | 4391 | ||||
-rw-r--r-- | mail/mail-config.h | 6 |
13 files changed, 3122 insertions, 4973 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index cf7589c04f..41fca130d9 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,46 @@ +2001-03-27 Dan Winship <danw@ximian.com> + + * mail-config.glade: Probably the very last new config dialog + ever. (Ha ha). From Anna, based on a story by me. + + * mail-account-gui.c: New code for the new mail-config.glade. This + abstracts out all of the common code between the account editor + and the druid. It also handles the spiffy new provider-specific + config stuff. + + FIXME: The code to check if a service is ok or not is no longer + there... waiting until the online/offline stuff from the shell + appears. + + * mail-account-editor.c, mail-config-druid.c: These are much + smaller now, since most of the interesting bits moved to + mail-account-gui.c + + * mail-accounts.c: Add an enabled/disabled column/button to + replace the checkbox that used to be in the editor, because it + really makes more sense to have it out here. This looks ugly. + Probably ought to ETable it... + (load_accounts): Fill in the enabled column. + (mail_select, mail_unselect): toggle the sensitivity and name of + the Enable/Disable button appropriately + (mail_able): Handle the enable/disable button. + + * mail-config.c: Remove reply-to from MailConfigIdentity since it + didn't belong there (and wasn't being saved anyway). + (mail_config_check_service): Simplify this a bit. This really + needs to pop up a dialog with a "connecting..." message and a + cancel button. + + * mail-ops.c (uid_cachename_hack): Kludge, copied+modified from + mail_config_folder_to_cachename to deal with the different + behavior of the URL code now. Will go away when the keep-on-server + code moves. + (get_folderinfo_get): Only pass "subscribed_only" to + camel_store_get_folder_info if the store supports subscriptions... + + * mail-local.c (local_provider): Update this to reflect the + CamelProvider structure change + 2001-03-26 Jeffrey Stedfast <fejj@ximian.com> * mail-callbacks.c (transfer_msg): Add "vtrash" as an allowed mail diff --git a/mail/Makefile.am b/mail/Makefile.am index 84591e5b88..4d967545e9 100644 --- a/mail/Makefile.am +++ b/mail/Makefile.am @@ -55,6 +55,8 @@ evolution_mail_SOURCES = \ mail-accounts.h \ mail-account-editor.c \ mail-account-editor.h \ + mail-account-gui.c \ + mail-account-gui.h \ mail-autofilter.c \ mail-autofilter.h \ mail-callbacks.c \ diff --git a/mail/mail-account-editor.c b/mail/mail-account-editor.c index 751ae57646..5765e40cd3 100644 --- a/mail/mail-account-editor.c +++ b/mail/mail-account-editor.c @@ -1,8 +1,10 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* - * Authors: Jeffrey Stedfast <fejj@helixcode.com> + * Authors: + * Jeffrey Stedfast <fejj@ximian.com> + * Dan Winship <danw@ximian.com> * - * Copyright 2001 Helix Code, Inc. (www.helixcode.com) + * Copyright 2001 Ximian, Inc. (www.ximian.com) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,10 +29,10 @@ #include <string.h> #include <camel/camel-url.h> #include <gal/widgets/e-unicode.h> +#include <gal/widgets/e-gui-utils.h> static void mail_account_editor_class_init (MailAccountEditorClass *class); -static void mail_account_editor_init (MailAccountEditor *editor); -static void mail_account_editor_finalise (GtkObject *obj); +static void mail_account_editor_finalize (GtkObject *obj); static GnomeDialogClass *parent_class; @@ -39,21 +41,21 @@ GtkType mail_account_editor_get_type () { static GtkType type = 0; - + if (!type) { GtkTypeInfo type_info = { "MailAccountEditor", sizeof (MailAccountEditor), sizeof (MailAccountEditorClass), (GtkClassInitFunc) mail_account_editor_class_init, - (GtkObjectInitFunc) mail_account_editor_init, + (GtkObjectInitFunc) NULL, (GtkArgSetFunc) NULL, (GtkArgGetFunc) NULL }; - + type = gtk_type_unique (gnome_dialog_get_type (), &type_info); } - + return type; } @@ -61,230 +63,55 @@ static void mail_account_editor_class_init (MailAccountEditorClass *class) { GtkObjectClass *object_class; - + object_class = (GtkObjectClass *) class; parent_class = gtk_type_class (gnome_dialog_get_type ()); - - object_class->finalize = mail_account_editor_finalise; - /* override methods */ - -} -static void -mail_account_editor_init (MailAccountEditor *o) -{ - ; + object_class->finalize = mail_account_editor_finalize; } static void -mail_account_editor_finalise (GtkObject *obj) +mail_account_editor_finalize (GtkObject *obj) { MailAccountEditor *editor = (MailAccountEditor *) obj; - - gtk_object_unref (GTK_OBJECT (editor->gui)); - - ((GtkObjectClass *)(parent_class))->finalize (obj); -} -static gboolean -is_email (const char *address) -{ - const char *at, *hname; - - g_return_val_if_fail (address != NULL, FALSE); - - at = strchr (address, '@'); - /* make sure we have an '@' and that it's not the first or last char */ - if (!at || at == address || *(at + 1) == '\0') - return FALSE; - - hname = at + 1; - /* make sure the first and last chars aren't '.' */ - if (*hname == '.' || hname[strlen (hname) - 1] == '.') - return FALSE; - - return strchr (hname, '.') != NULL; -} - -/* callbacks */ -static void -entry_changed (GtkEntry *entry, gpointer data) -{ - MailAccountEditor *editor = data; - char *account_name, *name, *address; - gboolean sensitive; - - account_name = gtk_entry_get_text (editor->account_name); - name = gtk_entry_get_text (editor->name); - address = gtk_entry_get_text (editor->email); - - sensitive = account_name && *account_name && name && *name && is_email (address); - - gnome_dialog_set_sensitive (GNOME_DIALOG (editor), 0, sensitive); - gnome_dialog_set_sensitive (GNOME_DIALOG (editor), 1, sensitive); + mail_account_gui_destroy (editor->gui); + ((GtkObjectClass *)(parent_class))->finalize (obj); } static gboolean apply_changes (MailAccountEditor *editor) { MailConfigAccount *account; - char *host, *pport, *str; - CamelURL *source_url = NULL, *transport_url; - gboolean retval = TRUE; - int port; - - account = (MailConfigAccount *) editor->account; - - /* account name */ - if (editor->account_name) { - g_free (account->name); - account->name = e_utf8_gtk_entry_get_text (editor->account_name); - } - - /* identity info */ - g_free (account->id->name); - account->id->name = e_utf8_gtk_entry_get_text (editor->name); - - g_free (account->id->address); - account->id->address = e_utf8_gtk_entry_get_text (editor->email); - - if (editor->reply_to) { - g_free (account->id->reply_to); - account->id->reply_to = e_utf8_gtk_entry_get_text (editor->reply_to); - } - - if (editor->organization) { - g_free (account->id->organization); - account->id->organization = e_utf8_gtk_entry_get_text (editor->organization); - } - - if (editor->signature) { - g_free (account->id->signature); - account->id->signature = gnome_file_entry_get_full_path (editor->signature, TRUE); - } - - /* source */ - if (account->source->url) { - source_url = camel_url_new (account->source->url, NULL); - - g_free (source_url->user); - str = gtk_entry_get_text (editor->source_user); - source_url->user = str && *str ? g_strdup (str) : NULL; - - g_free (source_url->passwd); - str = gtk_entry_get_text (editor->source_passwd); - source_url->passwd = str && *str ? g_strdup (str) : NULL; - - g_free (source_url->authmech); - str = gtk_object_get_data (GTK_OBJECT (editor), "source_authmech"); - source_url->authmech = str && *str ? g_strdup (str) : NULL; - - g_free (source_url->host); - host = g_strdup (gtk_entry_get_text (editor->source_host)); - if (host && (pport = strchr (host, ':'))) { - *pport = '\0'; - port = atoi (pport + 1); - } else { - port = 0; - } - source_url->host = host; - source_url->port = port; - - g_free (source_url->path); - str = gtk_entry_get_text (editor->source_path); - source_url->path = str && *str ? g_strdup (str) : NULL; - - account->source->save_passwd = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->source_save_passwd)); - account->source->keep_on_server = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->keep_on_server)); - - account->source->enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->source_enabled)); - account->source->auto_check = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->source_auto_check)); - account->source->auto_check_time = gtk_spin_button_get_value_as_int (editor->source_auto_timeout); - - /* set the new source url */ - g_free (account->source->url); - account->source->url = camel_url_to_string (source_url, FALSE); - } - - /* transport */ - transport_url = g_new0 (CamelURL, 1); - - if (editor->transport) { - transport_url->protocol = g_strdup (editor->transport->protocol); - } else { - /* workaround for anna's dialog */ - CamelURL *url; - - url = camel_url_new (account->transport->url, NULL); - transport_url->protocol = g_strdup (url->protocol); - camel_url_free (url); - } - - str = gtk_object_get_data (GTK_OBJECT (editor), "transport_authmech"); - transport_url->authmech = str && *str ? g_strdup (str) : NULL; - - if (transport_url->authmech) { - str = gtk_entry_get_text (editor->transport_user); - transport_url->user = str && *str ? g_strdup (str) : NULL; - - str = gtk_entry_get_text (editor->transport_passwd); - transport_url->passwd = str && *str ? g_strdup (str) : NULL; - } - - host = g_strdup (gtk_entry_get_text (editor->transport_host)); - if (host && (pport = strchr (host, ':'))) { - *pport = '\0'; - port = atoi (pport + 1); - } else { - port = 0; - } - transport_url->host = host; - transport_url->port = port; - - /* set the new transport url */ - g_free (account->transport->url); - account->transport->url = camel_url_to_string (transport_url, FALSE); - - account->transport->save_passwd = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->transport_save_passwd)); - - /* check to make sure the source works */ - if (source_url) { - if (mail_config_check_service (source_url, CAMEL_PROVIDER_STORE, FALSE, NULL)) { - /* save the password if we were requested to do so */ - if (account->source->save_passwd && source_url->passwd) { - mail_session_set_password (account->source->url, source_url->passwd); - mail_session_remember_password (account->source->url); - } - } else { - retval = FALSE; - } - camel_url_free (source_url); - } - - /* check to make sure the transport works */ - if (mail_config_check_service (transport_url, CAMEL_PROVIDER_TRANSPORT, FALSE, NULL)) { - /* save the password if we were requested to do so */ - if (account->transport->save_passwd && transport_url->passwd) { - mail_session_set_password (account->transport->url, transport_url->passwd); - mail_session_remember_password (account->transport->url); - } - } else { - retval = FALSE; + int page = -1; + + if (!mail_account_gui_identity_complete (editor->gui) || + !mail_account_gui_management_complete (editor->gui)) + page = 0; + else if (!mail_account_gui_source_complete (editor->gui)) + page = 1; + else if (!mail_account_gui_transport_complete (editor->gui)) + page = 3; + + if (page != -1) { + gtk_notebook_set_page (editor->notebook, page); + e_notice (NULL, GNOME_MESSAGE_BOX_ERROR, _("You have not filled in all of the required information.")); + return FALSE; } - - camel_url_free (transport_url); - + + mail_account_gui_save (editor->gui); + account = editor->gui->account; + /* save any changes we may have */ mail_config_write (); - - return retval; + return TRUE; } static void apply_clicked (GtkWidget *widget, gpointer data) { MailAccountEditor *editor = data; - + apply_changes (editor); } @@ -292,450 +119,51 @@ static void ok_clicked (GtkWidget *widget, gpointer data) { MailAccountEditor *editor = data; - - if (apply_changes (editor)) { + + if (apply_changes (editor)) gtk_widget_destroy (GTK_WIDGET (editor)); - } else { - GtkWidget *mbox; - - mbox = gnome_message_box_new (_("One or more of your servers are not configured correctly.\n" - "Do you wish to save anyway?"), - GNOME_MESSAGE_BOX_WARNING, - GNOME_STOCK_BUTTON_YES, - GNOME_STOCK_BUTTON_NO, NULL); - - gnome_dialog_set_default (GNOME_DIALOG (mbox), 1); - gtk_widget_grab_focus (GTK_WIDGET (GNOME_DIALOG (mbox)->buttons->data)); - - gnome_dialog_set_parent (GNOME_DIALOG (mbox), GTK_WINDOW (editor)); - - if (gnome_dialog_run_and_close (GNOME_DIALOG (mbox)) == 0) - gtk_widget_destroy (GTK_WIDGET (editor)); - } } static void cancel_clicked (GtkWidget *widget, gpointer data) { MailAccountEditor *editor = data; - + gtk_widget_destroy (GTK_WIDGET (editor)); } static void -source_auth_type_changed (GtkWidget *widget, gpointer user_data) +switch_page (GtkNotebook *notebook, GtkNotebookPage *page, + int page_num, gpointer user_data) { MailAccountEditor *editor = user_data; - CamelServiceAuthType *authtype; - gboolean sensitive; - GtkWidget *label; - - authtype = gtk_object_get_data (GTK_OBJECT (widget), "authtype"); - - gtk_object_set_data (GTK_OBJECT (editor), "source_authmech", authtype->authproto); - - if (authtype->need_password) - sensitive = TRUE; - else - sensitive = FALSE; - - label = glade_xml_get_widget (editor->gui, "lblSourcePasswd"); - gtk_widget_set_sensitive (label, sensitive); - gtk_widget_set_sensitive (GTK_WIDGET (editor->source_passwd), sensitive); - gtk_widget_set_sensitive (GTK_WIDGET (editor->source_save_passwd), sensitive); -} + MailConfigService *source = editor->gui->account->source; + MailAccountGuiService *gsrc = &editor->gui->source; + char *url; -static void -source_auth_init (MailAccountEditor *editor, CamelURL *url) -{ - GtkWidget *menu, *item, *authmech = NULL; - CamelServiceAuthType *authtype; - GList *authtypes = NULL; - guint i = 0, history = 0; - - menu = gtk_menu_new (); - gtk_option_menu_remove_menu (editor->source_auth); - - if (!url || !mail_config_check_service (url, CAMEL_PROVIDER_STORE, FALSE, &authtypes)) { - gtk_option_menu_set_menu (editor->source_auth, menu); - + if (page_num != 2) return; - } - - if (authtypes) { - GList *l; - - l = authtypes; - while (l) { - authtype = l->data; - - item = gtk_menu_item_new_with_label (authtype->name); - gtk_object_set_data (GTK_OBJECT (item), "authtype", authtype); - gtk_signal_connect (GTK_OBJECT (item), "activate", - GTK_SIGNAL_FUNC (source_auth_type_changed), - editor); - - gtk_menu_append (GTK_MENU (menu), item); - - gtk_widget_show (item); - - if (!authmech || (url->authmech && !g_strcasecmp (authtype->authproto, url->authmech))) { - authmech = item; - history = i; - } - - l = l->next; - i++; - } - } - - gtk_option_menu_set_menu (editor->source_auth, menu); - - if (authmech) { - gtk_signal_emit_by_name (GTK_OBJECT (authmech), "activate", editor); - gtk_option_menu_set_history (editor->source_auth, history); - } -} -static void -transport_auth_type_changed (GtkWidget *widget, gpointer user_data) -{ - MailAccountEditor *editor = user_data; - CamelServiceAuthType *authtype; - GtkWidget *user, *passwd; - gboolean sensitive; - - authtype = gtk_object_get_data (GTK_OBJECT (widget), "authtype"); - - gtk_object_set_data (GTK_OBJECT (editor), "transport_authmech", - authtype ? authtype->authproto : NULL); - - if (authtype && authtype->need_password) - sensitive = TRUE; + if (gsrc->provider && !strncmp (gsrc->provider->protocol, source->url, + strlen (gsrc->provider->protocol))) + url = source->url; else - sensitive = FALSE; - - user = glade_xml_get_widget (editor->gui, "lblTransportUser"); - passwd = glade_xml_get_widget (editor->gui, "lblTransportPasswd"); - gtk_widget_set_sensitive (user, sensitive); - gtk_widget_set_sensitive (passwd, sensitive); - gtk_widget_set_sensitive (GTK_WIDGET (editor->transport_user), sensitive); - gtk_widget_set_sensitive (GTK_WIDGET (editor->transport_passwd), sensitive); - gtk_widget_set_sensitive (GTK_WIDGET (editor->transport_save_passwd), sensitive); -} - -static void -transport_auth_init (MailAccountEditor *editor, CamelURL *url) -{ - GtkWidget *authmech = NULL; - GtkWidget *menu, *item; - CamelServiceAuthType *authtype; - GList *authtypes = NULL; - guint i = 0, history = 0; - - menu = gtk_menu_new (); - gtk_option_menu_remove_menu (editor->transport_auth); - - if (!url || !mail_config_check_service (url, CAMEL_PROVIDER_TRANSPORT, FALSE, &authtypes)) { - gtk_option_menu_set_menu (editor->transport_auth, menu); - - return; - } - - menu = gtk_menu_new (); - - if (CAMEL_PROVIDER_ALLOWS (editor->transport, CAMEL_URL_ALLOW_AUTH) && - !CAMEL_PROVIDER_NEEDS (editor->transport, CAMEL_URL_NEED_AUTH)) { - /* It allows auth, but doesn't require it so give the user a - way to say he doesn't need it */ - item = gtk_menu_item_new_with_label (_("None")); - gtk_object_set_data (GTK_OBJECT (item), "authtype", NULL); - gtk_signal_connect (GTK_OBJECT (item), "activate", - GTK_SIGNAL_FUNC (transport_auth_type_changed), - editor); - - gtk_menu_append (GTK_MENU (menu), item); - - gtk_widget_show (item); - - authmech = item; - history = i; - i++; - } - - if (authtypes) { - GList *l; - - l = authtypes; - while (l) { - authtype = l->data; - - item = gtk_menu_item_new_with_label (authtype->name); - gtk_object_set_data (GTK_OBJECT (item), "authtype", authtype); - gtk_signal_connect (GTK_OBJECT (item), "activate", - GTK_SIGNAL_FUNC (transport_auth_type_changed), - editor); - - gtk_menu_append (GTK_MENU (menu), item); - - gtk_widget_show (item); - - if (!authmech || (url->authmech && !g_strcasecmp (authtype->authproto, url->authmech))) { - authmech = item; - history = i; - } - - l = l->next; - i++; - } - } - - gtk_option_menu_set_menu (editor->transport_auth, menu); - - if (authmech) { - gtk_signal_emit_by_name (GTK_OBJECT (authmech), "activate", editor); - gtk_option_menu_set_history (editor->transport_auth, history); - if (url->authmech) { - gtk_entry_set_text (editor->transport_user, url->user ? url->user : ""); - gtk_entry_set_text (editor->transport_passwd, url->passwd ? url->passwd : ""); - } else { - gtk_entry_set_text (editor->transport_user, ""); - gtk_entry_set_text (editor->transport_passwd, ""); - } - } -} - -static void -transport_type_changed (GtkWidget *widget, gpointer user_data) -{ - MailAccountEditor *editor = user_data; - CamelProvider *provider; - GtkWidget *label; - - provider = gtk_object_get_data (GTK_OBJECT (widget), "provider"); - editor->transport = provider; - - /* hostname */ - label = glade_xml_get_widget (editor->gui, "lblTransportHost"); - if (CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_HOST)) { - gtk_widget_set_sensitive (GTK_WIDGET (editor->transport_host), TRUE); - gtk_widget_set_sensitive (label, TRUE); - } else { - gtk_entry_set_text (editor->transport_host, ""); - gtk_widget_set_sensitive (GTK_WIDGET (editor->transport_host), FALSE); - gtk_widget_set_sensitive (label, FALSE); - } - - /* username */ - label = glade_xml_get_widget (editor->gui, "lblTransportUser"); - if (CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_AUTH)) { - gtk_widget_set_sensitive (GTK_WIDGET (editor->transport_user), TRUE); - gtk_widget_set_sensitive (label, TRUE); - } else { - gtk_entry_set_text (editor->transport_user, ""); - gtk_widget_set_sensitive (GTK_WIDGET (editor->transport_user), FALSE); - gtk_widget_set_sensitive (label, FALSE); - } - - /* password */ - label = glade_xml_get_widget (editor->gui, "lblTransportPasswd"); - if (CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_AUTH)) { - gtk_widget_set_sensitive (GTK_WIDGET (editor->transport_passwd), TRUE); - gtk_widget_set_sensitive (GTK_WIDGET (editor->transport_save_passwd), TRUE); - gtk_widget_set_sensitive (label, TRUE); - } else { - gtk_entry_set_text (editor->transport_passwd, ""); - gtk_widget_set_sensitive (GTK_WIDGET (editor->transport_passwd), FALSE); - gtk_widget_set_sensitive (GTK_WIDGET (editor->transport_save_passwd), FALSE); - gtk_widget_set_sensitive (label, FALSE); - } - - /* auth */ - label = glade_xml_get_widget (editor->gui, "lblTransportAuth"); - if (CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_AUTH)) { - CamelURL *url; - char *host; - - gtk_widget_set_sensitive (GTK_WIDGET (editor->transport_auth), TRUE); - gtk_widget_set_sensitive (label, TRUE); - - /* regen the auth list */ - url = g_new0 (CamelURL, 1); - url->protocol = g_strdup (provider->protocol); - host = gtk_entry_get_text (editor->transport_host); - if (host && *host) - url->host = g_strdup (host); - else - url->host = g_strdup ("localhost"); - transport_auth_init (editor, url); - camel_url_free (url); - } else { - gtk_widget_set_sensitive (GTK_WIDGET (editor->transport_auth), FALSE); - gtk_widget_set_sensitive (label, FALSE); - } -} + url = NULL; -static void -transport_type_init (MailAccountEditor *editor, CamelURL *url) -{ - GtkWidget *menu, *xport = NULL; - GList *providers, *l; - guint i = 0, history = 0; - - menu = gtk_menu_new (); - gtk_option_menu_remove_menu (GTK_OPTION_MENU (editor->transport_auth)); - - providers = camel_session_list_providers (session, TRUE); - l = providers; - while (l) { - CamelProvider *provider = l->data; - - if (strcmp (provider->domain, "mail")) { - l = l->next; - continue; - } - - if (provider->object_types[CAMEL_PROVIDER_TRANSPORT]) { - GtkWidget *item; - - item = gtk_menu_item_new_with_label (provider->name); - gtk_object_set_data (GTK_OBJECT (item), "provider", provider); - gtk_signal_connect (GTK_OBJECT (item), "activate", - GTK_SIGNAL_FUNC (transport_type_changed), - editor); - - gtk_menu_append (GTK_MENU (menu), item); - - gtk_widget_show (item); - - if (!xport && !g_strcasecmp (provider->protocol, url->protocol)) { - xport = item; - history = i; - } - - i++; - } - - l = l->next; - } - - gtk_option_menu_set_menu (GTK_OPTION_MENU (editor->transport_type), menu); - - if (xport) { - gtk_signal_emit_by_name (GTK_OBJECT (xport), "activate", editor); - gtk_option_menu_set_history (GTK_OPTION_MENU (editor->transport_type), history); - } + mail_account_gui_build_extra_conf (editor->gui, url); } static void -auto_check_toggled (GtkToggleButton *button, gpointer data) +construct (MailAccountEditor *editor, MailConfigAccount *account) { - MailAccountEditor *editor = data; - - gtk_widget_set_sensitive (GTK_WIDGET (editor->source_auto_timeout), gtk_toggle_button_get_active (button)); -} + editor->gui = mail_account_gui_new (account); -static void -source_check (MailAccountEditor *editor, CamelURL *url) -{ - GList *providers, *l; - - providers = camel_session_list_providers (session, TRUE); - l = providers; - while (l) { - CamelProvider *provider = l->data; - - if (strcmp (provider->domain, "mail")) { - l = l->next; - continue; - } - - if (provider->object_types[CAMEL_PROVIDER_STORE] && provider->flags & CAMEL_PROVIDER_IS_SOURCE) { - if (!url || !g_strcasecmp (provider->protocol, url->protocol)) { - GtkWidget *label; - - /* keep-on-server */ - if (url && !(provider->flags & CAMEL_PROVIDER_IS_STORAGE)) - gtk_widget_set_sensitive (GTK_WIDGET (editor->keep_on_server), TRUE); - else - gtk_widget_set_sensitive (GTK_WIDGET (editor->keep_on_server), FALSE); - - /* host */ - label = glade_xml_get_widget (editor->gui, "lblSourceHost"); - if (url && CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_HOST)) { - gtk_widget_set_sensitive (GTK_WIDGET (editor->source_host), TRUE); - gtk_widget_set_sensitive (label, TRUE); - } else { - gtk_widget_set_sensitive (GTK_WIDGET (editor->source_host), FALSE); - gtk_widget_set_sensitive (label, FALSE); - } - - /* user */ - label = glade_xml_get_widget (editor->gui, "lblSourceUser"); - if (url && CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_USER)) { - gtk_widget_set_sensitive (GTK_WIDGET (editor->source_user), TRUE); - gtk_widget_set_sensitive (label, TRUE); - } else { - gtk_widget_set_sensitive (GTK_WIDGET (editor->source_user), FALSE); - gtk_widget_set_sensitive (label, FALSE); - } - - /* path */ - label = glade_xml_get_widget (editor->gui, "lblSourcePath"); - if (url && CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_PATH)) { - gtk_widget_set_sensitive (GTK_WIDGET (editor->source_path), TRUE); - gtk_widget_set_sensitive (label, TRUE); - } else { - gtk_widget_set_sensitive (GTK_WIDGET (editor->source_path), FALSE); - gtk_widget_set_sensitive (label, FALSE); - } - - /* auth */ - label = glade_xml_get_widget (editor->gui, "lblSourceAuth"); - if (url && CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_AUTH)) { - gtk_widget_set_sensitive (GTK_WIDGET (editor->source_auth), TRUE); - gtk_widget_set_sensitive (label, TRUE); - } else { - gtk_widget_set_sensitive (GTK_WIDGET (editor->source_auth), FALSE); - gtk_widget_set_sensitive (label, FALSE); - } - - /* passwd */ - label = glade_xml_get_widget (editor->gui, "lblSourcePasswd"); - if (url && CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_PASSWORD)) { - gtk_widget_set_sensitive (GTK_WIDGET (editor->source_passwd), TRUE); - gtk_widget_set_sensitive (GTK_WIDGET (editor->source_save_passwd), TRUE); - gtk_widget_set_sensitive (label, TRUE); - } else { - gtk_widget_set_sensitive (GTK_WIDGET (editor->source_passwd), FALSE); - gtk_widget_set_sensitive (GTK_WIDGET (editor->source_save_passwd), FALSE); - gtk_widget_set_sensitive (label, FALSE); - } - - break; - } - } - - l = l->next; - } -} + /* get our toplevel widget and reparent it */ + editor->notebook = GTK_NOTEBOOK (glade_xml_get_widget (editor->gui->xml, "account_editor_notebook")); + gtk_widget_reparent (GTK_WIDGET (editor->notebook), GNOME_DIALOG (editor)->vbox); + gtk_signal_connect (GTK_OBJECT (editor->notebook), "switch-page", + GTK_SIGNAL_FUNC (switch_page), editor); -static void -construct (MailAccountEditor *editor, const MailConfigAccount *account) -{ - GtkWidget *toplevel, *entry; - GladeXML *gui; - CamelURL *url; - - gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", "mail-account-editor"); - editor->gui = gui; - - /* get our toplevel widget */ - toplevel = glade_xml_get_widget (gui, "toplevel"); - - /* reparent */ - gtk_widget_reparent (toplevel, GNOME_DIALOG (editor)->vbox); - /* give our dialog an OK button and title */ gtk_window_set_title (GTK_WINDOW (editor), _("Evolution Account Editor")); gtk_window_set_policy (GTK_WINDOW (editor), FALSE, TRUE, TRUE); @@ -745,7 +173,7 @@ construct (MailAccountEditor *editor, const MailConfigAccount *account) GNOME_STOCK_BUTTON_APPLY, GNOME_STOCK_BUTTON_CANCEL, NULL); - + gnome_dialog_button_connect (GNOME_DIALOG (editor), 0 /* OK */, GTK_SIGNAL_FUNC (ok_clicked), editor); @@ -755,148 +183,17 @@ construct (MailAccountEditor *editor, const MailConfigAccount *account) gnome_dialog_button_connect (GNOME_DIALOG (editor), 2 /* CANCEL */, GTK_SIGNAL_FUNC (cancel_clicked), editor); - - /* General */ - editor->account_name = GTK_ENTRY (glade_xml_get_widget (gui, "txtAccountName")); - e_utf8_gtk_entry_set_text (editor->account_name, account->name ? account->name : _("Unspecified")); - gtk_signal_connect (GTK_OBJECT (editor->account_name), "changed", entry_changed, editor); - editor->name = GTK_ENTRY (glade_xml_get_widget (gui, "txtName")); - e_utf8_gtk_entry_set_text (editor->name, account->id->name ? account->id->name : ""); - gtk_signal_connect (GTK_OBJECT (editor->name), "changed", entry_changed, editor); - editor->email = GTK_ENTRY (glade_xml_get_widget (gui, "txtAddress")); - e_utf8_gtk_entry_set_text (editor->email, account->id->address ? account->id->address : ""); - gtk_signal_connect (GTK_OBJECT (editor->email), "changed", entry_changed, editor); - editor->reply_to = GTK_ENTRY (glade_xml_get_widget (gui, "txtReplyTo")); - if (editor->reply_to) - e_utf8_gtk_entry_set_text (editor->reply_to, account->id->reply_to ? account->id->reply_to : ""); - editor->organization = GTK_ENTRY (glade_xml_get_widget (gui, "txtOrganization")); - if (editor->organization) - e_utf8_gtk_entry_set_text (editor->organization, account->id->organization ? - account->id->organization : ""); - editor->signature = GNOME_FILE_ENTRY (glade_xml_get_widget (gui, "fileSignature")); - if (editor->signature) { - entry = gnome_file_entry_gtk_entry (editor->signature); - gtk_entry_set_text (GTK_ENTRY (entry), account->id->signature ? account->id->signature : ""); - } - - /* Servers */ - if (account->source->url) - url = camel_url_new (account->source->url, NULL); - else - url = NULL; - - editor->source_type = glade_xml_get_widget (gui, "txtSourceType"); - if (GTK_IS_LABEL (editor->source_type)) - gtk_label_set_text (GTK_LABEL (editor->source_type), url ? url->protocol : _("None")); - else - gtk_entry_set_text (GTK_ENTRY (editor->source_type), url ? url->protocol : _("None")); - editor->source_host = GTK_ENTRY (glade_xml_get_widget (gui, "txtSourceHost")); - gtk_entry_set_text (editor->source_host, url && url->host ? url->host : ""); - if (url && url->port) { - char port[10]; - - g_snprintf (port, 9, ":%d", url->port); - gtk_entry_append_text (editor->source_host, port); - } - editor->source_user = GTK_ENTRY (glade_xml_get_widget (gui, "txtSourceUser")); - gtk_entry_set_text (editor->source_user, url && url->user ? url->user : ""); - editor->source_passwd = GTK_ENTRY (glade_xml_get_widget (gui, "txtSourcePasswd")); - gtk_entry_set_text (editor->source_passwd, url && url->passwd ? url->passwd : ""); - editor->source_path = GTK_ENTRY (glade_xml_get_widget (gui, "txtSourcePath")); - if (url && url->path && *(url->path)) { - GList *providers; - CamelProvider *provider = NULL; - - providers = camel_session_list_providers (session, TRUE); - while (providers) { - provider = providers->data; - - if (strcmp (provider->domain, "mail")) { - provider = NULL; - providers = providers->next; - continue; - } - - if (provider->object_types[CAMEL_PROVIDER_STORE] && provider->flags & CAMEL_PROVIDER_IS_SOURCE) - if (!url || !g_strcasecmp (provider->protocol, url->protocol)) - break; - - provider = NULL; - providers = providers->next; - } - - if (provider) { - if (provider->url_flags & CAMEL_URL_PATH_IS_ABSOLUTE) - gtk_entry_set_text (editor->source_path, url->path ? url->path : ""); - else - gtk_entry_set_text (editor->source_path, url->path + 1 ? url->path + 1 : ""); - } else { - /* we've got a serious problem if we ever get to here */ - g_assert_not_reached (); - } - } - editor->source_save_passwd = GTK_CHECK_BUTTON (glade_xml_get_widget (gui, "chkSourceSavePasswd")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->source_save_passwd), account->source->save_passwd); - editor->source_auth = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuSourceAuth")); - editor->keep_on_server = GTK_CHECK_BUTTON (glade_xml_get_widget (gui, "chkKeepMailOnServer")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->keep_on_server), account->source->keep_on_server); - editor->source_auto_timeout = GTK_SPIN_BUTTON (glade_xml_get_widget (gui, "spinAutoCheckTimeout")); - gtk_spin_button_set_value (editor->source_auto_timeout, - (gfloat) (account->source->auto_check_time * 1.0)); - editor->source_auto_check = GTK_CHECK_BUTTON (glade_xml_get_widget (gui, "chkAutoCheckMail")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->source_auto_check), account->source->auto_check); - gtk_signal_connect (GTK_OBJECT (editor->source_auto_check), "toggled", auto_check_toggled, editor); - gtk_widget_set_sensitive (GTK_WIDGET (editor->source_auto_timeout), account->source->auto_check); - editor->source_enabled = GTK_CHECK_BUTTON (glade_xml_get_widget (gui, "chkEnabled")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->source_enabled), account->source->enabled); - source_check (editor, url); - source_auth_init (editor, url); - if (url) - camel_url_free (url); - - /* Transport */ - if (account->transport->url) - url = camel_url_new (account->transport->url, NULL); - else - url = NULL; - - editor->transport_type = glade_xml_get_widget (gui, "omenuTransportType"); - editor->transport_host = GTK_ENTRY (glade_xml_get_widget (gui, "txtTransportHost")); - gtk_entry_set_text (editor->transport_host, url && url->host ? url->host : ""); - if (url && url->port) { - char port[10]; - - g_snprintf (port, 9, ":%d", url->port); - gtk_entry_append_text (editor->transport_host, port); - } - editor->transport_auth = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuTransportAuth")); - editor->transport_user = GTK_ENTRY (glade_xml_get_widget (gui, "txtTransportUser")); - gtk_entry_set_text (editor->transport_user, url && url->user ? url->user : ""); - editor->transport_passwd = GTK_ENTRY (glade_xml_get_widget (gui, "txtTransportPasswd")); - gtk_entry_set_text (editor->transport_passwd, url && url->passwd ? url->passwd : ""); - editor->transport_save_passwd = GTK_CHECK_BUTTON (glade_xml_get_widget (gui, "chkTransportSavePasswd")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->transport_save_passwd), account->transport->save_passwd); - if (GTK_IS_OPTION_MENU (editor->transport_type)) - transport_type_init (editor, url); - else - gtk_label_set_text (GTK_LABEL (editor->transport_type), - url && url->protocol ? url->protocol : _("None")); - - transport_auth_init (editor, url); - - if (url) - camel_url_free (url); - - editor->account = account; + + mail_account_gui_setup (editor->gui, GTK_WIDGET (editor)); } MailAccountEditor * -mail_account_editor_new (const MailConfigAccount *account) +mail_account_editor_new (MailConfigAccount *account) { MailAccountEditor *new; - + new = (MailAccountEditor *) gtk_type_new (mail_account_editor_get_type ()); construct (new, account); - + return new; } diff --git a/mail/mail-account-editor.h b/mail/mail-account-editor.h index b53991236a..ad4bec94bb 100644 --- a/mail/mail-account-editor.h +++ b/mail/mail-account-editor.h @@ -28,57 +28,20 @@ extern "C" { #pragma } #endif /* __cplusplus */ -#include <gnome.h> -#include <glade/glade.h> -#include <camel.h> -#include "mail-config.h" +#include <libgnomeui/gnome-dialog.h> +#include "mail-account-gui.h" #define MAIL_ACCOUNT_EDITOR_TYPE (mail_account_editor_get_type ()) #define MAIL_ACCOUNT_EDITOR(o) (GTK_CHECK_CAST ((o), MAIL_ACCOUNT_EDITOR_TYPE, MailAccountEditor)) #define MAIL_ACCOUNT_EDITOR_CLASS(k) (GTK_CHECK_CLASS_CAST((k), MAIL_ACCOUNT_EDITOR_TYPE, MailAccountEditorClass)) -#define IS_MAIL_ACCOUNT_EDITOR(o) (GTK_CHECK_TYPE ((o), MAIL_ACCOUNT_EDITOR_TYPE)) -#define IS_MAIL_ACCOUNT_EDITOR_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), MAIL_ACCOUNT_EDITOR_TYPE)) +#define MAIL_IS_ACCOUNT_EDITOR(o) (GTK_CHECK_TYPE ((o), MAIL_ACCOUNT_EDITOR_TYPE)) +#define MAIL_IS_ACCOUNT_EDITOR_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), MAIL_ACCOUNT_EDITOR_TYPE)) struct _MailAccountEditor { GnomeDialog parent; - const MailConfigAccount *account; - - GladeXML *gui; - - /* Identity / General */ - GtkEntry *account_name; - GtkEntry *name; - GtkEntry *email; - GtkEntry *reply_to; - GtkEntry *organization; - GnomeFileEntry *signature; - - /* Source */ - GtkWidget *source_type; /* this is generic because we don't know the widget-type */ - GtkEntry *source_host; - GtkEntry *source_user; - GtkEntry *source_passwd; - GtkEntry *source_path; - GtkCheckButton *source_save_passwd; - GtkOptionMenu *source_auth; - - GtkCheckButton *keep_on_server; - - GtkCheckButton *source_auto_check; - GtkSpinButton *source_auto_timeout; - - GtkCheckButton *source_enabled; - - /* Transport */ - GtkWidget *transport_type; /* Same here... */ - GtkEntry *transport_host; - GtkOptionMenu *transport_auth; - GtkEntry *transport_user; - GtkEntry *transport_passwd; - GtkCheckButton *transport_save_passwd; - - const CamelProvider *transport; + MailAccountGui *gui; + GtkNotebook *notebook; }; typedef struct _MailAccountEditor MailAccountEditor; @@ -92,7 +55,7 @@ typedef struct { GtkType mail_account_editor_get_type (void); -MailAccountEditor *mail_account_editor_new (const MailConfigAccount *account); +MailAccountEditor *mail_account_editor_new (MailConfigAccount *account); #ifdef __cplusplus } diff --git a/mail/mail-account-gui.c b/mail/mail-account-gui.c new file mode 100644 index 0000000000..0cf07a58fc --- /dev/null +++ b/mail/mail-account-gui.c @@ -0,0 +1,1086 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: + * Dan Winship <danw@ximian.com> + * Jeffrey Stedfast <fejj@ximian.com> + * + * Copyright 2001 Ximian, Inc. (www.ximian.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + * + */ + +#include "config.h" + +#include <string.h> + +#include <gal/widgets/e-unicode.h> + +#include "mail-account-gui.h" +#include "mail-session.h" + +static void save_service (MailAccountGuiService *gsvc, GHashTable *extra_conf, MailConfigService *service); + +static gboolean +is_email (const char *address) +{ + const char *at, *hname; + + at = strchr (address, '@'); + /* make sure we have an '@' and that it's not the first or last char */ + if (!at || at == address || *(at + 1) == '\0') + return FALSE; + + hname = at + 1; + /* make sure the first and last chars aren't '.' */ + if (*hname == '.' || hname[strlen (hname) - 1] == '.') + return FALSE; + + return strchr (hname, '.') != NULL; +} + +gboolean +mail_account_gui_identity_complete (MailAccountGui *gui) +{ + char *text; + + text = gtk_entry_get_text (gui->full_name); + if (!text || !*text) + return FALSE; + text = gtk_entry_get_text (gui->email_address); + if (!text || !is_email (text)) + return FALSE; + + return TRUE; +} + +static gboolean +service_complete (MailAccountGuiService *service) +{ + const CamelProvider *prov = service->provider; + char *text; + + if (!prov) + return TRUE; + + if (CAMEL_PROVIDER_NEEDS (prov, CAMEL_URL_PART_HOST)) { + text = gtk_entry_get_text (service->hostname); + if (!text || !*text) + return FALSE; + } + if (CAMEL_PROVIDER_NEEDS (prov, CAMEL_URL_PART_USER)) { + text = gtk_entry_get_text (service->username); + if (!text || !*text) + return FALSE; + } + if (CAMEL_PROVIDER_NEEDS (prov, CAMEL_URL_PART_PATH)) { + text = gtk_entry_get_text (service->path); + if (!text || !*text) + return FALSE; + } + + return TRUE; +} + +gboolean +mail_account_gui_source_complete (MailAccountGui *gui) +{ + return service_complete (&gui->source); +} + +gboolean +mail_account_gui_transport_complete (MailAccountGui *gui) +{ + if (!service_complete (&gui->transport)) + return FALSE; + + /* FIXME? */ + if (gtk_toggle_button_get_active (gui->transport_needs_auth) && + CAMEL_PROVIDER_ALLOWS (gui->transport.provider, CAMEL_URL_PART_USER)) { + char *text = gtk_entry_get_text (gui->transport.username); + + if (!text || !*text) + return FALSE; + } + + return TRUE; +} + +gboolean +mail_account_gui_management_complete (MailAccountGui *gui) +{ + char *text; + + text = gtk_entry_get_text (gui->account_name); + return text && *text; +} + + + + +static void +service_authtype_changed (GtkWidget *widget, gpointer user_data) +{ + MailAccountGuiService *service = user_data; + CamelServiceAuthType *authtype; + + service->authitem = widget; + authtype = gtk_object_get_data (GTK_OBJECT (widget), "authtype"); + + gtk_widget_set_sensitive (GTK_WIDGET (service->remember), authtype->need_password); +} + +static void +build_auth_menu (MailAccountGuiService *service, GList *authtypes) +{ + GtkWidget *menu, *item, *first = NULL; + CamelServiceAuthType *authtype; + GList *l; + + menu = gtk_menu_new (); + + for (l = authtypes; l; l = l->next) { + authtype = l->data; + + item = gtk_menu_item_new_with_label (_(authtype->name)); + gtk_object_set_data (GTK_OBJECT (item), "authtype", authtype); + gtk_signal_connect (GTK_OBJECT (item), "activate", + service_authtype_changed, service); + + gtk_menu_append (GTK_MENU (menu), item); + + gtk_widget_show (item); + + if (!first) + first = item; + } + + gtk_option_menu_remove_menu (service->authtype); + gtk_option_menu_set_menu (service->authtype, menu); + + if (first) + gtk_signal_emit_by_name (GTK_OBJECT (first), "activate", service); +} + +static void +source_type_changed (GtkWidget *widget, gpointer user_data) +{ + MailAccountGui *gui = user_data; + GtkWidget *label, *frame, *dwidget = NULL; + CamelProvider *provider; + + provider = gtk_object_get_data (GTK_OBJECT (widget), "provider"); + + gui->source.provider = provider; + + frame = glade_xml_get_widget (gui->xml, "source_frame"); + if (provider) { + gtk_widget_show (frame); + + /* hostname */ + label = glade_xml_get_widget (gui->xml, "source_host_label"); + if (CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_HOST)) { + dwidget = GTK_WIDGET (gui->source.hostname); + gtk_widget_show (GTK_WIDGET (gui->source.hostname)); + gtk_widget_show (label); + } else { + gtk_widget_hide (GTK_WIDGET (gui->source.hostname)); + gtk_widget_hide (label); + } + + /* username */ + label = glade_xml_get_widget (gui->xml, "source_user_label"); + if (CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_USER)) { + if (!dwidget) + dwidget = GTK_WIDGET (gui->source.username); + gtk_widget_show (GTK_WIDGET (gui->source.username)); + gtk_widget_show (label); + } else { + gtk_widget_hide (GTK_WIDGET (gui->source.username)); + gtk_widget_hide (label); + } + + /* path */ + label = glade_xml_get_widget (gui->xml, "source_path_label"); + if (CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_PATH)) { + if (!dwidget) + dwidget = GTK_WIDGET (gui->source.path); + + if (!strcmp (provider->protocol, "mbox")) { + char *path; + + if (getenv ("MAIL")) + path = g_strdup (getenv ("MAIL")); + else + path = g_strdup_printf (SYSTEM_MAIL_DIR "/%s", g_get_user_name ()); + gtk_entry_set_text (gui->source.path, path); + g_free (path); + } else if (!strcmp (provider->protocol, "maildir") && + getenv ("MAILDIR")) { + gtk_entry_set_text (gui->source.path, getenv ("MAILDIR")); + } else { + gtk_entry_set_text (gui->source.path, ""); + } + + gtk_widget_show (GTK_WIDGET (gui->source.path)); + gtk_widget_show (label); + } else { + gtk_entry_set_text (gui->source.path, ""); + gtk_widget_hide (GTK_WIDGET (gui->source.path)); + gtk_widget_hide (label); + } + + /* ssl */ +#ifdef HAVE_NSS + if (provider && provider->flags & CAMEL_PROVIDER_SUPPORTS_SSL) + gtk_widget_show (GTK_WIDGET (gui->source.use_ssl)); + else +#endif + gtk_widget_hide (GTK_WIDGET (gui->source.use_ssl)); + + /* auth */ + frame = glade_xml_get_widget (gui->xml, "source_auth_frame"); + if (provider && CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_AUTH)) { + build_auth_menu (&gui->source, provider->authtypes); + gtk_widget_show (frame); + } else + gtk_widget_hide (frame); + } else { + gtk_widget_hide (frame); + frame = glade_xml_get_widget (gui->xml, "source_auth_frame"); + gtk_widget_hide (frame); + } + + gtk_signal_emit_by_name (GTK_OBJECT (gui->source.username), "changed"); + + if (dwidget) + gtk_widget_grab_focus (dwidget); +} + + +static void +transport_needs_auth_toggled (GtkToggleButton *toggle, gpointer data) +{ + MailAccountGui *gui = data; + gboolean need = gtk_toggle_button_get_active (toggle); + GtkWidget *widget; + + widget = glade_xml_get_widget (gui->xml, "transport_auth_frame"); + gtk_widget_set_sensitive (widget, need); +} + +static void +transport_type_changed (GtkWidget *widget, gpointer user_data) +{ + MailAccountGui *gui = user_data; + CamelProvider *provider; + GtkWidget *label, *frame; + + provider = gtk_object_get_data (GTK_OBJECT (widget), "provider"); + gui->transport.provider = provider; + + frame = glade_xml_get_widget (gui->xml, "transport_frame"); + if (CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_HOST) || + (CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_AUTH) && + !CAMEL_PROVIDER_NEEDS (provider, CAMEL_URL_PART_AUTH))) { + gtk_widget_show (frame); + + label = glade_xml_get_widget (gui->xml, "transport_host_label"); + if (CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_HOST)) { + gtk_widget_grab_focus (GTK_WIDGET (gui->transport.hostname)); + gtk_widget_show (GTK_WIDGET (gui->transport.hostname)); + gtk_widget_show (label); + } else { + gtk_widget_hide (GTK_WIDGET (gui->transport.hostname)); + gtk_widget_hide (label); + } + + /* ssl */ +#ifdef HAVE_NSS + if (provider && provider->flags & CAMEL_PROVIDER_SUPPORTS_SSL) + gtk_widget_show (GTK_WIDGET (gui->transport.use_ssl)); + else +#endif + gtk_widget_hide (GTK_WIDGET (gui->transport.use_ssl)); + + /* auth */ + if (CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_AUTH) && + !CAMEL_PROVIDER_NEEDS (provider, CAMEL_URL_PART_AUTH)) + gtk_widget_show (GTK_WIDGET (gui->transport_needs_auth)); + else + gtk_widget_hide (GTK_WIDGET (gui->transport_needs_auth)); + } else + gtk_widget_hide (frame); + + frame = glade_xml_get_widget (gui->xml, "transport_auth_frame"); + if (CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_AUTH)) { + gtk_widget_show (frame); + + label = glade_xml_get_widget (gui->xml, "transport_user_label"); + if (CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_USER)) { + gtk_widget_show (GTK_WIDGET (gui->transport.username)); + gtk_widget_show (label); + } else { + gtk_widget_hide (GTK_WIDGET (gui->transport.username)); + gtk_widget_hide (label); + } + + build_auth_menu (&gui->transport, provider->authtypes); + transport_needs_auth_toggled (gui->transport_needs_auth, gui); + } else + gtk_widget_hide (frame); + + gtk_signal_emit_by_name (GTK_OBJECT (gui->transport.hostname), "changed"); +} + +static void +service_changed (GtkEntry *entry, gpointer user_data) +{ + MailAccountGuiService *service = user_data; + + gtk_widget_set_sensitive (GTK_WIDGET (service->check_supported), + service_complete (service)); +} + +static void +service_check_supported (GtkButton *button, gpointer user_data) +{ + MailAccountGuiService *gsvc = user_data; + MailConfigService *service; + GList *authtypes = NULL; + + service = g_new0 (MailConfigService, 1); + save_service (gsvc, NULL, service); + + if (mail_config_check_service (service->url, CAMEL_PROVIDER_STORE, &authtypes)) { + build_auth_menu (gsvc, authtypes); + g_list_free (authtypes); + } + + service_destroy (service); +} + + +static void +toggle_sensitivity (GtkToggleButton *toggle, GtkWidget *widget) +{ + gtk_widget_set_sensitive (widget, gtk_toggle_button_get_active (toggle)); +} + +static void +setup_toggle (GtkWidget *widget, const char *depname, MailAccountGui *gui) +{ + GtkToggleButton *toggle; + + if (!strcmp (depname, "UNIMPLEMENTED")) { + gtk_widget_set_sensitive (widget, FALSE); + return; + } + + toggle = g_hash_table_lookup (gui->extra_config, depname); + gtk_signal_connect (GTK_OBJECT (toggle), "toggled", + GTK_SIGNAL_FUNC (toggle_sensitivity), + widget); + toggle_sensitivity (toggle, widget); +} + +void +mail_account_gui_build_extra_conf (MailAccountGui *gui, const char *url_string) +{ + CamelURL *url; + GtkWidget *mailcheck_frame, *main_vbox, *cur_vbox; + CamelProviderConfEntry *entries; + GList *children, *child; + char *name; + int i; + + if (url_string) + url = camel_url_new (url_string, NULL); + else + url = NULL; + + main_vbox = glade_xml_get_widget (gui->xml, "extra_vbox"); + + mailcheck_frame = glade_xml_get_widget (gui->xml, "extra_mailcheck_frame"); + + /* Remove any additional mailcheck items. */ + children = gtk_container_children (GTK_CONTAINER (mailcheck_frame)); + if (children) { + cur_vbox = children->data; + g_list_free (children); + children = gtk_container_children (GTK_CONTAINER (cur_vbox)); + for (child = children; child; child = child->next) { + if (child != children) { + gtk_container_remove (GTK_CONTAINER (cur_vbox), + child->data); + } + } + g_list_free (children); + } + + /* Remove the contents of the extra_vbox except for the + * mailcheck_frame. + */ + children = gtk_container_children (GTK_CONTAINER (main_vbox)); + for (child = children; child; child = child->next) { + if (child != children) { + gtk_container_remove (GTK_CONTAINER (main_vbox), + child->data); + } + } + g_list_free (children); + + if (!gui->source.provider) { + gtk_widget_set_sensitive (main_vbox, FALSE); + return; + } else + gtk_widget_set_sensitive (main_vbox, TRUE); + + /* Set up our hash table. */ + if (gui->extra_config) + g_hash_table_destroy (gui->extra_config); + gui->extra_config = g_hash_table_new (g_str_hash, g_str_equal); + + entries = gui->source.provider->extra_conf; + if (!entries) + goto done; + + cur_vbox = main_vbox; + for (i = 0; ; i++) { + switch (entries[i].type) { + case CAMEL_PROVIDER_CONF_SECTION_START: + { + GtkWidget *frame; + + if (entries[i].name && !strcmp (entries[i].name, "mailcheck")) + cur_vbox = glade_xml_get_widget (gui->xml, "extra_mailcheck_vbox"); + else { + frame = gtk_frame_new (_(entries[i].text)); + gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); + cur_vbox = gtk_vbox_new (FALSE, 4); + gtk_container_set_border_width (GTK_CONTAINER (cur_vbox), 4); + gtk_container_add (GTK_CONTAINER (frame), cur_vbox); + } + break; + } + case CAMEL_PROVIDER_CONF_SECTION_END: + cur_vbox = main_vbox; + break; + + case CAMEL_PROVIDER_CONF_CHECKBOX: + { + GtkWidget *checkbox; + gboolean active; + + checkbox = gtk_check_button_new_with_label (_(entries[i].text)); + if (url) + active = camel_url_get_param (url, entries[i].name) != NULL; + else + active = atoi (entries[i].value); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox), active); + gtk_box_pack_start (GTK_BOX (cur_vbox), checkbox, FALSE, FALSE, 0); + g_hash_table_insert (gui->extra_config, entries[i].name, checkbox); + if (entries[i].depname) + setup_toggle (checkbox, entries[i].depname, gui); + break; + } + + case CAMEL_PROVIDER_CONF_ENTRY: + { + GtkWidget *hbox, *label, *entry; + const char *text; + + hbox = gtk_hbox_new (FALSE, 8); + label = gtk_label_new (_(entries[i].text)); + entry = gtk_entry_new (); + if (url) + text = camel_url_get_param (url, entries[i].name); + else + text = entries[i].value; + if (text) + gtk_entry_set_text (GTK_ENTRY (entry), text); + + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_box_pack_end (GTK_BOX (hbox), entry, TRUE, TRUE, 0); + + gtk_box_pack_start (GTK_BOX (cur_vbox), hbox, FALSE, FALSE, 0); + g_hash_table_insert (gui->extra_config, entries[i].name, entry); + if (entries[i].depname) { + setup_toggle (entry, entries[i].depname, gui); + setup_toggle (label, entries[i].depname, gui); + } + break; + } + + case CAMEL_PROVIDER_CONF_CHECKSPIN: + { + GtkWidget *hbox, *checkbox, *spin, *label; + GtkObject *adj; + char *data, *pre, *post, *p; + double min, def, max; + gboolean enable; + + data = _(entries[i].text); + p = strstr (data, "%s"); + g_return_if_fail (p != NULL); + + pre = g_strndup (data, p - data); + post = p + 2; + + data = entries[i].value; + enable = *data++ == 'y'; + g_return_if_fail (*data == ':'); + min = strtod (++data, &data); + g_return_if_fail (*data == ':'); + def = strtod (++data, &data); + g_return_if_fail (*data == ':'); + max = strtod (++data, NULL); + + if (url) { + const char *val; + + val = camel_url_get_param (url, entries[i].name); + if (!val) + enable = FALSE; + else { + enable = TRUE; + def = atof (val); + } + } + + hbox = gtk_hbox_new (FALSE, 0); + checkbox = gtk_check_button_new_with_label (pre); + g_free (pre); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox), enable); + adj = gtk_adjustment_new (def, min, max, 1, 1, 1); + spin = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1, 0); + label = gtk_label_new (post); + + gtk_box_pack_start (GTK_BOX (hbox), checkbox, FALSE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), spin, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 4); + + gtk_box_pack_start (GTK_BOX (cur_vbox), hbox, FALSE, FALSE, 0); + g_hash_table_insert (gui->extra_config, entries[i].name, checkbox); + name = g_strdup_printf ("%s_value", entries[i].name); + g_hash_table_insert (gui->extra_config, name, spin); + if (entries[i].depname) { + setup_toggle (checkbox, entries[i].depname, gui); + setup_toggle (spin, entries[i].depname, gui); + setup_toggle (label, entries[i].depname, gui); + } + break; + } + + case CAMEL_PROVIDER_CONF_END: + goto done; + } + } + + done: + gtk_widget_show_all (main_vbox); +} + +static void +extract_values (MailAccountGuiService *source, GHashTable *extra_config, CamelURL *url) +{ + CamelProviderConfEntry *entries; + GtkToggleButton *toggle; + GtkEntry *entry; + GtkSpinButton *spin; + char *name; + int i; + + if (!source->provider || !source->provider->extra_conf) + return; + entries = source->provider->extra_conf; + + for (i = 0; ; i++) { + if (entries[i].depname) { + toggle = g_hash_table_lookup (extra_config, entries[i].depname); + if (!toggle || !gtk_toggle_button_get_active (toggle)) + continue; + } + + switch (entries[i].type) { + case CAMEL_PROVIDER_CONF_CHECKBOX: + toggle = g_hash_table_lookup (extra_config, entries[i].name); + if (gtk_toggle_button_get_active (toggle)) + camel_url_set_param (url, entries[i].name, ""); + break; + + case CAMEL_PROVIDER_CONF_ENTRY: + entry = g_hash_table_lookup (extra_config, entries[i].name); + camel_url_set_param (url, entries[i].name, gtk_entry_get_text (entry)); + break; + + case CAMEL_PROVIDER_CONF_CHECKSPIN: + toggle = g_hash_table_lookup (extra_config, entries[i].name); + if (!gtk_toggle_button_get_active (toggle)) + break; + name = g_strdup_printf ("%s_value", entries[i].name); + spin = g_hash_table_lookup (extra_config, name); + g_free (name); + name = g_strdup_printf ("%d", gtk_spin_button_get_value_as_int (spin)); + camel_url_set_param (url, entries[i].name, name); + g_free (name); + break; + + case CAMEL_PROVIDER_CONF_END: + return; + + default: + break; + } + } +} + + +static gboolean +setup_service (MailAccountGuiService *gsvc, MailConfigService *service) +{ + CamelURL *url = camel_url_new (service->url, NULL); + gboolean has_auth = FALSE; + + if (url->user && CAMEL_PROVIDER_ALLOWS (gsvc->provider, CAMEL_URL_PART_USER)) + gtk_entry_set_text (gsvc->username, url->user); + if (url->host && CAMEL_PROVIDER_ALLOWS (gsvc->provider, CAMEL_URL_PART_HOST)) { + char *hostname; + + if (url->port) + hostname = g_strdup_printf ("%s:%d", url->host, url->port); + else + hostname = g_strdup (url->host); + + gtk_entry_set_text (gsvc->hostname, hostname); + g_free (hostname); + } + if (url->path && CAMEL_PROVIDER_ALLOWS (gsvc->provider, CAMEL_URL_PART_PATH)) + gtk_entry_set_text (gsvc->path, url->path); + if (gsvc->provider->flags & CAMEL_PROVIDER_SUPPORTS_SSL) { + gboolean use_ssl = camel_url_get_param (url, "use_ssl") != NULL; + gtk_toggle_button_set_active (gsvc->use_ssl, use_ssl); + } + if (url->authmech && CAMEL_PROVIDER_ALLOWS (gsvc->provider, CAMEL_URL_PART_AUTH)) { + GList *children, *item; + CamelServiceAuthType *authtype; + int i; + + children = gtk_container_children (GTK_CONTAINER (gtk_option_menu_get_menu (gsvc->authtype))); + for (item = children, i = 0; item; item = item->next, i++) { + authtype = gtk_object_get_data (item->data, "authtype"); + if (!authtype) + continue; + if (!strcmp (authtype->authproto, url->authmech)) { + gtk_option_menu_set_history (gsvc->authtype, i); + gtk_signal_emit_by_name (item->data, "activate"); + break; + } + } + g_list_free (children); + + gtk_toggle_button_set_active (gsvc->remember, service->save_passwd); + has_auth = TRUE; + } + + return has_auth; +} + +static gint +provider_compare (const CamelProvider *p1, const CamelProvider *p2) +{ + /* sort providers based on "location" (ie. local or remote) */ + if (p1->flags & CAMEL_PROVIDER_IS_REMOTE) { + if (p2->flags & CAMEL_PROVIDER_IS_REMOTE) + return 0; + return -1; + } else { + if (p2->flags & CAMEL_PROVIDER_IS_REMOTE) + return 1; + return 0; + } +} + +MailAccountGui * +mail_account_gui_new (MailConfigAccount *account) +{ + MailAccountGui *gui; + + gui = g_new0 (MailAccountGui, 1); + gui->account = account; + gui->xml = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", NULL); + + /* Management */ + gui->account_name = GTK_ENTRY (glade_xml_get_widget (gui->xml, "management_name")); + gui->default_account = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui->xml, "management_default")); + if (account->name) + e_utf8_gtk_entry_set_text (gui->account_name, account->name); + gtk_toggle_button_set_active (gui->default_account, account->default_account); + + /* Identity */ + gui->full_name = GTK_ENTRY (glade_xml_get_widget (gui->xml, "identity_full_name")); + gui->email_address = GTK_ENTRY (glade_xml_get_widget (gui->xml, "identity_address")); + gui->organization = GTK_ENTRY (glade_xml_get_widget (gui->xml, "identity_organization")); + gui->signature = GNOME_FILE_ENTRY (glade_xml_get_widget (gui->xml, "identity_signature")); + gnome_file_entry_set_default_path (gui->signature, g_get_home_dir ()); + if (account->id) { + if (account->id->name) + e_utf8_gtk_entry_set_text (gui->full_name, account->id->name); + if (account->id->address) + gtk_entry_set_text (gui->email_address, account->id->address); + } + + /* Source */ + gui->source.type = GTK_OPTION_MENU (glade_xml_get_widget (gui->xml, "source_type_omenu")); + gui->source.hostname = GTK_ENTRY (glade_xml_get_widget (gui->xml, "source_host")); + gtk_signal_connect (GTK_OBJECT (gui->source.hostname), "changed", + GTK_SIGNAL_FUNC (service_changed), &gui->source); + gui->source.username = GTK_ENTRY (glade_xml_get_widget (gui->xml, "source_user")); + gtk_signal_connect (GTK_OBJECT (gui->source.username), "changed", + GTK_SIGNAL_FUNC (service_changed), &gui->source); + gui->source.path = GTK_ENTRY (glade_xml_get_widget (gui->xml, "source_path")); + gtk_signal_connect (GTK_OBJECT (gui->source.path), "changed", + GTK_SIGNAL_FUNC (service_changed), &gui->source); + gui->source.use_ssl = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui->xml, "source_use_ssl")); + gui->source.authtype = GTK_OPTION_MENU (glade_xml_get_widget (gui->xml, "source_auth_omenu")); + gui->source.remember = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui->xml, "source_remember_password")); + gui->source.check_supported = GTK_BUTTON (glade_xml_get_widget (gui->xml, "source_check_supported")); + gtk_signal_connect (GTK_OBJECT (gui->source.check_supported), "clicked", GTK_SIGNAL_FUNC (service_check_supported), &gui->source); + gui->source_auto_check = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui->xml, "extra_auto_check")); + gui->source_auto_check_min = GTK_SPIN_BUTTON (glade_xml_get_widget (gui->xml, "extra_auto_check_min")); + + /* Transport */ + gui->transport.type = GTK_OPTION_MENU (glade_xml_get_widget (gui->xml, "transport_type_omenu")); + gui->transport.hostname = GTK_ENTRY (glade_xml_get_widget (gui->xml, "transport_host")); + gtk_signal_connect (GTK_OBJECT (gui->transport.hostname), "changed", + GTK_SIGNAL_FUNC (service_changed), &gui->source); + gui->transport.username = GTK_ENTRY (glade_xml_get_widget (gui->xml, "transport_user")); + gtk_signal_connect (GTK_OBJECT (gui->transport.username), "changed", + GTK_SIGNAL_FUNC (service_changed), &gui->source); + gui->transport.use_ssl = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui->xml, "transport_use_ssl")); + gui->transport_needs_auth = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui->xml, "transport_needs_auth")); + gtk_signal_connect (GTK_OBJECT (gui->transport_needs_auth), "toggled", transport_needs_auth_toggled, gui); + gui->transport.authtype = GTK_OPTION_MENU (glade_xml_get_widget (gui->xml, "transport_auth_omenu")); + gui->transport.remember = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui->xml, "transport_remember_password")); + gui->transport.check_supported = GTK_BUTTON (glade_xml_get_widget (gui->xml, "transport_check_supported")); + gtk_signal_connect (GTK_OBJECT (gui->transport.check_supported), "clicked", GTK_SIGNAL_FUNC (service_check_supported), &gui->transport); + + return gui; +} + +void +mail_account_gui_setup (MailAccountGui *gui, GtkWidget *top) +{ + GtkWidget *stores, *transports, *item; + GtkWidget *fstore = NULL, *ftransport = NULL; + int si = 0, hstore = 0, ti = 0, htransport = 0; + int max_width = 0; + char *max_authname = NULL; + char *source_proto, *transport_proto; + GList *providers, *l; + + if (gui->account->source && gui->account->source->url) { + source_proto = gui->account->source->url; + source_proto = g_strndup (source_proto, strcspn (source_proto, ":")); + } else + source_proto = NULL; + if (gui->account->transport && gui->account->transport->url) { + transport_proto = gui->account->transport->url; + transport_proto = g_strndup (transport_proto, strcspn (transport_proto, ":")); + } else + transport_proto = NULL; + + /* Construct source/transport option menus */ + stores = gtk_menu_new (); + transports = gtk_menu_new (); + providers = camel_session_list_providers (session, TRUE); + + /* sort the providers, remote first */ + providers = g_list_sort (providers, (GCompareFunc) provider_compare); + + for (l = providers; l; l = l->next) { + CamelProvider *provider = l->data; + + if (strcmp (provider->domain, "mail")) + continue; + + item = NULL; + if (provider->object_types[CAMEL_PROVIDER_STORE] && provider->flags & CAMEL_PROVIDER_IS_SOURCE) { + item = gtk_menu_item_new_with_label (_(provider->name)); + gtk_object_set_data (GTK_OBJECT (item), "provider", provider); + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC (source_type_changed), + gui); + + gtk_menu_append (GTK_MENU (stores), item); + + gtk_widget_show (item); + + if (!fstore) { + fstore = item; + hstore = si; + } + + if (source_proto && !g_strcasecmp (provider->protocol, source_proto)) { + fstore = item; + hstore = si; + } + + si++; + } + + if (provider->object_types[CAMEL_PROVIDER_TRANSPORT]) { + item = gtk_menu_item_new_with_label (_(provider->name)); + gtk_object_set_data (GTK_OBJECT (item), "provider", provider); + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC (transport_type_changed), + gui); + + gtk_menu_append (GTK_MENU (transports), item); + + gtk_widget_show (item); + + if (!ftransport) { + ftransport = item; + htransport = ti; + } + + if (transport_proto && !g_strcasecmp (provider->protocol, transport_proto)) { + ftransport = item; + htransport = ti; + } + + ti++; + } + + if (item && provider->authtypes) { + GdkFont *font = GTK_WIDGET (item)->style->font; + CamelServiceAuthType *at; + int width; + GList *a; + + for (a = provider->authtypes; a; a = a->next) { + at = a->data; + + width = gdk_string_width (font, _(at->name)); + if (width > max_width) { + max_authname = _(at->name); + max_width = width; + } + } + } + } + g_list_free (providers); + + /* add a "None" option to the stores menu */ + item = gtk_menu_item_new_with_label (_("None")); + gtk_object_set_data (GTK_OBJECT (item), "provider", NULL); + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC (source_type_changed), + gui); + + gtk_menu_append (GTK_MENU (stores), item); + + gtk_widget_show (item); + + if (!fstore) { + fstore = item; + hstore = si; + } + + /* set the menus on the optionmenus */ + gtk_option_menu_remove_menu (gui->source.type); + gtk_option_menu_set_menu (gui->source.type, stores); + gtk_option_menu_set_history (gui->source.type, hstore); + + gtk_option_menu_remove_menu (gui->transport.type); + gtk_option_menu_set_menu (gui->transport.type, transports); + gtk_option_menu_set_history (gui->transport.type, htransport); + + /* Force the authmenus to the width of the widest element */ + if (max_authname) { + GtkWidget *menu; + GtkRequisition size_req; + + menu = gtk_menu_new (); + item = gtk_menu_item_new_with_label (max_authname); + gtk_menu_append (GTK_MENU (menu), item); + gtk_widget_show_all (menu); + gtk_option_menu_set_menu (gui->source.authtype, menu); + gtk_widget_show (GTK_WIDGET (gui->source.authtype)); + gtk_widget_size_request (GTK_WIDGET (gui->source.authtype), + &size_req); + + gtk_widget_set_usize (GTK_WIDGET (gui->source.authtype), + size_req.width, -1); + gtk_widget_set_usize (GTK_WIDGET (gui->transport.authtype), + size_req.width, -1); + } + + gtk_widget_show_all (top); + + /* Force some other elements to keep their current sizes even if + * widgets are hidden + */ + item = glade_xml_get_widget (gui->xml, "source_frame"); + gtk_widget_set_usize (item, -1, item->allocation.height); + item = glade_xml_get_widget (gui->xml, "source_auth_frame"); + gtk_widget_set_usize (item, -1, item->allocation.height); + item = glade_xml_get_widget (gui->xml, "source_vbox"); + gtk_widget_set_usize (item, -1, item->allocation.height); + item = glade_xml_get_widget (gui->xml, "transport_frame"); + gtk_widget_set_usize (item, -1, item->allocation.height); + item = glade_xml_get_widget (gui->xml, "transport_auth_frame"); + gtk_widget_set_usize (item, -1, item->allocation.height); + item = glade_xml_get_widget (gui->xml, "transport_vbox"); + gtk_widget_set_usize (item, -1, item->allocation.height); + + if (fstore) + gtk_signal_emit_by_name (GTK_OBJECT (fstore), "activate", gui); + + if (ftransport) + gtk_signal_emit_by_name (GTK_OBJECT (ftransport), "activate", gui); + + if (source_proto) { + setup_service (&gui->source, gui->account->source); + g_free (source_proto); + if (gui->account->source->auto_check) { + gtk_toggle_button_set_active (gui->source_auto_check, TRUE); + gtk_spin_button_set_value (gui->source_auto_check_min, + gui->account->source->auto_check_time); + } + } + if (transport_proto) { + if (setup_service (&gui->transport, gui->account->transport)) + gtk_toggle_button_set_active (gui->transport_needs_auth, TRUE); + g_free (transport_proto); + } +} + +static void +save_service (MailAccountGuiService *gsvc, GHashTable *extra_config, + MailConfigService *service) +{ + CamelURL *url; + char *str; + + if (!gsvc->provider) { + g_free (service->url); + service->url = NULL; + return; + } + + url = g_new0 (CamelURL, 1); + url->protocol = g_strdup (gsvc->provider->protocol); + + if (CAMEL_PROVIDER_ALLOWS (gsvc->provider, CAMEL_URL_PART_USER)) { + str = gtk_entry_get_text (gsvc->username); + if (str && *str) + url->user = g_strdup (str); + } + + if (CAMEL_PROVIDER_ALLOWS (gsvc->provider, CAMEL_URL_PART_AUTH)) { + CamelServiceAuthType *authtype; + + authtype = gtk_object_get_data (GTK_OBJECT (gsvc->authitem), "authtype"); + if (authtype->authproto && *authtype->authproto) + url->authmech = g_strdup (authtype->authproto); + + service->save_passwd = gtk_toggle_button_get_active (gsvc->remember); + } + + if (CAMEL_PROVIDER_ALLOWS (gsvc->provider, CAMEL_URL_PART_HOST)) { + char *pport; + + str = gtk_entry_get_text (gsvc->hostname); + if (str && *str) { + pport = strchr (str, ':'); + if (pport) { + url->host = g_strndup (str, pport - str); + url->port = atoi (pport + 1); + } else + url->host = g_strdup (str); + } + } + + if (CAMEL_PROVIDER_ALLOWS (gsvc->provider, CAMEL_URL_PART_PATH)) { + str = gtk_entry_get_text (gsvc->path); + if (str && *str) + url->path = g_strdup (str); + } + + if (gsvc->provider->flags & CAMEL_PROVIDER_SUPPORTS_SSL) { + if (gtk_toggle_button_get_active (gsvc->use_ssl)) + camel_url_set_param (url, "use_ssl", ""); + } + + if (extra_config) + extract_values (gsvc, extra_config, url); + + g_free (service->url); + service->url = camel_url_to_string (url, FALSE); + + /* Temporary until keep_on_server moves into the POP provider */ + if (camel_url_get_param (url, "keep_on_server")) + service->keep_on_server = TRUE; + + camel_url_free (url); +} + +gboolean +mail_account_gui_save (MailAccountGui *gui) +{ + MailConfigAccount *account = gui->account; + + if (!mail_account_gui_identity_complete (gui) || + !mail_account_gui_source_complete (gui) || + !mail_account_gui_transport_complete (gui) || + !mail_account_gui_management_complete (gui)) + return FALSE; + + g_free (account->name); + account->name = e_utf8_gtk_entry_get_text (gui->account_name); + account->default_account = gtk_toggle_button_get_active (gui->default_account); + + /* construct the identity */ + identity_destroy (account->id); + account->id = g_new0 (MailConfigIdentity, 1); + account->id->name = e_utf8_gtk_entry_get_text (gui->full_name); + account->id->address = e_utf8_gtk_entry_get_text (gui->email_address); + account->id->organization = e_utf8_gtk_entry_get_text (gui->organization); + account->id->signature = gnome_file_entry_get_full_path (gui->signature, TRUE); + + service_destroy (account->source); + account->source = g_new0 (MailConfigService, 1); + save_service (&gui->source, gui->extra_config, account->source); + account->source->auto_check = gtk_toggle_button_get_active (gui->source_auto_check); + if (account->source->auto_check) + account->source->auto_check_time = gtk_spin_button_get_value_as_int (gui->source_auto_check_min); + + service_destroy (account->transport); + account->transport = g_new0 (MailConfigService, 1); + save_service (&gui->transport, NULL, account->transport); + + return TRUE; +} + +void +mail_account_gui_destroy (MailAccountGui *gui) +{ + gtk_object_unref (GTK_OBJECT (gui->xml)); + if (gui->extra_config) + g_hash_table_destroy (gui->extra_config); +} + diff --git a/mail/mail-account-gui.h b/mail/mail-account-gui.h new file mode 100644 index 0000000000..2684dd934c --- /dev/null +++ b/mail/mail-account-gui.h @@ -0,0 +1,99 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: + * Jeffrey Stedfast <fejj@ximian.com> + * Dan Winship <danw@ximian.com> + * + * Copyright 2001 Ximian, Inc. (www.ximian.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + * + */ + +#ifndef MAIL_ACCOUNT_GUI_H +#define MAIL_ACCOUNT_GUI_H + +#ifdef __cplusplus +extern "C" { +#pragma } +#endif /* __cplusplus */ + +#include <gtk/gtk.h> +#include <libgnomeui/gnome-file-entry.h> +#include <glade/glade-xml.h> +#include <camel/camel-provider.h> + +#include "mail-config.h" + +typedef struct { + GtkOptionMenu *type; + GtkEntry *hostname; + GtkEntry *username; + GtkEntry *path; + GtkToggleButton *use_ssl; + GtkOptionMenu *authtype; + GtkWidget *authitem; + GtkToggleButton *remember; + GtkButton *check_supported; + + CamelProvider *provider; +} MailAccountGuiService; + +typedef struct { + GtkWidget *top; + MailConfigAccount *account; + GladeXML *xml; + + /* identity */ + GtkEntry *full_name; + GtkEntry *email_address; + GtkEntry *organization; + GnomeFileEntry *signature; + + /* incoming mail */ + MailAccountGuiService source; + GtkToggleButton *source_auto_check; + GtkSpinButton *source_auto_check_min; + + /* extra incoming config */ + GHashTable *extra_config; + + /* outgoing mail */ + MailAccountGuiService transport; + GtkToggleButton *transport_needs_auth; + + /* account management */ + GtkEntry *account_name; + GtkToggleButton *default_account; +} MailAccountGui; + + +MailAccountGui *mail_account_gui_new (MailConfigAccount *account); +void mail_account_gui_setup (MailAccountGui *gui, GtkWidget *top); +gboolean mail_account_gui_save (MailAccountGui *gui); +void mail_account_gui_destroy (MailAccountGui *gui); + +gboolean mail_account_gui_identity_complete (MailAccountGui *gui); +gboolean mail_account_gui_source_complete (MailAccountGui *gui); +gboolean mail_account_gui_transport_complete (MailAccountGui *gui); +gboolean mail_account_gui_management_complete (MailAccountGui *gui); + +void mail_account_gui_build_extra_conf (MailAccountGui *gui, const char *url); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* MAIL_ACCOUNT_GUI_H */ diff --git a/mail/mail-accounts.c b/mail/mail-accounts.c index dfe2a1248f..7bb2f5ca9e 100644 --- a/mail/mail-accounts.c +++ b/mail/mail-accounts.c @@ -102,7 +102,7 @@ load_accounts (MailAccountsDialog *dialog) while (node) { CamelURL *url; - gchar *text[2]; + gchar *text[3]; account = node->data; @@ -110,17 +110,17 @@ load_accounts (MailAccountsDialog *dialog) url = camel_url_new (account->source->url, NULL); else url = NULL; - - text[0] = g_strdup (account->name); - text[1] = g_strdup_printf ("%s%s", url && url->protocol ? url->protocol : _("None"), + + text[0] = (account->source && account->source->enabled) ? "+" : ""; + text[1] = account->name; + text[2] = g_strdup_printf ("%s%s", url && url->protocol ? url->protocol : _("None"), account->default_account ? _(" (default)") : ""); if (url) camel_url_free (url); gtk_clist_append (dialog->mail_accounts, text); - g_free (text[0]); - g_free (text[1]); + g_free (text[2]); /* set the account on the row */ gtk_clist_set_row_data (dialog->mail_accounts, i, (gpointer) account); @@ -132,23 +132,31 @@ load_accounts (MailAccountsDialog *dialog) gtk_clist_thaw (dialog->mail_accounts); } +#ifdef ENABLE_NTTP static void load_news (MailAccountsDialog *dialog) { /* FIXME: implement */ ; } +#endif /* mail callbacks */ static void mail_select (GtkCList *clist, gint row, gint column, GdkEventButton *event, gpointer data) { MailAccountsDialog *dialog = data; - + MailConfigAccount *account = gtk_clist_get_row_data (clist, row); + dialog->accounts_row = row; gtk_widget_set_sensitive (GTK_WIDGET (dialog->mail_edit), TRUE); gtk_widget_set_sensitive (GTK_WIDGET (dialog->mail_delete), TRUE); gtk_widget_set_sensitive (GTK_WIDGET (dialog->mail_default), TRUE); + gtk_widget_set_sensitive (GTK_WIDGET (dialog->mail_able), TRUE); + if (account->source && account->source->enabled) + gtk_label_set_text (GTK_LABEL (GTK_BIN (dialog->mail_able)->child), _("Disable")); + else + gtk_label_set_text (GTK_LABEL (GTK_BIN (dialog->mail_able)->child), _("Enable")); } static void @@ -160,6 +168,7 @@ mail_unselect (GtkCList *clist, gint row, gint column, GdkEventButton *event, gp gtk_widget_set_sensitive (GTK_WIDGET (dialog->mail_edit), FALSE); gtk_widget_set_sensitive (GTK_WIDGET (dialog->mail_delete), FALSE); gtk_widget_set_sensitive (GTK_WIDGET (dialog->mail_default), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (dialog->mail_able), FALSE); } static void @@ -197,7 +206,7 @@ mail_edit (GtkButton *button, gpointer data) MailAccountsDialog *dialog = data; if (dialog->accounts_row >= 0) { - const MailConfigAccount *account; + MailConfigAccount *account; MailAccountEditor *editor; account = gtk_clist_get_row_data (dialog->mail_accounts, dialog->accounts_row); @@ -259,6 +268,7 @@ mail_delete (GtkButton *button, gpointer data) gtk_widget_set_sensitive (GTK_WIDGET (dialog->mail_edit), FALSE); gtk_widget_set_sensitive (GTK_WIDGET (dialog->mail_delete), FALSE); gtk_widget_set_sensitive (GTK_WIDGET (dialog->mail_default), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (dialog->mail_able), FALSE); } } } @@ -281,6 +291,24 @@ mail_default (GtkButton *button, gpointer data) } } +static void +mail_able (GtkButton *button, gpointer data) +{ + MailAccountsDialog *dialog = data; + const MailConfigAccount *account; + + if (dialog->accounts_row >= 0) { + int row; + + row = dialog->accounts_row; + account = gtk_clist_get_row_data (dialog->mail_accounts, row); + account->source->enabled = !account->source->enabled; + mail_config_write (); + load_accounts (dialog); + gtk_clist_select_row (dialog->mail_accounts, row, 0); + } +} + #ifdef ENABLE_NNTP /* news callbacks */ static void @@ -446,7 +474,7 @@ construct (MailAccountsDialog *dialog) GladeXML *gui; GtkWidget *notebook; - gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", "mail-accounts-dialog"); + gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", NULL); dialog->gui = gui; /* get our toplevel widget */ @@ -480,6 +508,9 @@ construct (MailAccountsDialog *dialog) dialog->mail_default = GTK_BUTTON (glade_xml_get_widget (gui, "cmdMailDefault")); gtk_signal_connect (GTK_OBJECT (dialog->mail_default), "clicked", GTK_SIGNAL_FUNC (mail_default), dialog); + dialog->mail_able = GTK_BUTTON (glade_xml_get_widget (gui, "cmdMailAble")); + gtk_signal_connect (GTK_OBJECT (dialog->mail_able), "clicked", + GTK_SIGNAL_FUNC (mail_able), dialog); #if defined (ENABLE_NNTP) dialog->news_accounts = GTK_CLIST (glade_xml_get_widget (gui, "clistAccounts")); diff --git a/mail/mail-accounts.h b/mail/mail-accounts.h index 016200484b..6cee8f23ab 100644 --- a/mail/mail-accounts.h +++ b/mail/mail-accounts.h @@ -54,6 +54,7 @@ struct _MailAccountsDialog { GtkButton *mail_edit; GtkButton *mail_delete; GtkButton *mail_default; + GtkButton *mail_able; const GSList *news; gint news_row; diff --git a/mail/mail-config-druid.c b/mail/mail-config-druid.c index 6759879915..371769eb81 100644 --- a/mail/mail-config-druid.c +++ b/mail/mail-config-druid.c @@ -1,8 +1,10 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* - * Authors: Jeffrey Stedfast <fejj@helixcode.com> + * Authors: + * Jeffrey Stedfast <fejj@ximian.com> + * Dan Winship <danw@ximian.com> * - * Copyright 2001 Helix Code, Inc. (www.helixcode.com) + * Copyright 2001 Ximian, Inc. (www.ximian.com) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -33,18 +35,10 @@ #include <sys/types.h> #include <string.h> #include <unistd.h> - -#define d(x) x - -GtkWidget *mail_config_create_html (const char *name, const char *str1, const char *str2, - int int1, int int2); +#include <sys/utsname.h> static void mail_config_druid_class_init (MailConfigDruidClass *class); -static void mail_config_druid_init (MailConfigDruid *druid); -static void mail_config_druid_finalise (GtkObject *obj); - -static void construct_source_auth_menu (MailConfigDruid *druid, GList *authtypes); -static void construct_transport_auth_menu (MailConfigDruid *druid, GList *authtypes); +static void mail_config_druid_finalize (GtkObject *obj); static GtkWindowClass *parent_class; @@ -52,21 +46,21 @@ GtkType mail_config_druid_get_type (void) { static GtkType type = 0; - + if (!type) { GtkTypeInfo type_info = { "MailConfigDruid", sizeof (MailConfigDruid), sizeof (MailConfigDruidClass), (GtkClassInitFunc) mail_config_druid_class_init, - (GtkObjectInitFunc) mail_config_druid_init, + (GtkObjectInitFunc) NULL, (GtkArgSetFunc) NULL, (GtkArgGetFunc) NULL }; - + type = gtk_type_unique (gtk_window_get_type (), &type_info); } - + return type; } @@ -74,28 +68,20 @@ static void mail_config_druid_class_init (MailConfigDruidClass *class) { GtkObjectClass *object_class; - + object_class = (GtkObjectClass *) class; parent_class = gtk_type_class (gtk_window_get_type ()); - - object_class->finalize = mail_config_druid_finalise; - /* override methods */ - -} -static void -mail_config_druid_init (MailConfigDruid *o) -{ - ; + /* override methods */ + object_class->finalize = mail_config_druid_finalize; } static void -mail_config_druid_finalise (GtkObject *obj) +mail_config_druid_finalize (GtkObject *obj) { MailConfigDruid *druid = (MailConfigDruid *) obj; - - gtk_object_unref (GTK_OBJECT (druid->gui)); - + + mail_account_gui_destroy (druid->gui); ((GtkObjectClass *)(parent_class))->finalize (obj); } @@ -104,18 +90,16 @@ static struct { char *name; char *text; } info[] = { - { "htmlIdentity", - "Please enter your name and email address below. The \"optional\" fields below do not need to be filled in, unless you wish to include this information in email you send." }, - { "htmlIncoming", - "Please enter information about your incoming mail server below. If you don't know what kind of server you use, contact your system administrator or Internet Service Provider." }, - { "htmlSourceAuthentication", - "Your mail server supports the following types of authentication. Please select the type you want Evolution to use." }, - { "htmlTransport", - "Please enter information about your outgoing mail protocol below. If you don't know which protocol you use, contact your system administrator or Internet Service Provider." }, - { "htmlTransportAuthentication", - "Your mail transport supports the following types of authentication. Please select the type you want Evolution to use." }, - { "htmlAccountInfo", - "You are almost done with the mail configuration process. The identity, incoming mail server and outgoing mail transport method which you provided will be grouped together to make an Evolution mail account. Please enter a name for this account in the space below. This name will be used for display purposes only." } + { "identity_html", + N_("Please enter your name and email address below. The \"optional\" fields below do not need to be filled in, unless you wish to include this information in email you send.") }, + { "source_html", + N_("Please enter information about your incoming mail server below. If you don't know what kind of server you use, contact your system administrator or Internet Service Provider.") }, + { "extra_html", + "The following options mostly don't work yet and are here only to taunt you. Ha ha!" }, + { "transport_html", + N_("Please enter information about your outgoing mail protocol below. If you don't know which protocol you use, contact your system administrator or Internet Service Provider.") }, + { "management_html", + N_("You are almost done with the mail configuration process. The identity, incoming mail server and outgoing mail transport method which you provided will be grouped together to make an Evolution mail account. Please enter a name for this account in the space below. This name will be used for display purposes only.") } }; static int num_info = (sizeof (info) / sizeof (info[0])); @@ -125,15 +109,15 @@ html_size_req (GtkWidget *widget, GtkRequisition *requisition) requisition->height = GTK_LAYOUT (widget)->height; } -GtkWidget * -mail_config_create_html (const char *name, const char *str1, const char *str2, - int int1, int int2) +static GtkWidget * +create_html (const char *name) { GtkWidget *scrolled, *html; GtkHTMLStream *stream; GtkStyle *style; + char *utf8; int i; - + html = gtk_html_new (); GTK_LAYOUT (html)->height = 0; gtk_signal_connect (GTK_OBJECT (html), "size_request", @@ -147,26 +131,27 @@ mail_config_create_html (const char *name, const char *str1, const char *str2, &style->bg[0]); } gtk_widget_show (html); - + scrolled = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolled); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_NEVER, GTK_POLICY_NEVER); gtk_container_add (GTK_CONTAINER (scrolled), html); - + for (i = 0; i < num_info; i++) { if (!strcmp (name, info[i].name)) break; } g_return_val_if_fail (i != num_info, scrolled); - + stream = gtk_html_begin (GTK_HTML (html)); gtk_html_write (GTK_HTML (html), stream, "<html><p>", 9); - gtk_html_write (GTK_HTML (html), stream, info[i].text, - strlen (info[i].text)); + utf8 = e_utf8_from_locale_string (_(info[i].text)); + gtk_html_write (GTK_HTML (html), stream, utf8, strlen (utf8)); + g_free (utf8); gtk_html_write (GTK_HTML (html), stream, "</p></html>", 11); gtk_html_end (GTK_HTML (html), stream, GTK_HTML_STREAM_OK); - + return scrolled; } @@ -175,7 +160,7 @@ druid_cancel (GnomeDruid *druid, gpointer user_data) { /* Cancel the setup of the account */ MailConfigDruid *config = user_data; - + gtk_widget_destroy (GTK_WIDGET (config)); } @@ -184,567 +169,143 @@ druid_finish (GnomeDruidPage *page, gpointer arg1, gpointer user_data) { /* Cancel the setup of the account */ MailConfigDruid *druid = user_data; - MailConfigAccount *account; - MailConfigIdentity *id; - MailConfigService *source; - MailConfigService *transport; - CamelURL *url; - char *str; - - account = g_new0 (MailConfigAccount, 1); - account->name = mail_config_druid_get_account_name (druid); - account->default_account = mail_config_druid_get_default_account (druid); - - /* construct the identity */ - id = g_new0 (MailConfigIdentity, 1); - id->name = mail_config_druid_get_full_name (druid); - id->address = mail_config_druid_get_email_address (druid); - id->organization = mail_config_druid_get_organization (druid); - id->signature = mail_config_druid_get_sigfile (druid); - - /* construct the source */ - source = g_new0 (MailConfigService, 1); - source->keep_on_server = mail_config_druid_get_keep_mail_on_server (druid); - source->auto_check = mail_config_druid_get_auto_check (druid); - source->auto_check_time = mail_config_druid_get_auto_check_minutes (druid); - source->save_passwd = mail_config_druid_get_save_source_password (druid); - str = mail_config_druid_get_source_url (druid); - if (str) { - /* cache the password and rewrite the url without the password part */ - url = camel_url_new (str, NULL); - g_free (str); - source->url = camel_url_to_string (url, FALSE); - if (source->save_passwd && url->passwd) { - mail_session_set_password (source->url, url->passwd); - mail_session_remember_password (source->url); - } - camel_url_free (url); - source->enabled = TRUE; - } else { - source->url = NULL; - source->enabled = FALSE; - } - - /* construct the transport */ - transport = g_new0 (MailConfigService, 1); - transport->save_passwd = mail_config_druid_get_save_transport_password (druid); - str = mail_config_druid_get_transport_url (druid); - if (str) { - /* cache the password and rewrite the url without the password part */ - url = camel_url_new (str, NULL); - g_free (str); - transport->url = camel_url_to_string (url, FALSE); - if (transport->save_passwd && url->passwd) { - mail_session_set_password (transport->url, url->passwd); - mail_session_remember_password (transport->url); - } - camel_url_free (url); - transport->enabled = TRUE; - } - - account->id = id; - account->source = source; - account->transport = transport; - - mail_config_add_account (account); + MailAccountGui *gui = druid->gui; + GSList *mini; + + mail_account_gui_save (gui); + if (gui->account->source) + gui->account->source->enabled = TRUE; + mail_config_add_account (gui->account); mail_config_write (); - - if (source->url) { - GSList *mini; - - mini = g_slist_prepend (NULL, account); - mail_load_storages (druid->shell, mini, TRUE); - g_slist_free (mini); - } - - gtk_widget_destroy (GTK_WIDGET (druid)); -} -static gboolean -is_email (const char *address) -{ - const char *at, *hname; - - g_return_val_if_fail (address != NULL, FALSE); - - at = strchr (address, '@'); - /* make sure we have an '@' and that it's not the first or last char */ - if (!at || at == address || *(at + 1) == '\0') - return FALSE; - - hname = at + 1; - /* make sure the first and last chars aren't '.' */ - if (*hname == '.' || hname[strlen (hname) - 1] == '.') - return FALSE; - - return strchr (hname, '.') != NULL; -} + mini = g_slist_prepend (NULL, gui->account); + mail_load_storages (druid->shell, mini, TRUE); + g_slist_free (mini); -/* Identity Page */ -static void -identity_check (MailConfigDruid *druid) -{ - char *address; - - address = gtk_entry_get_text (druid->email_address); - if (gtk_entry_get_text (druid->full_name) && is_email (address)) - gnome_druid_set_buttons_sensitive (druid->druid, TRUE, TRUE, TRUE); - else - gnome_druid_set_buttons_sensitive (druid->druid, TRUE, FALSE, TRUE); + gtk_widget_destroy (GTK_WIDGET (druid)); } +/* Identity Page */ static void identity_changed (GtkWidget *widget, gpointer data) { MailConfigDruid *druid = data; - - identity_check (druid); + gboolean next_sensitive = mail_account_gui_identity_complete (druid->gui); + + gnome_druid_set_buttons_sensitive (druid->druid, TRUE, next_sensitive, TRUE); } static void identity_prepare (GnomeDruidPage *page, GnomeDruid *druid, gpointer data) { MailConfigDruid *config = data; - - gtk_widget_grab_focus (GTK_WIDGET (config->full_name)); - - identity_check (config); + + gtk_widget_grab_focus (GTK_WIDGET (config->gui->full_name)); + identity_changed (NULL, config); } static gboolean identity_next (GnomeDruidPage *page, GnomeDruid *druid, gpointer data) { - /* go to the next page */ + MailConfigDruid *config = data; + + if (!config->identity_copied) { + char *username; + + /* Copy the username part of the email address into + * the Username field of the source and transport pages. + */ + username = gtk_entry_get_text (config->gui->email_address); + username = g_strndup (username, strcspn (username, "@")); + gtk_entry_set_text (config->gui->source.username, username); + gtk_entry_set_text (config->gui->transport.username, username); + g_free (username); + + config->identity_copied = TRUE; + } + return FALSE; } /* Incoming mail Page */ static void -incoming_check (MailConfigDruid *druid) -{ - const CamelProvider *prov = druid->source_provider; - gboolean host = TRUE, user = TRUE, path = TRUE; - gboolean next_sensitive = TRUE; - - if (prov && CAMEL_PROVIDER_NEEDS (prov, CAMEL_URL_PART_HOST)) - host = gtk_entry_get_text (druid->incoming_hostname) != NULL; - - if (prov && CAMEL_PROVIDER_NEEDS (prov, CAMEL_URL_PART_USER)) - user = gtk_entry_get_text (druid->incoming_username) != NULL; - - if (prov && CAMEL_PROVIDER_NEEDS (prov, CAMEL_URL_PART_PATH)) - path = gtk_entry_get_text (druid->incoming_path) != NULL; - - next_sensitive = host && user && path; - - gnome_druid_set_buttons_sensitive (druid->druid, TRUE, next_sensitive, TRUE); -} - -static void -auto_check_toggled (GtkToggleButton *button, gpointer data) +source_changed (GtkWidget *widget, gpointer data) { MailConfigDruid *druid = data; - - gtk_widget_set_sensitive (GTK_WIDGET (druid->incoming_auto_check_min), - gtk_toggle_button_get_active (button)); -} + gboolean next_sensitive = mail_account_gui_source_complete (druid->gui); -static void -incoming_changed (GtkWidget *widget, gpointer data) -{ - MailConfigDruid *druid = data; - - incoming_check (druid); + gnome_druid_set_buttons_sensitive (druid->druid, TRUE, next_sensitive, TRUE); } static void -incoming_prepare (GnomeDruidPage *page, GnomeDruid *druid, gpointer data) +source_prepare (GnomeDruidPage *page, GnomeDruid *druid, gpointer data) { MailConfigDruid *config = data; - - if (!gtk_object_get_data (GTK_OBJECT (page), "initialized")) { - char *username; - - /* Copy the username part of the email address into - * the Username field. - */ - username = gtk_entry_get_text (config->email_address); - username = g_strndup (username, strcspn (username, "@")); - gtk_entry_set_text (config->incoming_username, username); - g_free (username); - - gtk_object_set_data (GTK_OBJECT (page), "initialized", - GINT_TO_POINTER (1)); - } - - incoming_check (config); + + source_changed (NULL, config); } static gboolean -incoming_next (GnomeDruidPage *page, GnomeDruid *druid, gpointer data) +source_next (GnomeDruidPage *page, GnomeDruid *druid, gpointer data) { MailConfigDruid *config = data; GtkWidget *transport_page; - GList *authtypes = NULL; - gchar *source_url; - gboolean connect; - CamelURL *url; - - config->have_source_auth_page = TRUE; - - source_url = mail_config_druid_get_source_url (config); - if (!source_url) { - /* User opted to not setup a source for this account, - * so jump past the auth page */ - - /* Skip to transport page. */ - config->have_source_auth_page = FALSE; - transport_page = glade_xml_get_widget (config->gui, "druidTransportPage"); - gnome_druid_set_page (config->druid, GNOME_DRUID_PAGE (transport_page)); - - return TRUE; - } - - url = camel_url_new (source_url, NULL); - g_free (source_url); - - connect = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (config->incoming_check_settings)); - - /* If we can't connect, warn them and continue on to the Transport page. */ - if (!mail_config_check_service (url, CAMEL_PROVIDER_STORE, connect, &authtypes)) { - GtkWidget *dialog; - char *source, *warning; - - source = camel_url_to_string (url, FALSE); - camel_url_free (url); - - warning = g_strdup_printf (_("Failed to verify the incoming mail configuration.\n" - "You may experience problems retrieving your mail from %s"), - source); - g_free (source); - dialog = gnome_warning_dialog_parented (warning, GTK_WINDOW (config)); - g_free (warning); - - gnome_dialog_run_and_close (GNOME_DIALOG (dialog)); - - return TRUE; - } - camel_url_free (url); - - /* If this service offers authentication, go to the next page. */ - if (authtypes) { - construct_source_auth_menu (config, authtypes); + + /* FIXME: if online, check that the data is good. */ + + if (config->gui->source.provider && config->gui->source.provider->extra_conf) return FALSE; - } - + /* Otherwise, skip to transport page. */ - config->have_source_auth_page = FALSE; - transport_page = glade_xml_get_widget (config->gui, "druidTransportPage"); + transport_page = glade_xml_get_widget (config->gui->xml, "transport_page"); gnome_druid_set_page (config->druid, GNOME_DRUID_PAGE (transport_page)); - - return TRUE; -} -static void -incoming_type_changed (GtkWidget *widget, gpointer user_data) -{ - MailConfigDruid *druid = user_data; - GtkWidget *label, *dwidget = NULL; - CamelProvider *provider; - - provider = gtk_object_get_data (GTK_OBJECT (widget), "provider"); - - druid->source_provider = provider; - - gtk_widget_set_sensitive (GTK_WIDGET (druid->incoming_auto_check), provider ? TRUE : FALSE); - gtk_widget_set_sensitive (GTK_WIDGET (druid->incoming_auto_check_min), provider ? TRUE : FALSE); - gtk_widget_set_sensitive (GTK_WIDGET (druid->incoming_check_settings), provider ? TRUE : FALSE); - - /* hostname */ - label = glade_xml_get_widget (druid->gui, "lblSourceHost"); - if (provider && CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_HOST)) { - dwidget = GTK_WIDGET (druid->incoming_hostname); - gtk_widget_set_sensitive (GTK_WIDGET (druid->incoming_hostname), TRUE); - gtk_widget_set_sensitive (label, TRUE); - } else { - gtk_entry_set_text (druid->incoming_hostname, ""); - gtk_widget_set_sensitive (GTK_WIDGET (druid->incoming_hostname), FALSE); - gtk_widget_set_sensitive (label, FALSE); - } - - /* username */ - label = glade_xml_get_widget (druid->gui, "lblSourceUser"); - if (provider && CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_USER)) { - if (!dwidget) - dwidget = GTK_WIDGET (druid->incoming_username); - gtk_widget_set_sensitive (GTK_WIDGET (druid->incoming_username), TRUE); - gtk_widget_set_sensitive (label, TRUE); - } else { - gtk_entry_set_text (druid->incoming_username, ""); - gtk_widget_set_sensitive (GTK_WIDGET (druid->incoming_username), FALSE); - gtk_widget_set_sensitive (label, FALSE); - } - - /* password */ - label = glade_xml_get_widget (druid->gui, "lblSourcePasswd"); - if (provider && CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_PASSWORD)) { - if (!dwidget) - dwidget = GTK_WIDGET (druid->source_password); - gtk_widget_set_sensitive (GTK_WIDGET (druid->source_password), TRUE); - gtk_widget_set_sensitive (label, TRUE); - } else { - gtk_entry_set_text (druid->source_password, ""); - gtk_widget_set_sensitive (GTK_WIDGET (druid->source_password), FALSE); - gtk_widget_set_sensitive (label, FALSE); - } - - /* auth */ - label = glade_xml_get_widget (druid->gui, "lblSourceAuthType"); - if (provider && CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_AUTH)) { - gtk_widget_set_sensitive (GTK_WIDGET (druid->source_auth_type), TRUE); - gtk_widget_set_sensitive (label, TRUE); - } else { - gtk_widget_set_sensitive (GTK_WIDGET (druid->source_auth_type), FALSE); - gtk_widget_set_sensitive (label, FALSE); - } - - /* path */ - label = glade_xml_get_widget (druid->gui, "lblSourcePath"); - /* FIXME */ - if (provider && !strcmp (provider->protocol, "imap")) - gtk_label_set_text (GTK_LABEL (label), _("Namespace:")); - else - gtk_label_set_text (GTK_LABEL (label), _("Path:")); - if (provider && CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_PATH)) { - if (!dwidget) - dwidget = GTK_WIDGET (druid->incoming_path); - - if (!strcmp (provider->protocol, "mbox")) { - char *path; - - if (getenv ("MAIL")) - path = g_strdup (getenv ("MAIL")); - else - path = g_strdup_printf (SYSTEM_MAIL_DIR "/%s", g_get_user_name ()); - gtk_entry_set_text (druid->incoming_path, path); - g_free (path); - } else if (!strcmp (provider->protocol, "maildir") && - getenv ("MAILDIR")) { - gtk_entry_set_text (druid->incoming_path, getenv ("MAILDIR")); - } else { - gtk_entry_set_text (druid->incoming_path, ""); - } - - gtk_widget_set_sensitive (GTK_WIDGET (druid->incoming_path), TRUE); - gtk_widget_set_sensitive (label, TRUE); - } else { - gtk_entry_set_text (druid->incoming_path, ""); - gtk_widget_set_sensitive (GTK_WIDGET (druid->incoming_path), FALSE); - gtk_widget_set_sensitive (label, FALSE); - } - - /* keep mail on server */ - if (provider && !(provider->flags & CAMEL_PROVIDER_IS_STORAGE)) - gtk_widget_set_sensitive (GTK_WIDGET (druid->incoming_keep_mail), TRUE); - else - gtk_widget_set_sensitive (GTK_WIDGET (druid->incoming_keep_mail), FALSE); - - incoming_check (druid); - - if (dwidget) - gtk_widget_grab_focus (dwidget); -} - -/* Source Authentication Page */ -static void -source_auth_check (MailConfigDruid *druid) -{ - if (mail_config_druid_get_save_source_password (druid)) { - char *passwd = gtk_entry_get_text (druid->source_password); - - if (passwd && *passwd) - gnome_druid_set_buttons_sensitive (druid->druid, TRUE, TRUE, TRUE); - else - gnome_druid_set_buttons_sensitive (druid->druid, TRUE, FALSE, TRUE); - } else { - gnome_druid_set_buttons_sensitive (druid->druid, TRUE, TRUE, TRUE); - } -} - -static void -source_auth_changed (GtkWidget *widget, gpointer data) -{ - MailConfigDruid *druid = data; - - source_auth_check (druid); + return TRUE; } +/* Extra Config Page */ static void -source_auth_prepare (GnomeDruidPage *page, GnomeDruid *druid, gpointer data) +extra_prepare (GnomeDruidPage *page, GnomeDruid *druid, gpointer data) { MailConfigDruid *config = data; - - source_auth_check (config); -} - -static gboolean -source_auth_next (GnomeDruidPage *page, GnomeDruid *druid, gpointer data) -{ - /* go to the next page */ - return FALSE; -} -static void -source_auth_type_changed (GtkWidget *widget, gpointer user_data) -{ - MailConfigDruid *druid = user_data; - CamelServiceAuthType *authtype; - GtkWidget *label; - gboolean sensitive; - - authtype = gtk_object_get_data (GTK_OBJECT (widget), "authtype"); - - gtk_object_set_data (GTK_OBJECT (druid), "source_authmech", authtype->authproto); - - if (authtype->need_password) - sensitive = TRUE; - else - sensitive = FALSE; - - label = glade_xml_get_widget (druid->gui, "lblSourcePasswd"); - gtk_widget_set_sensitive (GTK_WIDGET (druid->source_password), sensitive); - gtk_widget_set_sensitive (GTK_WIDGET (druid->save_source_password), sensitive); - gtk_widget_set_sensitive (label, sensitive); - - if (!sensitive) - gtk_entry_set_text (druid->source_password, ""); - - source_auth_check (druid); -} - -static void -construct_source_auth_menu (MailConfigDruid *druid, GList *authtypes) -{ - GtkWidget *menu, *item, *first = NULL; - CamelServiceAuthType *authtype; - GList *l; - - menu = gtk_menu_new (); - - l = authtypes; - while (l) { - authtype = l->data; - - item = gtk_menu_item_new_with_label (authtype->name); - gtk_object_set_data (GTK_OBJECT (item), "authtype", authtype); - gtk_signal_connect (GTK_OBJECT (item), "activate", - GTK_SIGNAL_FUNC (source_auth_type_changed), - druid); - - gtk_menu_append (GTK_MENU (menu), item); - - gtk_widget_show (item); - - if (!first) - first = item; - - l = l->next; + if (config->gui->source.provider != config->last_source) { + config->last_source = config->gui->source.provider; + mail_account_gui_build_extra_conf (config->gui, NULL); } - - if (first) - gtk_signal_emit_by_name (GTK_OBJECT (first), "activate", druid); - - gtk_option_menu_remove_menu (druid->source_auth_type); - gtk_option_menu_set_menu (druid->source_auth_type, menu); } /* Transport Page */ static void -transport_check (MailConfigDruid *druid) -{ - const CamelProvider *prov = druid->transport_provider; - gboolean next_sensitive = TRUE; - - if (prov && CAMEL_PROVIDER_NEEDS (prov, CAMEL_URL_PART_HOST)) - next_sensitive = gtk_entry_get_text (druid->outgoing_hostname) != NULL; - - gnome_druid_set_buttons_sensitive (druid->druid, TRUE, next_sensitive, TRUE); -} - -static void transport_prepare (GnomeDruidPage *page, GnomeDruid *druid, gpointer data) { MailConfigDruid *config = data; - - transport_check (config); + gboolean next_sensitive = mail_account_gui_transport_complete (config->gui); + + gnome_druid_set_buttons_sensitive (config->druid, TRUE, next_sensitive, TRUE); } static gboolean transport_next (GnomeDruidPage *page, GnomeDruid *druid, gpointer data) { - MailConfigDruid *config = data; - GtkWidget *management_page; - GList *authtypes = NULL; - gboolean connect; - char *xport_url; - CamelURL *url; - - xport_url = mail_config_druid_get_transport_url (config); - if (!xport_url) - return TRUE; - - url = camel_url_new (xport_url, NULL); - g_free (xport_url); - - connect = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (config->outgoing_check_settings)); - - /* If we can't connect, don't let them continue. */ - if (!mail_config_check_service (url, CAMEL_PROVIDER_TRANSPORT, connect, &authtypes)) { - GtkWidget *dialog; - char *transport, *warning; - - transport = camel_url_to_string (url, FALSE); - - warning = g_strdup_printf (_("Failed to verify the outgoing mail configuration.\n" - "You may experience problems sending your mail using %s"), - transport); - g_free (transport); - dialog = gnome_warning_dialog_parented (warning, GTK_WINDOW (config)); - g_free (warning); - - gnome_dialog_run_and_close (GNOME_DIALOG (dialog)); - } - - camel_url_free (url); - - /* If this service offers authentication, go to the next page. */ - if (authtypes && mail_config_druid_get_transport_requires_auth (config)) { - construct_transport_auth_menu (config, authtypes); - return FALSE; - } - - /* Otherwise, skip to management page. */ - config->have_transport_auth_page = FALSE; - management_page = glade_xml_get_widget (config->gui, "druidManagementPage"); - gnome_druid_set_page (config->druid, GNOME_DRUID_PAGE (management_page)); - - return TRUE; + /* FIXME: if online, check that the data is good. */ + return FALSE; } static gboolean transport_back (GnomeDruidPage *page, GnomeDruid *druid, gpointer data) { MailConfigDruid *config = data; - - if (config->have_source_auth_page) { + + if (config->gui->source.provider && config->gui->source.provider->extra_conf) return FALSE; - } else { - /* jump to the source page, skipping over the auth page */ + else { + /* jump to the source page, skipping over the extra page */ GtkWidget *widget; - - widget = glade_xml_get_widget (config->gui, "druidSourcePage"); + + widget = glade_xml_get_widget (config->gui->xml, "source_page"); gnome_druid_set_page (config->druid, GNOME_DRUID_PAGE (widget)); - + return TRUE; } } @@ -752,154 +313,7 @@ transport_back (GnomeDruidPage *page, GnomeDruid *druid, gpointer data) static void transport_changed (GtkWidget *widget, gpointer data) { - MailConfigDruid *druid = data; - - transport_check (druid); -} - -static void -transport_type_changed (GtkWidget *widget, gpointer user_data) -{ - MailConfigDruid *druid = user_data; - CamelProvider *provider; - GtkWidget *label; - - provider = gtk_object_get_data (GTK_OBJECT (widget), "provider"); - druid->transport_provider = provider; - - /* hostname */ - label = glade_xml_get_widget (druid->gui, "lblTransportHost"); - if (CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_HOST)) { - gtk_widget_grab_focus (GTK_WIDGET (druid->outgoing_hostname)); - gtk_widget_set_sensitive (GTK_WIDGET (druid->outgoing_hostname), TRUE); - gtk_widget_set_sensitive (label, TRUE); - } else { - gtk_entry_set_text (druid->outgoing_hostname, ""); - gtk_widget_set_sensitive (GTK_WIDGET (druid->outgoing_hostname), FALSE); - gtk_widget_set_sensitive (label, FALSE); - } - - /* auth */ - if (CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_AUTH)) - gtk_widget_set_sensitive (GTK_WIDGET (druid->outgoing_requires_auth), TRUE); - else - gtk_widget_set_sensitive (GTK_WIDGET (druid->outgoing_requires_auth), FALSE); - - transport_check (druid); -} - -/* Transport Authentication Page */ -static void -transport_auth_check (MailConfigDruid *druid) -{ - char *user = gtk_entry_get_text (druid->transport_username); - gboolean sensitive = FALSE; - - if (user && *user) { - if (mail_config_druid_get_save_transport_password (druid)) { - char *passwd = gtk_entry_get_text (druid->transport_password); - - if (passwd && *passwd) - sensitive = TRUE; - } else { - sensitive = TRUE; - } - } - - gnome_druid_set_buttons_sensitive (druid->druid, TRUE, sensitive, TRUE); -} - -static void -transport_auth_changed (GtkWidget *widget, gpointer data) -{ - MailConfigDruid *druid = data; - - transport_auth_check (druid); -} - -static void -transport_auth_prepare (GnomeDruidPage *page, GnomeDruid *druid, gpointer data) -{ - MailConfigDruid *config = data; - - transport_auth_check (config); -} - -static gboolean -transport_auth_next (GnomeDruidPage *page, GnomeDruid *druid, gpointer data) -{ - /* go to the next page */ - return FALSE; -} - -static void -transport_auth_type_changed (GtkWidget *widget, gpointer user_data) -{ - MailConfigDruid *druid = user_data; - CamelServiceAuthType *authtype; - GtkWidget *label; - gboolean sensitive; - - authtype = gtk_object_get_data (GTK_OBJECT (widget), "authtype"); - - gtk_object_set_data (GTK_OBJECT (druid), "transport_authmech", authtype->authproto); - - if (authtype->need_password) - sensitive = TRUE; - else - sensitive = FALSE; - - label = glade_xml_get_widget (druid->gui, "lblTransportUsername"); - gtk_widget_set_sensitive (GTK_WIDGET (druid->transport_username), sensitive); - gtk_widget_set_sensitive (label, sensitive); - - label = glade_xml_get_widget (druid->gui, "lblTransportPasswd"); - gtk_widget_set_sensitive (GTK_WIDGET (druid->transport_password), sensitive); - gtk_widget_set_sensitive (GTK_WIDGET (druid->save_transport_password), sensitive); - gtk_widget_set_sensitive (label, sensitive); - - if (!sensitive) { - gtk_entry_set_text (druid->transport_username, ""); - gtk_entry_set_text (druid->transport_password, ""); - } - - transport_auth_check (druid); -} - -static void -construct_transport_auth_menu (MailConfigDruid *druid, GList *authtypes) -{ - GtkWidget *menu, *item, *first = NULL; - CamelServiceAuthType *authtype; - GList *l; - - menu = gtk_menu_new (); - - l = authtypes; - while (l) { - authtype = l->data; - - item = gtk_menu_item_new_with_label (authtype->name); - gtk_object_set_data (GTK_OBJECT (item), "authtype", authtype); - gtk_signal_connect (GTK_OBJECT (item), "activate", - GTK_SIGNAL_FUNC (transport_auth_type_changed), - druid); - - gtk_menu_append (GTK_MENU (menu), item); - - gtk_widget_show (item); - - if (!first) - first = item; - - l = l->next; - } - - if (first) - gtk_signal_emit_by_name (GTK_OBJECT (first), "activate", druid); - - gtk_option_menu_remove_menu (druid->transport_auth_type); - gtk_option_menu_set_menu (druid->transport_auth_type, menu); + transport_prepare (NULL, NULL, data); } /* Management page */ @@ -907,9 +321,11 @@ static void management_check (MailConfigDruid *druid) { gboolean next_sensitive; - - next_sensitive = gtk_entry_get_text (druid->account_name) != NULL; - + char *text; + + text = gtk_entry_get_text (druid->gui->account_name); + next_sensitive = text && *text; + gnome_druid_set_buttons_sensitive (druid->druid, TRUE, next_sensitive, TRUE); } @@ -918,13 +334,11 @@ management_prepare (GnomeDruidPage *page, GnomeDruid *druid, gpointer data) { MailConfigDruid *config = data; char *name; - - name = e_utf8_gtk_entry_get_text (config->email_address); - if (name) { - e_utf8_gtk_entry_set_text (config->account_name, name); - g_free (name); - } - + + name = gtk_entry_get_text (config->gui->email_address); + if (name && *name) + gtk_entry_set_text (config->gui->account_name, name); + management_check (config); } @@ -932,211 +346,33 @@ static void management_changed (GtkWidget *widget, gpointer data) { MailConfigDruid *druid = data; - - management_check (druid); -} -static gboolean -management_next (GnomeDruidPage *page, GnomeDruid *druid, gpointer data) -{ - return FALSE; + management_check (druid); } -static gboolean -management_back (GnomeDruidPage *page, GnomeDruid *druid, gpointer data) -{ - MailConfigDruid *config = data; - - if (config->have_transport_auth_page) { - return FALSE; - } else { - /* jump to the source page, skipping over the auth page */ - GtkWidget *widget; - - widget = glade_xml_get_widget (config->gui, "druidTransportPage"); - gnome_druid_set_page (config->druid, GNOME_DRUID_PAGE (widget)); - - return TRUE; - } -} -static gint -provider_compare (const CamelProvider *p1, const CamelProvider *p2) +static MailConfigAccount * +make_default_account (void) { - /* sort providers based on "location" (ie. local or remote) */ - if (p1->flags & CAMEL_PROVIDER_IS_REMOTE) { - if (p2->flags & CAMEL_PROVIDER_IS_REMOTE) - return 0; - return -1; - } else { - if (p2->flags & CAMEL_PROVIDER_IS_REMOTE) - return 1; - return 0; - } -} + MailConfigAccount *account; + char *name, *user; + struct utsname uts; -static gboolean -is_domain (const char *domain) -{ - /* domain && *domain should be enough but linux's - getdomainname() likes to return "(none)" */ - return domain && *domain && strcmp (domain, "(none)"); -} + account = g_new0 (MailConfigAccount, 1); + if (!mail_config_get_default_account) + account->default_account = TRUE; -static void -set_defaults (MailConfigDruid *druid) -{ - const MailConfigService *default_xport; - GtkWidget *stores, *transports, *item; - GtkWidget *fstore = NULL, *ftransport = NULL; - int si = 0, hstore = 0, ti = 0, htransport = 0; - char *user, *realname; - char hostname[1024]; - char domain[1024]; - CamelURL *url; - GList *l; - - /* set the default Name field */ - realname = g_get_real_name (); - if (realname) - e_utf8_gtk_entry_set_text (druid->full_name, realname); - - /* set the default E-Mail Address field */ + account->id = g_new0 (MailConfigIdentity, 1); + name = g_get_real_name (); + account->id->name = g_strdup (name); user = getenv ("USER"); - if (user && !gethostname (hostname, 1023)) { - char *address; - - memset (domain, 0, sizeof (domain)); - getdomainname (domain, 1023); - - address = g_strdup_printf ("%s@%s%s%s", user, hostname, is_domain (domain) ? "." : "", - is_domain (domain) ? domain : ""); - - gtk_entry_set_text (druid->email_address, address); - g_free (address); - } - - /* construct incoming/outgoing option menus */ - stores = gtk_menu_new (); - transports = gtk_menu_new (); - druid->providers = camel_session_list_providers (session, TRUE); - - /* get the default transport */ - default_xport = mail_config_get_default_transport (); - if (default_xport && default_xport->url) - url = camel_url_new (default_xport->url, NULL); - else - url = NULL; - - /* sort the providers, remote first */ - druid->providers = g_list_sort (druid->providers, (GCompareFunc) provider_compare); - - l = druid->providers; - while (l) { - CamelProvider *provider = l->data; - - if (strcmp (provider->domain, "mail")) { - l = l->next; - continue; - } - - if (provider->object_types[CAMEL_PROVIDER_STORE] && provider->flags & CAMEL_PROVIDER_IS_SOURCE) { - item = gtk_menu_item_new_with_label (provider->name); - gtk_object_set_data (GTK_OBJECT (item), "provider", provider); - gtk_signal_connect (GTK_OBJECT (item), "activate", - GTK_SIGNAL_FUNC (incoming_type_changed), - druid); - - gtk_menu_append (GTK_MENU (stores), item); - - gtk_widget_show (item); - - if (!fstore) { - fstore = item; - hstore = si; - } - - si++; - } - - if (provider->object_types[CAMEL_PROVIDER_TRANSPORT]) { - item = gtk_menu_item_new_with_label (provider->name); - gtk_object_set_data (GTK_OBJECT (item), "provider", provider); - gtk_signal_connect (GTK_OBJECT (item), "activate", - GTK_SIGNAL_FUNC (transport_type_changed), - druid); - - gtk_menu_append (GTK_MENU (transports), item); - - gtk_widget_show (item); - - if (!ftransport) { - ftransport = item; - htransport = ti; - } - - if (url && !g_strcasecmp (provider->protocol, url->protocol)) { - ftransport = item; - htransport = ti; - } - - ti++; - } - - l = l->next; - } - - /* add a "None" option to the stores menu */ - item = gtk_menu_item_new_with_label (_("None")); - gtk_object_set_data (GTK_OBJECT (item), "provider", NULL); - gtk_signal_connect (GTK_OBJECT (item), "activate", - GTK_SIGNAL_FUNC (incoming_type_changed), - druid); - - gtk_menu_append (GTK_MENU (stores), item); - - gtk_widget_show (item); - - if (!fstore) { - fstore = item; - hstore = si; - } - - /* set the menus on the optionmenus */ - gtk_option_menu_remove_menu (druid->incoming_type); - gtk_option_menu_set_menu (druid->incoming_type, stores); - gtk_option_menu_set_history (druid->incoming_type, hstore); - - gtk_option_menu_remove_menu (druid->outgoing_type); - gtk_option_menu_set_menu (druid->outgoing_type, transports); - gtk_option_menu_set_history (druid->outgoing_type, htransport); - - if (fstore) - gtk_signal_emit_by_name (GTK_OBJECT (fstore), "activate", druid); - - if (ftransport) - gtk_signal_emit_by_name (GTK_OBJECT (ftransport), "activate", druid); - - if (url) { - if (url->host) { - char *hostname; - - if (url->port) - hostname = g_strdup_printf ("%s:%d", url->host, url->port); - else - hostname = g_strdup (url->host); - - gtk_entry_set_text (druid->outgoing_hostname, hostname); - g_free (hostname); - } - camel_url_free (url); - } -} + if (user && !uname (&uts) && strchr (uts.nodename, '.')) + account->id->address = g_strdup_printf ("%s@%s", user, uts.nodename); -static gboolean -start_next (GnomeDruidPage *page, GnomeDruid *druid, gpointer data) -{ - return FALSE; + if (mail_config_get_default_transport ()) + account->transport = service_copy (mail_config_get_default_transport ()); + + return account; } static struct { @@ -1146,42 +382,32 @@ static struct { GtkSignalFunc back_func; GtkSignalFunc finish_func; } pages[] = { - { "druidStartPage", - GTK_SIGNAL_FUNC (start_next), - GTK_SIGNAL_FUNC (NULL), - GTK_SIGNAL_FUNC (NULL), - GTK_SIGNAL_FUNC (NULL) }, - { "druidIdentityPage", + { "identity_page", GTK_SIGNAL_FUNC (identity_next), GTK_SIGNAL_FUNC (identity_prepare), GTK_SIGNAL_FUNC (NULL), GTK_SIGNAL_FUNC (NULL) }, - { "druidSourcePage", - GTK_SIGNAL_FUNC (incoming_next), - GTK_SIGNAL_FUNC (incoming_prepare), + { "source_page", + GTK_SIGNAL_FUNC (source_next), + GTK_SIGNAL_FUNC (source_prepare), GTK_SIGNAL_FUNC (NULL), GTK_SIGNAL_FUNC (NULL) }, - { "druidSourceAuthPage", - GTK_SIGNAL_FUNC (source_auth_next), - GTK_SIGNAL_FUNC (source_auth_prepare), + { "extra_page", + GTK_SIGNAL_FUNC (NULL), + GTK_SIGNAL_FUNC (extra_prepare), GTK_SIGNAL_FUNC (NULL), GTK_SIGNAL_FUNC (NULL) }, - { "druidTransportPage", + { "transport_page", GTK_SIGNAL_FUNC (transport_next), GTK_SIGNAL_FUNC (transport_prepare), GTK_SIGNAL_FUNC (transport_back), GTK_SIGNAL_FUNC (NULL) }, - { "druidTransportAuthPage", - GTK_SIGNAL_FUNC (transport_auth_next), - GTK_SIGNAL_FUNC (transport_auth_prepare), + { "management_page", GTK_SIGNAL_FUNC (NULL), - GTK_SIGNAL_FUNC (NULL) }, - { "druidManagementPage", - GTK_SIGNAL_FUNC (management_next), GTK_SIGNAL_FUNC (management_prepare), - GTK_SIGNAL_FUNC (management_back), + GTK_SIGNAL_FUNC (NULL), GTK_SIGNAL_FUNC (NULL) }, - { "druidFinishPage", + { "finish_page", GTK_SIGNAL_FUNC (NULL), GTK_SIGNAL_FUNC (NULL), GTK_SIGNAL_FUNC (NULL), @@ -1196,33 +422,31 @@ static struct { static void construct (MailConfigDruid *druid) { - GladeXML *gui; - GtkWidget *widget; + GtkWidget *widget, *vbox; + MailConfigAccount *account; int i; - - gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", "mail-config-druid"); - druid->gui = gui; - - /* get our toplevel widget */ - widget = glade_xml_get_widget (gui, "druid"); - - /* reparent */ + + account = make_default_account (); + druid->gui = mail_account_gui_new (account); + + /* get our toplevel widget and reparent it */ + widget = glade_xml_get_widget (druid->gui->xml, "druid"); gtk_widget_reparent (widget, GTK_WIDGET (druid)); - + druid->druid = GNOME_DRUID (widget); - + /* set window title */ gtk_window_set_title (GTK_WINDOW (druid), _("Evolution Account Wizard")); - gtk_window_set_policy (GTK_WINDOW (druid), FALSE, TRUE, TRUE); + gtk_window_set_policy (GTK_WINDOW (druid), FALSE, TRUE, FALSE); gtk_window_set_modal (GTK_WINDOW (druid), TRUE); gtk_object_set (GTK_OBJECT (druid), "type", GTK_WINDOW_DIALOG, NULL); - + /* attach to druid page signals */ for (i = 0; pages[i].name != NULL; i++) { - GnomeDruidPage *page; - - page = GNOME_DRUID_PAGE (glade_xml_get_widget (gui, pages[i].name)); - + GtkWidget *page; + + page = glade_xml_get_widget (druid->gui->xml, pages[i].name); + if (pages[i].next_func) gtk_signal_connect (GTK_OBJECT (page), "next", pages[i].next_func, druid); @@ -1237,273 +461,65 @@ construct (MailConfigDruid *druid) pages[i].finish_func, druid); } gtk_signal_connect (GTK_OBJECT (druid->druid), "cancel", druid_cancel, druid); - - /* get our cared-about widgets */ - druid->account_text = glade_xml_get_widget (gui, "htmlAccountInfo"); - druid->account_name = GTK_ENTRY (glade_xml_get_widget (gui, "txtAccountName")); - gtk_signal_connect (GTK_OBJECT (druid->account_name), "changed", management_changed, druid); - druid->default_account = GTK_CHECK_BUTTON (glade_xml_get_widget (gui, "chkAccountDefault")); - - druid->identity_text = glade_xml_get_widget (gui, "htmlIdentity"); - druid->full_name = GTK_ENTRY (glade_xml_get_widget (gui, "txtFullName")); - gtk_signal_connect (GTK_OBJECT (druid->full_name), "changed", identity_changed, druid); - druid->email_address = GTK_ENTRY (glade_xml_get_widget (gui, "txtAddress")); - gtk_signal_connect (GTK_OBJECT (druid->email_address), "changed", identity_changed, druid); - druid->organization = GTK_ENTRY (glade_xml_get_widget (gui, "txtOrganization")); - druid->signature = GNOME_FILE_ENTRY (glade_xml_get_widget (gui, "fileSignature")); - - druid->incoming_text = glade_xml_get_widget (gui, "htmlIncoming"); - druid->incoming_type = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuIncomingType")); - druid->incoming_hostname = GTK_ENTRY (glade_xml_get_widget (gui, "txtIncomingHostname")); - gtk_signal_connect (GTK_OBJECT (druid->incoming_hostname), "changed", incoming_changed, druid); - druid->incoming_username = GTK_ENTRY (glade_xml_get_widget (gui, "txtIncomingUsername")); - gtk_signal_connect (GTK_OBJECT (druid->incoming_username), "changed", incoming_changed, druid); - druid->incoming_path = GTK_ENTRY (glade_xml_get_widget (gui, "txtIncomingPath")); - gtk_signal_connect (GTK_OBJECT (druid->incoming_path), "changed", incoming_changed, druid); - druid->incoming_keep_mail = GTK_CHECK_BUTTON (glade_xml_get_widget (gui, "chkIncomingKeepMail")); - druid->incoming_auto_check = GTK_CHECK_BUTTON (glade_xml_get_widget (gui, "chkAutoCheck")); - gtk_signal_connect (GTK_OBJECT (druid->incoming_auto_check), "toggled", auto_check_toggled, druid); - druid->incoming_auto_check_min = GTK_SPIN_BUTTON (glade_xml_get_widget (gui, "spinAutoCheckMinutes")); - gtk_widget_set_sensitive (GTK_WIDGET (druid->incoming_auto_check_min), - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (druid->incoming_auto_check))); - druid->incoming_check_settings = GTK_CHECK_BUTTON (glade_xml_get_widget (gui, "chkIncomingCheckSettings")); - - druid->have_source_auth_page = TRUE; - druid->source_auth_text = glade_xml_get_widget (gui, "htmlSourceAuthentication"); - druid->source_auth_type = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuSourceAuthType")); - druid->source_password = GTK_ENTRY (glade_xml_get_widget (gui, "txtSourceAuthPasswd")); - gtk_signal_connect (GTK_OBJECT (druid->source_password), "changed", source_auth_changed, druid); - druid->save_source_password = GTK_CHECK_BUTTON (glade_xml_get_widget (gui, "chkSourceAuthSavePasswd")); - gtk_signal_connect (GTK_OBJECT (druid->save_source_password), "toggled", source_auth_changed, druid); - - druid->outgoing_text = glade_xml_get_widget (gui, "htmlTransport"); - druid->outgoing_type = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuTransportType")); - druid->outgoing_hostname = GTK_ENTRY (glade_xml_get_widget (gui, "txtTransportHostname")); - gtk_signal_connect (GTK_OBJECT (druid->outgoing_hostname), "changed", transport_changed, druid); - druid->outgoing_requires_auth = GTK_CHECK_BUTTON (glade_xml_get_widget (gui, "chkTransportNeedsAuth")); - druid->outgoing_check_settings = GTK_CHECK_BUTTON (glade_xml_get_widget (gui, "chkOutgoingCheckSettings")); - - druid->have_transport_auth_page = FALSE; - druid->transport_auth_text = glade_xml_get_widget (gui, "htmlTransportAuthentication"); - druid->transport_auth_type = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuTransportAuthType")); - druid->transport_username = GTK_ENTRY (glade_xml_get_widget (gui, "txtTransportAuthUsername")); - gtk_signal_connect (GTK_OBJECT (druid->transport_username), "changed", transport_auth_changed, druid); - druid->transport_password = GTK_ENTRY (glade_xml_get_widget (gui, "txtTransportAuthPasswd")); - gtk_signal_connect (GTK_OBJECT (druid->transport_password), "changed", transport_auth_changed, druid); - druid->save_transport_password = GTK_CHECK_BUTTON (glade_xml_get_widget (gui, "chkTransportAuthSavePasswd")); - gtk_signal_connect (GTK_OBJECT (druid->save_transport_password), "toggled", transport_auth_changed, druid); - - set_defaults (druid); - + + /* Fill in the druid pages */ + vbox = glade_xml_get_widget (druid->gui->xml, "druid_identity_vbox"); + widget = create_html ("identity_html"); + gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0); + widget = glade_xml_get_widget (druid->gui->xml, "identity_required_frame"); + gtk_widget_reparent (widget, vbox); + gtk_box_set_child_packing (GTK_BOX (vbox), widget, FALSE, FALSE, 0, GTK_PACK_START); + widget = glade_xml_get_widget (druid->gui->xml, "identity_optional_frame"); + gtk_widget_reparent (widget, vbox); + gtk_box_set_child_packing (GTK_BOX (vbox), widget, FALSE, FALSE, 0, GTK_PACK_START); + + vbox = glade_xml_get_widget (druid->gui->xml, "druid_source_vbox"); + widget = create_html ("source_html"); + gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0); + widget = glade_xml_get_widget (druid->gui->xml, "source_vbox"); + gtk_widget_reparent (widget, vbox); + + vbox = glade_xml_get_widget (druid->gui->xml, "druid_extra_vbox"); + widget = create_html ("extra_html"); + gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0); + widget = glade_xml_get_widget (druid->gui->xml, "extra_vbox"); + gtk_widget_reparent (widget, vbox); + + vbox = glade_xml_get_widget (druid->gui->xml, "druid_transport_vbox"); + widget = create_html ("transport_html"); + gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0); + widget = glade_xml_get_widget (druid->gui->xml, "transport_vbox"); + gtk_widget_reparent (widget, vbox); + + vbox = glade_xml_get_widget (druid->gui->xml, "druid_management_vbox"); + widget = create_html ("management_html"); + gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0); + widget = glade_xml_get_widget (druid->gui->xml, "management_frame"); + gtk_widget_reparent (widget, vbox); + + /* set up signals, etc */ + gtk_signal_connect (GTK_OBJECT (druid->gui->account_name), "changed", management_changed, druid); + gtk_signal_connect (GTK_OBJECT (druid->gui->full_name), "changed", identity_changed, druid); + gtk_signal_connect (GTK_OBJECT (druid->gui->email_address), "changed", identity_changed, druid); + gtk_signal_connect (GTK_OBJECT (druid->gui->source.hostname), "changed", source_changed, druid); + gtk_signal_connect (GTK_OBJECT (druid->gui->source.username), "changed", source_changed, druid); + gtk_signal_connect (GTK_OBJECT (druid->gui->source.path), "changed", source_changed, druid); + gtk_signal_connect (GTK_OBJECT (druid->gui->transport.hostname), "changed", transport_changed, druid); + gtk_signal_connect (GTK_OBJECT (druid->gui->transport.username), "changed", transport_changed, druid); + gnome_druid_set_buttons_sensitive (druid->druid, FALSE, TRUE, TRUE); + + mail_account_gui_setup (druid->gui, GTK_WIDGET (druid)); } MailConfigDruid * mail_config_druid_new (GNOME_Evolution_Shell shell) { MailConfigDruid *new; - + new = (MailConfigDruid *) gtk_type_new (mail_config_druid_get_type ()); construct (new); new->shell = shell; - - return new; -} - -char * -mail_config_druid_get_account_name (MailConfigDruid *druid) -{ - g_return_val_if_fail (IS_MAIL_CONFIG_DRUID (druid), NULL); - - return e_utf8_gtk_entry_get_text (druid->account_name); -} - - -gboolean -mail_config_druid_get_default_account (MailConfigDruid *druid) -{ - g_return_val_if_fail (IS_MAIL_CONFIG_DRUID (druid), FALSE); - - return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (druid->default_account)); -} - - -char * -mail_config_druid_get_full_name (MailConfigDruid *druid) -{ - g_return_val_if_fail (IS_MAIL_CONFIG_DRUID (druid), NULL); - - return e_utf8_gtk_entry_get_text (druid->full_name); -} - - -char * -mail_config_druid_get_email_address (MailConfigDruid *druid) -{ - g_return_val_if_fail (IS_MAIL_CONFIG_DRUID (druid), NULL); - - return e_utf8_gtk_entry_get_text (druid->email_address); -} - - -char * -mail_config_druid_get_organization (MailConfigDruid *druid) -{ - g_return_val_if_fail (IS_MAIL_CONFIG_DRUID (druid), NULL); - - return e_utf8_gtk_entry_get_text (druid->organization); -} - -char * -mail_config_druid_get_sigfile (MailConfigDruid *druid) -{ - g_return_val_if_fail (IS_MAIL_CONFIG_DRUID (druid), NULL); - - return gnome_file_entry_get_full_path (druid->signature, TRUE); -} - - -char * -mail_config_druid_get_source_url (MailConfigDruid *druid) -{ - char *source_url, *host, *pport, *str; - const CamelProvider *provider; - gboolean show_passwd; - CamelURL *url; - int port = 0; - - g_return_val_if_fail (IS_MAIL_CONFIG_DRUID (druid), NULL); - - provider = druid->source_provider; - if (!provider) - return NULL; - - url = g_new0 (CamelURL, 1); - url->protocol = g_strdup (provider->protocol); - - str = gtk_entry_get_text (druid->incoming_username); - url->user = str && *str ? g_strdup (str) : NULL; - - str = gtk_object_get_data (GTK_OBJECT (druid), "source_authmech"); - url->authmech = str && *str ? g_strdup (str) : NULL; - - str = gtk_entry_get_text (druid->source_password); - url->passwd = str && *str ? g_strdup (str) : NULL; - - host = g_strdup (gtk_entry_get_text (druid->incoming_hostname)); - if (host && (pport = strchr (host, ':'))) { - port = atoi (pport + 1); - *pport = '\0'; - } - url->host = host; - url->port = port; - url->path = g_strdup (gtk_entry_get_text (druid->incoming_path)); - - /* only 'show password' if we intend to save it */ - show_passwd = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (druid->save_source_password)); - source_url = camel_url_to_string (url, show_passwd); - camel_url_free (url); - - return source_url; -} - - -gboolean -mail_config_druid_get_keep_mail_on_server (MailConfigDruid *druid) -{ - g_return_val_if_fail (IS_MAIL_CONFIG_DRUID (druid), FALSE); - - return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (druid->incoming_keep_mail)); -} - - -gboolean -mail_config_druid_get_auto_check (MailConfigDruid *druid) -{ - g_return_val_if_fail (IS_MAIL_CONFIG_DRUID (druid), FALSE); - - return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (druid->incoming_auto_check)); -} - - -gint -mail_config_druid_get_auto_check_minutes (MailConfigDruid *druid) -{ - g_return_val_if_fail (IS_MAIL_CONFIG_DRUID (druid), 0); - - return gtk_spin_button_get_value_as_int (druid->incoming_auto_check_min); -} - -gboolean -mail_config_druid_get_save_source_password (MailConfigDruid *druid) -{ - g_return_val_if_fail (IS_MAIL_CONFIG_DRUID (druid), FALSE); - - return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (druid->save_source_password)); -} - -char * -mail_config_druid_get_transport_url (MailConfigDruid *druid) -{ - char *transport_url, *host, *pport; - const CamelProvider *provider; - gboolean show_passwd; - CamelURL *url; - int port = 0; - - g_return_val_if_fail (IS_MAIL_CONFIG_DRUID (druid), NULL); - - provider = druid->transport_provider; - if (!provider) - return NULL; - - url = g_new0 (CamelURL, 1); - url->protocol = g_strdup (provider->protocol); - - if (mail_config_druid_get_transport_requires_auth (druid)) { - char *str; - - str = gtk_object_get_data (GTK_OBJECT (druid), "transport_authmech"); - if (str && *str) { - url->authmech = g_strdup (str); - - str = gtk_entry_get_text (druid->transport_username); - url->user = str && *str ? g_strdup (str) : NULL; - - str = gtk_entry_get_text (druid->transport_password); - url->passwd = str && *str ? g_strdup (str) : NULL; - } - } - - host = g_strdup (gtk_entry_get_text (druid->outgoing_hostname)); - if (host && (pport = strchr (host, ':'))) { - port = atoi (pport + 1); - *pport = '\0'; - } - url->host = host; - url->port = port; - - /* only 'show password' if we intend to save it */ - show_passwd = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (druid->save_transport_password)); - transport_url = camel_url_to_string (url, show_passwd); - camel_url_free (url); - - return transport_url; -} - -gboolean -mail_config_druid_get_save_transport_password (MailConfigDruid *druid) -{ - g_return_val_if_fail (IS_MAIL_CONFIG_DRUID (druid), FALSE); - - return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (druid->save_transport_password)); -} - -gboolean -mail_config_druid_get_transport_requires_auth (MailConfigDruid *druid) -{ - g_return_val_if_fail (IS_MAIL_CONFIG_DRUID (druid), FALSE); - - return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (druid->outgoing_requires_auth)); + return new; } diff --git a/mail/mail-config-druid.h b/mail/mail-config-druid.h index c8c492316e..cc37c5aaaa 100644 --- a/mail/mail-config-druid.h +++ b/mail/mail-config-druid.h @@ -32,74 +32,24 @@ extern "C" { #include <glade/glade.h> #include <camel.h> #include "shell/Evolution.h" +#include "mail-account-gui.h" #define MAIL_CONFIG_DRUID_TYPE (mail_config_druid_get_type ()) #define MAIL_CONFIG_DRUID(o) (GTK_CHECK_CAST ((o), MAIL_CONFIG_DRUID_TYPE, MailConfigDruid)) #define MAIL_CONFIG_DRUID_CLASS(k) (GTK_CHECK_CLASS_CAST((k), MAIL_CONFIG_DRUID_TYPE, MailConfigDruidClass)) -#define IS_MAIL_CONFIG_DRUID(o) (GTK_CHECK_TYPE ((o), MAIL_CONFIG_DRUID_TYPE)) -#define IS_MAIL_CONFIG_DRUID_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), MAIL_CONFIG_DRUID_TYPE)) +#define MAIL_IS_CONFIG_DRUID(o) (GTK_CHECK_TYPE ((o), MAIL_CONFIG_DRUID_TYPE)) +#define MAIL_IS_CONFIG_DRUID_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), MAIL_CONFIG_DRUID_TYPE)) -struct _MailConfigDruid { +typedef struct { GtkWindow parent; - GNOME_Evolution_Shell shell; - - GladeXML *gui; - - GList *providers; - GnomeDruid *druid; - - /* account management */ - GtkWidget *account_text; - GtkEntry *account_name; - GtkCheckButton *default_account; - - /* identity */ - GtkWidget *identity_text; - GtkEntry *full_name; - GtkEntry *email_address; - GtkEntry *organization; - GnomeFileEntry *signature; - - /* incoming mail */ - GtkWidget *incoming_text; - GtkOptionMenu *incoming_type; - GtkEntry *incoming_hostname; - GtkEntry *incoming_username; - GtkEntry *incoming_path; - GtkCheckButton *incoming_keep_mail; - GtkCheckButton *incoming_auto_check; - GtkSpinButton *incoming_auto_check_min; - GtkCheckButton *incoming_check_settings; - - /* source authentication */ - gboolean have_source_auth_page; - GtkWidget *source_auth_text; - GtkOptionMenu *source_auth_type; - GtkEntry *source_password; - GtkCheckButton *save_source_password; - - /* outgoing mail */ - GtkWidget *outgoing_text; - GtkOptionMenu *outgoing_type; - GtkEntry *outgoing_hostname; - GtkCheckButton *outgoing_requires_auth; - GtkCheckButton *outgoing_check_settings; - - /* transport authentication */ - gboolean have_transport_auth_page; - GtkWidget *transport_auth_text; - GtkOptionMenu *transport_auth_type; - GtkEntry *transport_username; - GtkEntry *transport_password; - GtkCheckButton *save_transport_password; - - const CamelProvider *source_provider; - const CamelProvider *transport_provider; -}; + MailAccountGui *gui; -typedef struct _MailConfigDruid MailConfigDruid; + GNOME_Evolution_Shell shell; + gboolean identity_copied; + CamelProvider *last_source; +} MailConfigDruid; typedef struct { GtkWindowClass parent_class; @@ -115,13 +65,8 @@ MailConfigDruid *mail_config_druid_new (GNOME_Evolution_Shell shell); char *mail_config_druid_get_account_name (MailConfigDruid *druid); gboolean mail_config_druid_get_default_account (MailConfigDruid *druid); -char *mail_config_druid_get_full_name (MailConfigDruid *druid); -char *mail_config_druid_get_email_address (MailConfigDruid *druid); -char *mail_config_druid_get_reply_to (MailConfigDruid *druid); -char *mail_config_druid_get_organization (MailConfigDruid *druid); -char *mail_config_druid_get_sigfile (MailConfigDruid *druid); - char *mail_config_druid_get_source_url (MailConfigDruid *druid); + gboolean mail_config_druid_get_keep_mail_on_server (MailConfigDruid *druid); gboolean mail_config_druid_get_save_source_password (MailConfigDruid *druid); gboolean mail_config_druid_get_auto_check (MailConfigDruid *druid); diff --git a/mail/mail-config.c b/mail/mail-config.c index a4748e35e5..41b1b482bf 100644 --- a/mail/mail-config.c +++ b/mail/mail-config.c @@ -69,7 +69,6 @@ identity_copy (const MailConfigIdentity *id) new = g_new0 (MailConfigIdentity, 1); new->name = g_strdup (id->name); new->address = g_strdup (id->address); - new->reply_to = g_strdup (id->reply_to); new->organization = g_strdup (id->organization); new->signature = g_strdup (id->signature); @@ -84,7 +83,6 @@ identity_destroy (MailConfigIdentity *id) g_free (id->name); g_free (id->address); - g_free (id->reply_to); g_free (id->organization); g_free (id->signature); @@ -238,9 +236,6 @@ config_read (void) path = g_strdup_printf ("identity_name_%d", i); id->name = gnome_config_get_string (path); g_free (path); - path = g_strdup_printf ("identity_replyto_%d", i); - id->reply_to = gnome_config_get_string (path); - g_free (path); path = g_strdup_printf ("identity_address_%d", i); id->address = gnome_config_get_string (path); g_free (path); @@ -309,6 +304,7 @@ config_read (void) } gnome_config_pop_prefix (); +#ifdef ENABLE_NNTP /* News */ str = g_strdup_printf ("=%s/config/News=/Sources/", evolution_dir); gnome_config_push_prefix (str); @@ -328,6 +324,7 @@ config_read (void) config->news = g_slist_append (config->news, n); } gnome_config_pop_prefix (); +#endif /* Format */ str = g_strdup_printf ("=%s/config/Mail=/Format/send_html", @@ -472,6 +469,7 @@ mail_config_write (void) } gnome_config_pop_prefix (); +#ifdef ENABLE_NNTP /* News */ str = g_strdup_printf ("=%s/config/News=/Sources/", evolution_dir); gnome_config_push_prefix (str); @@ -490,6 +488,7 @@ mail_config_write (void) g_free (path); } gnome_config_pop_prefix (); +#endif gnome_config_sync (); } @@ -880,9 +879,8 @@ mail_config_folder_to_cachename (CamelFolder *folder, const char *prefix) struct _check_msg { struct _mail_msg msg; - char *url; + const char *url; CamelProviderType type; - gboolean connect; GList **authtypes; gboolean *success; }; @@ -891,66 +889,49 @@ static void check_service_check(struct _mail_msg *mm) { struct _check_msg *m = (struct _check_msg *)mm; CamelService *service = NULL; - - if (m->authtypes) { - service = camel_session_get_service (session, m->url, m->type, &mm->ex); - if (!service) - return; - if (m->connect) - *m->authtypes = camel_service_query_auth_types (service, &mm->ex); - else - *m->authtypes = g_list_copy (service->provider->authtypes); - } else if (m->connect) { - service = camel_session_get_service_connected (session, m->url, m->type, &mm->ex); - } - if (service) - camel_object_unref (CAMEL_OBJECT (service)); - *m->success = !camel_exception_is_set(&mm->ex); -} + service = camel_session_get_service (session, m->url, m->type, &mm->ex); + if (!service) + return; -static void check_service_free(struct _mail_msg *mm) -{ - struct _check_msg *m = (struct _check_msg *)mm; + if (m->authtypes) + *m->authtypes = camel_service_query_auth_types (service, &mm->ex); + else + camel_service_connect (service, &mm->ex); - g_free(m->url); + camel_object_unref (CAMEL_OBJECT (service)); + *m->success = !camel_exception_is_set(&mm->ex); } static struct _mail_msg_op check_service_op = { NULL, check_service_check, NULL, - check_service_free + NULL }; /** * mail_config_check_service: * @url: service url * @type: provider type - * @connect: whether or not the check service should connect - * @authtypes: list of auth types gathered by this method - * - * Checks the service for validity. If @connect is TRUE then a - * connection with the server is attempted and if successful will fill - * in the @authtypes list. If @connect is FALSE then @authtypes will - * be generated without a connection and thus will not necessarily - * reflect what the server supports. + * @authtypes: set to list of supported authtypes on return if non-%NULL. * - * Returns TRUE on success or FALSE on error. + * Checks the service for validity. If @authtypes is non-%NULL, it will + * be filled in with a list of supported authtypes. * + * Return value: %TRUE on success or %FALSE on error. **/ gboolean -mail_config_check_service (CamelURL *url, CamelProviderType type, gboolean connect, GList **authtypes) +mail_config_check_service (const char *url, CamelProviderType type, GList **authtypes) { gboolean ret = FALSE; struct _check_msg *m; int id; m = mail_msg_new(&check_service_op, NULL, sizeof(*m)); - m->url = camel_url_to_string(url, TRUE); + m->url = url; m->type = type; - m->connect = connect; m->authtypes = authtypes; m->success = &ret; diff --git a/mail/mail-config.glade b/mail/mail-config.glade index 53fa0649b4..efd09518e4 100644 --- a/mail/mail-config.glade +++ b/mail/mail-config.glade @@ -6,7 +6,7 @@ <program_name>config</program_name> <directory></directory> <source_directory>src</source_directory> - <pixmaps_directory>pixmaps</pixmaps_directory> + <pixmaps_directory>../art</pixmaps_directory> <language>C</language> <gnome_support>True</gnome_support> <gettext_support>True</gettext_support> @@ -17,66 +17,46 @@ <widget> <class>GtkWindow</class> - <name>mail-config-druid</name> + <name>druid_window</name> <visible>False</visible> - <title>Mail Configuration Druid</title> + <title>window1</title> <type>GTK_WINDOW_TOPLEVEL</type> - <position>GTK_WIN_POS_CENTER</position> - <modal>True</modal> - <default_width>450</default_width> - <default_height>350</default_height> + <position>GTK_WIN_POS_NONE</position> + <modal>False</modal> <allow_shrink>False</allow_shrink> <allow_grow>True</allow_grow> - <auto_shrink>True</auto_shrink> + <auto_shrink>False</auto_shrink> <widget> <class>GnomeDruid</class> <name>druid</name> - <signal> - <name>cancel</name> - <handler>druid_cancel</handler> - <last_modification_time>Thu, 09 Nov 2000 21:35:32 GMT</last_modification_time> - </signal> <widget> <class>GnomeDruidPageStart</class> - <name>druidStartPage</name> + <name>druidpagestart1</name> <title>Mail Configuration</title> <text>Welcome to the Evolution Mail Configuration Druid. Click "Next" to begin. </text> <title_color>255,255,255</title_color> <text_color>0,0,0</text_color> - <background_color>25,25,112</background_color> - <logo_background_color>25,25,112</logo_background_color> + <background_color>0,0,0</background_color> + <logo_background_color>0,0,0</logo_background_color> <textbox_color>255,255,255</textbox_color> - <logo_image>fetch-mail.png</logo_image> </widget> <widget> <class>GnomeDruidPageStandard</class> - <name>druidIdentityPage</name> - <signal> - <name>prepare</name> - <handler>identity_prepare</handler> - <last_modification_time>Tue, 07 Nov 2000 21:08:00 GMT</last_modification_time> - </signal> - <signal> - <name>next</name> - <handler>identity_next</handler> - <last_modification_time>Tue, 07 Nov 2000 21:08:07 GMT</last_modification_time> - </signal> + <name>identity_page</name> <title>Identity</title> <title_color>255,255,255</title_color> - <background_color>25,25,112</background_color> - <logo_background_color>25,25,112</logo_background_color> - <logo_image>malehead.png</logo_image> + <background_color>0,0,0</background_color> + <logo_background_color>0,0,0</logo_background_color> <widget> <class>GtkVBox</class> <child_name>GnomeDruidPageStandard:vbox</child_name> - <name>druid-vbox1</name> - <border_width>5</border_width> + <name>druid_identity_vbox</name> <homogeneous>False</homogeneous> <spacing>0</spacing> <child> @@ -86,332 +66,23 @@ Click "Next" to begin. </text> </child> <widget> - <class>GtkVBox</class> - <name>vbox4</name> - <homogeneous>False</homogeneous> - <spacing>0</spacing> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - - <widget> - <class>Custom</class> - <name>htmlIdentity</name> - <creation_function>mail_config_create_html</creation_function> - <int1>0</int1> - <int2>0</int2> - <last_modification_time>Thu, 02 Nov 2000 17:26:09 GMT</last_modification_time> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>True</fill> - </child> - </widget> - - <widget> - <class>GtkFrame</class> - <name>identity-required-frame</name> - <border_width>3</border_width> - <height>76</height> - <label>Required</label> - <label_xalign>0</label_xalign> - <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> - <child> - <padding>5</padding> - <expand>False</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkTable</class> - <name>table1</name> - <border_width>4</border_width> - <rows>2</rows> - <columns>2</columns> - <homogeneous>False</homogeneous> - <row_spacing>4</row_spacing> - <column_spacing>4</column_spacing> - - <widget> - <class>GtkEntry</class> - <name>txtFullName</name> - <width>80</width> - <height>20</height> - <can_focus>True</can_focus> - <has_focus>True</has_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>50</text_max_length> - <text></text> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GtkEntry</class> - <name>txtAddress</name> - <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>50</text_max_length> - <text></text> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>1</top_attach> - <bottom_attach>2</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GtkLabel</class> - <name>identity-address-label</name> - <label>Email Address:</label> - <justify>GTK_JUSTIFY_RIGHT</justify> - <wrap>False</wrap> - <xalign>1</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>1</top_attach> - <bottom_attach>2</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GtkLabel</class> - <name>identity-name-label</name> - <label>Full Name:</label> - <justify>GTK_JUSTIFY_RIGHT</justify> - <wrap>False</wrap> - <xalign>1</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - </widget> - </widget> - - <widget> - <class>GtkVBox</class> - <name>vbox5</name> - <homogeneous>False</homogeneous> - <spacing>0</spacing> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkFrame</class> - <name>identity-optional-frame</name> - <border_width>3</border_width> - <height>102</height> - <label>Optional</label> - <label_xalign>0</label_xalign> - <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkTable</class> - <name>table2</name> - <border_width>4</border_width> - <rows>2</rows> - <columns>2</columns> - <homogeneous>False</homogeneous> - <row_spacing>4</row_spacing> - <column_spacing>4</column_spacing> - - <widget> - <class>GtkLabel</class> - <name>identity-organization-label</name> - <label>Organization:</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0.5</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>False</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GtkLabel</class> - <name>identity-signature-label</name> - <label>Signature file:</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0.5</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>1</top_attach> - <bottom_attach>2</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>False</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GtkEntry</class> - <name>txtOrganization</name> - <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>0</text_max_length> - <text></text> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GnomeFileEntry</class> - <name>fileSignature</name> - <max_saved>10</max_saved> - <directory>False</directory> - <modal>False</modal> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>1</top_attach> - <bottom_attach>2</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - - <widget> - <class>GtkEntry</class> - <child_name>GnomeEntry:entry</child_name> - <name>identity-signature-entry</name> - <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>0</text_max_length> - <text></text> - </widget> - </widget> - </widget> - </widget> - </widget> + <class>Placeholder</class> </widget> </widget> </widget> <widget> <class>GnomeDruidPageStandard</class> - <name>druidSourcePage</name> - <signal> - <name>prepare</name> - <handler>incoming_prepare</handler> - <last_modification_time>Wed, 03 Jan 2001 19:22:09 GMT</last_modification_time> - </signal> - <signal> - <name>next</name> - <handler>incoming_next</handler> - <last_modification_time>Wed, 03 Jan 2001 19:22:16 GMT</last_modification_time> - </signal> + <name>source_page</name> <title>Receiving Email</title> <title_color>255,255,255</title_color> - <background_color>25,25,112</background_color> - <logo_background_color>25,25,112</logo_background_color> - <logo_image>evolution-inbox.png</logo_image> + <background_color>0,0,0</background_color> + <logo_background_color>0,0,0</logo_background_color> <widget> <class>GtkVBox</class> <child_name>GnomeDruidPageStandard:vbox</child_name> - <name>druid-vbox2</name> + <name>druid_source_vbox</name> <homogeneous>False</homogeneous> <spacing>0</spacing> <child> @@ -421,401 +92,23 @@ Click "Next" to begin. </text> </child> <widget> - <class>GtkVBox</class> - <name>vbox6</name> - <border_width>5</border_width> - <homogeneous>False</homogeneous> - <spacing>0</spacing> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - - <widget> - <class>Custom</class> - <name>htmlIncoming</name> - <creation_function>mail_config_create_html</creation_function> - <int1>0</int1> - <int2>0</int2> - <last_modification_time>Thu, 02 Nov 2000 17:27:42 GMT</last_modification_time> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - </widget> - - <widget> - <class>GtkTable</class> - <name>table3</name> - <border_width>4</border_width> - <rows>1</rows> - <columns>2</columns> - <homogeneous>False</homogeneous> - <row_spacing>4</row_spacing> - <column_spacing>2</column_spacing> - <child> - <padding>4</padding> - <expand>False</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkLabel</class> - <name>source-type-label</name> - <label>Server Type: </label> - <justify>GTK_JUSTIFY_RIGHT</justify> - <wrap>False</wrap> - <xalign>1</xalign> - <yalign>0.5</yalign> - <xpad>2</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GtkOptionMenu</class> - <name>omenuIncomingType</name> - <can_focus>True</can_focus> - <items></items> - <initial_choice>0</initial_choice> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - </widget> - - <widget> - <class>GtkFrame</class> - <name>source-frame</name> - <label>Server Configuration</label> - <label_xalign>0</label_xalign> - <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkVBox</class> - <name>vbox7</name> - <homogeneous>False</homogeneous> - <spacing>0</spacing> - - <widget> - <class>GtkTable</class> - <name>table4</name> - <border_width>4</border_width> - <rows>3</rows> - <columns>2</columns> - <homogeneous>False</homogeneous> - <row_spacing>4</row_spacing> - <column_spacing>4</column_spacing> - <child> - <padding>4</padding> - <expand>False</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkLabel</class> - <name>lblSourceHost</name> - <label>Host:</label> - <justify>GTK_JUSTIFY_RIGHT</justify> - <wrap>False</wrap> - <xalign>1</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GtkLabel</class> - <name>lblSourceUser</name> - <label>Username:</label> - <justify>GTK_JUSTIFY_RIGHT</justify> - <wrap>False</wrap> - <xalign>1</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>1</top_attach> - <bottom_attach>2</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GtkEntry</class> - <name>txtIncomingHostname</name> - <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>0</text_max_length> - <text></text> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GtkEntry</class> - <name>txtIncomingUsername</name> - <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>0</text_max_length> - <text></text> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>1</top_attach> - <bottom_attach>2</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GtkEntry</class> - <name>txtIncomingPath</name> - <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>0</text_max_length> - <text></text> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>2</top_attach> - <bottom_attach>3</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GtkLabel</class> - <name>lblSourcePath</name> - <label>Path:</label> - <justify>GTK_JUSTIFY_RIGHT</justify> - <wrap>False</wrap> - <xalign>1</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>2</top_attach> - <bottom_attach>3</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - </widget> - - <widget> - <class>GtkCheckButton</class> - <name>chkIncomingKeepMail</name> - <can_focus>True</can_focus> - <label>Keep mail on server</label> - <active>False</active> - <draw_indicator>True</draw_indicator> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> - </widget> - - <widget> - <class>GtkHBox</class> - <name>hbox39</name> - <homogeneous>False</homogeneous> - <spacing>0</spacing> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> - - <widget> - <class>GtkCheckButton</class> - <name>chkAutoCheck</name> - <can_focus>True</can_focus> - <label>Automatically check mail every</label> - <active>False</active> - <draw_indicator>True</draw_indicator> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> - </widget> - - <widget> - <class>GtkSpinButton</class> - <name>spinAutoCheckMinutes</name> - <can_focus>True</can_focus> - <climb_rate>1</climb_rate> - <digits>0</digits> - <numeric>True</numeric> - <update_policy>GTK_UPDATE_ALWAYS</update_policy> - <snap>False</snap> - <wrap>False</wrap> - <value>10</value> - <lower>0</lower> - <upper>1440</upper> - <step>1</step> - <page>10</page> - <page_size>10</page_size> - <child> - <padding>2</padding> - <expand>False</expand> - <fill>True</fill> - </child> - </widget> - - <widget> - <class>GtkLabel</class> - <name>lblMinutes</name> - <label>minutes.</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0.5</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> - </widget> - </widget> - - <widget> - <class>GtkCheckButton</class> - <name>chkIncomingCheckSettings</name> - <can_focus>True</can_focus> - <label>Check settings</label> - <active>True</active> - <draw_indicator>True</draw_indicator> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> - </widget> - </widget> - </widget> + <class>Placeholder</class> </widget> </widget> </widget> <widget> <class>GnomeDruidPageStandard</class> - <name>druidSourceAuthPage</name> - <signal> - <name>prepare</name> - <handler>source_auth_prepare</handler> - <last_modification_time>Tue, 06 Mar 2001 21:58:17 GMT</last_modification_time> - </signal> - <signal> - <name>next</name> - <handler>source_auth_next</handler> - <last_modification_time>Tue, 06 Mar 2001 21:58:08 GMT</last_modification_time> - </signal> - <title>Authentication</title> + <name>extra_page</name> + <title>Receiving Email</title> <title_color>255,255,255</title_color> - <background_color>25,25,112</background_color> - <logo_background_color>25,25,112</logo_background_color> - <logo_image>registration.png</logo_image> + <background_color>0,0,0</background_color> + <logo_background_color>0,0,0</logo_background_color> <widget> <class>GtkVBox</class> <child_name>GnomeDruidPageStandard:vbox</child_name> - <name>druid-vbox3</name> + <name>druid_extra_vbox</name> <homogeneous>False</homogeneous> <spacing>0</spacing> <child> @@ -825,201 +118,23 @@ Click "Next" to begin. </text> </child> <widget> - <class>GtkVBox</class> - <name>vboxSourceAuth</name> - <border_width>6</border_width> - <homogeneous>False</homogeneous> - <spacing>0</spacing> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - - <widget> - <class>Custom</class> - <name>htmlSourceAuthentication</name> - <creation_function>mail_config_create_html</creation_function> - <int1>0</int1> - <int2>0</int2> - <last_modification_time>Thu, 02 Nov 2000 17:31:34 GMT</last_modification_time> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - </widget> - - <widget> - <class>GtkFrame</class> - <name>authentication-frame</name> - <label>Authentication</label> - <label_xalign>0</label_xalign> - <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkVBox</class> - <name>vbox9</name> - <homogeneous>False</homogeneous> - <spacing>0</spacing> - - <widget> - <class>GtkHBox</class> - <name>hbox25</name> - <border_width>4</border_width> - <homogeneous>False</homogeneous> - <spacing>4</spacing> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkLabel</class> - <name>lblSourceAuthType</name> - <label>Authentication Type:</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>1</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>True</fill> - </child> - </widget> - - <widget> - <class>GtkOptionMenu</class> - <name>omenuSourceAuthType</name> - <can_focus>True</can_focus> - <items></items> - <initial_choice>0</initial_choice> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - </widget> - </widget> - - <widget> - <class>GtkTable</class> - <name>authentication-password-table</name> - <border_width>4</border_width> - <rows>1</rows> - <columns>2</columns> - <homogeneous>False</homogeneous> - <row_spacing>4</row_spacing> - <column_spacing>4</column_spacing> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkEntry</class> - <name>txtSourceAuthPasswd</name> - <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>False</text_visible> - <text_max_length>0</text_max_length> - <text></text> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GtkLabel</class> - <name>lblSourcePasswd</name> - <label>Password:</label> - <justify>GTK_JUSTIFY_RIGHT</justify> - <wrap>False</wrap> - <xalign>1</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - </widget> - - <widget> - <class>GtkCheckButton</class> - <name>chkSourceAuthSavePasswd</name> - <border_width>4</border_width> - <can_focus>True</can_focus> - <label>Remember my password</label> - <active>False</active> - <draw_indicator>True</draw_indicator> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> - </widget> - </widget> - </widget> + <class>Placeholder</class> </widget> </widget> </widget> <widget> <class>GnomeDruidPageStandard</class> - <name>druidTransportPage</name> - <signal> - <name>prepare</name> - <handler>transport_prepare</handler> - <last_modification_time>Thu, 09 Nov 2000 19:21:41 GMT</last_modification_time> - </signal> - <signal> - <name>next</name> - <handler>transport_next</handler> - <last_modification_time>Thu, 09 Nov 2000 19:21:51 GMT</last_modification_time> - </signal> + <name>transport_page</name> <title>Sending Email</title> <title_color>255,255,255</title_color> - <background_color>25,25,112</background_color> - <logo_background_color>25,25,112</logo_background_color> - <logo_image>send.png</logo_image> + <background_color>0,0,0</background_color> + <logo_background_color>0,0,0</logo_background_color> <widget> <class>GtkVBox</class> <child_name>GnomeDruidPageStandard:vbox</child_name> - <name>druid-vbox4</name> + <name>druid_transport_vbox</name> <homogeneous>False</homogeneous> <spacing>0</spacing> <child> @@ -1029,503 +144,23 @@ Click "Next" to begin. </text> </child> <widget> - <class>GtkVBox</class> - <name>vbox10</name> - <homogeneous>False</homogeneous> - <spacing>0</spacing> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkVBox</class> - <name>vbox11</name> - <border_width>5</border_width> - <homogeneous>False</homogeneous> - <spacing>0</spacing> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - - <widget> - <class>Custom</class> - <name>htmlTransport</name> - <creation_function>mail_config_create_html</creation_function> - <int1>0</int1> - <int2>0</int2> - <last_modification_time>Thu, 02 Nov 2000 17:37:47 GMT</last_modification_time> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - </widget> - - <widget> - <class>GtkTable</class> - <name>table5</name> - <border_width>4</border_width> - <rows>1</rows> - <columns>2</columns> - <homogeneous>False</homogeneous> - <row_spacing>4</row_spacing> - <column_spacing>2</column_spacing> - <child> - <padding>4</padding> - <expand>False</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkLabel</class> - <name>transport-type-label</name> - <label>Server Type: </label> - <justify>GTK_JUSTIFY_RIGHT</justify> - <wrap>False</wrap> - <xalign>1</xalign> - <yalign>0.5</yalign> - <xpad>2</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GtkOptionMenu</class> - <name>omenuTransportType</name> - <can_focus>True</can_focus> - <items></items> - <initial_choice>0</initial_choice> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - </widget> - - <widget> - <class>GtkFrame</class> - <name>transport-frame</name> - <label>Server Configuration</label> - <label_xalign>0</label_xalign> - <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkVBox</class> - <name>vbox12</name> - <homogeneous>False</homogeneous> - <spacing>0</spacing> - - <widget> - <class>GtkTable</class> - <name>table6</name> - <border_width>4</border_width> - <rows>1</rows> - <columns>2</columns> - <homogeneous>False</homogeneous> - <row_spacing>4</row_spacing> - <column_spacing>4</column_spacing> - <child> - <padding>4</padding> - <expand>False</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkLabel</class> - <name>lblTransportHost</name> - <label>Host:</label> - <justify>GTK_JUSTIFY_RIGHT</justify> - <wrap>False</wrap> - <xalign>1</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GtkEntry</class> - <name>txtTransportHostname</name> - <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>0</text_max_length> - <text></text> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - </widget> - - <widget> - <class>GtkCheckButton</class> - <name>chkTransportNeedsAuth</name> - <border_width>3</border_width> - <can_focus>True</can_focus> - <label>Server requires authentication</label> - <active>False</active> - <draw_indicator>True</draw_indicator> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> - </widget> - - <widget> - <class>GtkCheckButton</class> - <name>chkOutgoingCheckSettings</name> - <border_width>3</border_width> - <can_focus>True</can_focus> - <label>Check settings</label> - <active>True</active> - <draw_indicator>True</draw_indicator> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> - </widget> - </widget> - </widget> - </widget> + <class>Placeholder</class> </widget> </widget> </widget> <widget> <class>GnomeDruidPageStandard</class> - <name>druidTransportAuthPage</name> - <signal> - <name>prepare</name> - <handler>transport_auth_prepare</handler> - <last_modification_time>Tue, 07 Nov 2000 22:31:02 GMT</last_modification_time> - </signal> - <signal> - <name>next</name> - <handler>transport_auth_next</handler> - <last_modification_time>Tue, 07 Nov 2000 22:31:08 GMT</last_modification_time> - </signal> - <title>Transport Authentication</title> - <title_color>255,255,255</title_color> - <background_color>25,25,112</background_color> - <logo_background_color>25,25,112</logo_background_color> - <logo_image>registration.png</logo_image> - - <widget> - <class>GtkVBox</class> - <child_name>GnomeDruidPageStandard:vbox</child_name> - <name>druid-vbox4</name> - <homogeneous>False</homogeneous> - <spacing>0</spacing> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkVBox</class> - <name>vboxTransportAuth</name> - <border_width>6</border_width> - <homogeneous>False</homogeneous> - <spacing>0</spacing> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - - <widget> - <class>Custom</class> - <name>htmlTransportAuthentication</name> - <creation_function>mail_config_create_html</creation_function> - <int1>0</int1> - <int2>0</int2> - <last_modification_time>Thu, 02 Nov 2000 17:31:34 GMT</last_modification_time> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - </widget> - - <widget> - <class>GtkFrame</class> - <name>frmTransportAuth</name> - <label>Authentication</label> - <label_xalign>0</label_xalign> - <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkVBox</class> - <name>vbox9</name> - <homogeneous>False</homogeneous> - <spacing>0</spacing> - - <widget> - <class>GtkHBox</class> - <name>hbox25</name> - <border_width>4</border_width> - <homogeneous>False</homogeneous> - <spacing>4</spacing> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkLabel</class> - <name>lblTransportAuthType</name> - <label>Authentication Type:</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>1</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>True</fill> - </child> - </widget> - - <widget> - <class>GtkOptionMenu</class> - <name>omenuTransportAuthType</name> - <can_focus>True</can_focus> - <items></items> - <initial_choice>0</initial_choice> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - </widget> - </widget> - - <widget> - <class>GtkTable</class> - <name>tableTransportAuth</name> - <border_width>4</border_width> - <rows>2</rows> - <columns>2</columns> - <homogeneous>False</homogeneous> - <row_spacing>4</row_spacing> - <column_spacing>4</column_spacing> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkLabel</class> - <name>lblTransportUsername</name> - <label>Username:</label> - <justify>GTK_JUSTIFY_RIGHT</justify> - <wrap>False</wrap> - <xalign>1</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GtkEntry</class> - <name>txtTransportAuthUsername</name> - <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>False</text_visible> - <text_max_length>0</text_max_length> - <text></text> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GtkLabel</class> - <name>lblTransportPasswd</name> - <label>Password:</label> - <justify>GTK_JUSTIFY_RIGHT</justify> - <wrap>False</wrap> - <xalign>1</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>1</top_attach> - <bottom_attach>2</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GtkEntry</class> - <name>txtTransportAuthPasswd</name> - <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>False</text_visible> - <text_max_length>0</text_max_length> - <text></text> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>1</top_attach> - <bottom_attach>2</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - </widget> - - <widget> - <class>GtkCheckButton</class> - <name>chkTransportAuthSavePasswd</name> - <border_width>4</border_width> - <can_focus>True</can_focus> - <label>Remember my password</label> - <active>False</active> - <draw_indicator>True</draw_indicator> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> - </widget> - </widget> - </widget> - </widget> - </widget> - </widget> - - <widget> - <class>GnomeDruidPageStandard</class> - <name>druidManagementPage</name> - <signal> - <name>prepare</name> - <handler>management_prepare</handler> - <last_modification_time>Thu, 09 Nov 2000 19:22:01 GMT</last_modification_time> - </signal> - <signal> - <name>next</name> - <handler>management_next</handler> - <last_modification_time>Thu, 09 Nov 2000 21:46:21 GMT</last_modification_time> - </signal> + <name>management_page</name> <title>Account Management</title> <title_color>255,255,255</title_color> - <background_color>25,25,112</background_color> - <logo_background_color>25,25,112</logo_background_color> - <logo_image>evolution-tasks.png</logo_image> + <background_color>0,0,0</background_color> + <logo_background_color>0,0,0</logo_background_color> <widget> <class>GtkVBox</class> <child_name>GnomeDruidPageStandard:vbox</child_name> - <name>druid-vbox5</name> + <name>druid_management_vbox</name> <homogeneous>False</homogeneous> <spacing>0</spacing> <child> @@ -1535,133 +170,14 @@ Click "Next" to begin. </text> </child> <widget> - <class>GtkVBox</class> - <name>vbox29</name> - <border_width>5</border_width> - <homogeneous>False</homogeneous> - <spacing>0</spacing> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - - <widget> - <class>Custom</class> - <name>htmlAccountInfo</name> - <creation_function>mail_config_create_html</creation_function> - <int1>0</int1> - <int2>0</int2> - <last_modification_time>Thu, 02 Nov 2000 17:38:22 GMT</last_modification_time> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - </widget> - - <widget> - <class>GtkFrame</class> - <name>management-frame</name> - <label>Account Information</label> - <label_xalign>0</label_xalign> - <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkVBox</class> - <name>vbox31</name> - <homogeneous>False</homogeneous> - <spacing>0</spacing> - - <widget> - <class>GtkHBox</class> - <name>hbox24</name> - <border_width>3</border_width> - <homogeneous>False</homogeneous> - <spacing>5</spacing> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkLabel</class> - <name>management-name-label</name> - <label>Name:</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0.5</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> - </widget> - - <widget> - <class>GtkEntry</class> - <name>txtAccountName</name> - <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>0</text_max_length> - <text></text> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - </widget> - - <widget> - <class>GtkCheckButton</class> - <name>chkAccountDefault</name> - <can_focus>True</can_focus> - <label>Make this my default account</label> - <active>False</active> - <draw_indicator>True</draw_indicator> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> - </widget> - </widget> - - <widget> - <class>GtkLabel</class> - <name></name> - <label></label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0.5</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> - </widget> - </widget> - </widget> + <class>Placeholder</class> </widget> </widget> </widget> <widget> <class>GnomeDruidPageFinish</class> - <name>druidFinishPage</name> + <name>finish_page</name> <title>Done</title> <text>Congratulations, your mail configuration is complete. @@ -1669,655 +185,836 @@ You are now ready to send and receive email using Evolution. Click "Finish" to save your settings.</text> - <background_color>25,25,112</background_color> - <logo_background_color>25,25,112</logo_background_color> + <background_color>0,0,0</background_color> + <logo_background_color>0,0,0</logo_background_color> <textbox_color>255,255,255</textbox_color> <text_color>0,0,0</text_color> <title_color>255,255,255</title_color> - <logo_image>house.png</logo_image> </widget> </widget> </widget> <widget> - <class>GnomeDialog</class> - <name>mail-accounts-dialog</name> + <class>GtkWindow</class> + <name>account_editor_window</name> <visible>False</visible> - <title>Evolution Mail Configuration</title> + <title>window1</title> <type>GTK_WINDOW_TOPLEVEL</type> - <position>GTK_WIN_POS_CENTER</position> + <position>GTK_WIN_POS_NONE</position> <modal>False</modal> - <default_width>350</default_width> - <default_height>240</default_height> <allow_shrink>False</allow_shrink> <allow_grow>True</allow_grow> - <auto_shrink>True</auto_shrink> - <auto_close>False</auto_close> - <hide_on_close>False</hide_on_close> + <auto_shrink>False</auto_shrink> <widget> - <class>GtkVBox</class> - <child_name>GnomeDialog:vbox</child_name> - <name>vbox37</name> - <homogeneous>False</homogeneous> - <spacing>8</spacing> - <child> - <padding>4</padding> - <expand>True</expand> - <fill>True</fill> - </child> + <class>GtkNotebook</class> + <name>account_editor_notebook</name> + <can_focus>True</can_focus> + <show_tabs>True</show_tabs> + <show_border>True</show_border> + <tab_pos>GTK_POS_TOP</tab_pos> + <scrollable>False</scrollable> + <tab_hborder>2</tab_hborder> + <tab_vborder>2</tab_vborder> + <popup_enable>False</popup_enable> <widget> - <class>GtkHButtonBox</class> - <child_name>GnomeDialog:action_area</child_name> - <name>hbuttonbox2</name> - <layout_style>GTK_BUTTONBOX_END</layout_style> - <spacing>8</spacing> - <child_min_width>85</child_min_width> - <child_min_height>27</child_min_height> - <child_ipad_x>7</child_ipad_x> - <child_ipad_y>0</child_ipad_y> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>True</fill> - <pack>GTK_PACK_END</pack> - </child> - - <widget> - <class>GtkButton</class> - <name>cmdOK</name> - <can_default>True</can_default> - <can_focus>True</can_focus> - <stock_button>GNOME_STOCK_BUTTON_OK</stock_button> - </widget> + <class>GtkVBox</class> + <name>identity_vbox</name> + <border_width>4</border_width> + <homogeneous>False</homogeneous> + <spacing>4</spacing> <widget> - <class>GtkButton</class> - <name>cmdCancel</name> - <can_default>True</can_default> - <can_focus>True</can_focus> - <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button> - </widget> - </widget> - - <widget> - <class>GtkNotebook</class> - <name>notebook</name> - <can_focus>True</can_focus> - <show_tabs>True</show_tabs> - <show_border>True</show_border> - <tab_pos>GTK_POS_TOP</tab_pos> - <scrollable>False</scrollable> - <tab_hborder>2</tab_hborder> - <tab_vborder>2</tab_vborder> - <popup_enable>False</popup_enable> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> - - <widget> - <class>GtkHBox</class> - <name>hbox36</name> - <homogeneous>False</homogeneous> - <spacing>0</spacing> + <class>GtkFrame</class> + <name>management_frame</name> + <border_width>3</border_width> + <label>Account Information</label> + <label_xalign>0</label_xalign> + <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> <widget> - <class>GtkScrolledWindow</class> - <name>scrolledwindow1</name> - <hscrollbar_policy>GTK_POLICY_AUTOMATIC</hscrollbar_policy> - <vscrollbar_policy>GTK_POLICY_AUTOMATIC</vscrollbar_policy> - <hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy> - <vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> + <class>GtkVBox</class> + <name>vbox31</name> + <homogeneous>False</homogeneous> + <spacing>0</spacing> <widget> - <class>GtkCList</class> - <name>clistAccounts</name> - <can_focus>True</can_focus> - <columns>2</columns> - <column_widths>150,80</column_widths> - <selection_mode>GTK_SELECTION_SINGLE</selection_mode> - <show_titles>True</show_titles> - <shadow_type>GTK_SHADOW_IN</shadow_type> + <class>GtkHBox</class> + <name>hbox24</name> + <border_width>3</border_width> + <homogeneous>False</homogeneous> + <spacing>5</spacing> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> <widget> <class>GtkLabel</class> - <child_name>CList:title</child_name> - <name>lblAccount</name> - <label>Account</label> + <name>management_name_label</name> + <label>Name:</label> <justify>GTK_JUSTIFY_CENTER</justify> <wrap>False</wrap> <xalign>0.5</xalign> <yalign>0.5</yalign> <xpad>0</xpad> <ypad>0</ypad> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> </widget> <widget> - <class>GtkLabel</class> - <child_name>CList:title</child_name> - <name>lblType</name> - <label>Type</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0.5</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> + <class>GtkEntry</class> + <name>management_name</name> + <can_focus>True</can_focus> + <editable>True</editable> + <text_visible>True</text_visible> + <text_max_length>0</text_max_length> + <text></text> + <child> + <padding>0</padding> + <expand>True</expand> + <fill>True</fill> + </child> </widget> </widget> + + <widget> + <class>GtkCheckButton</class> + <name>management_default</name> + <can_focus>True</can_focus> + <label>Make this my default account</label> + <active>False</active> + <draw_indicator>True</draw_indicator> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> + </widget> </widget> + </widget> + + <widget> + <class>GtkFrame</class> + <name>identity_required_frame</name> + <border_width>3</border_width> + <label>Required Information</label> + <label_xalign>0</label_xalign> + <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> <widget> - <class>GtkVButtonBox</class> - <name>vbuttonbox1</name> - <layout_style>GTK_BUTTONBOX_START</layout_style> - <spacing>0</spacing> - <child_min_width>85</child_min_width> - <child_min_height>27</child_min_height> - <child_ipad_x>7</child_ipad_x> - <child_ipad_y>0</child_ipad_y> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> + <class>GtkTable</class> + <name>table1</name> + <border_width>4</border_width> + <rows>2</rows> + <columns>2</columns> + <homogeneous>False</homogeneous> + <row_spacing>4</row_spacing> + <column_spacing>4</column_spacing> <widget> - <class>GtkButton</class> - <name>cmdMailAdd</name> - <can_default>True</can_default> + <class>GtkEntry</class> + <name>identity_full_name</name> + <width>80</width> + <height>20</height> <can_focus>True</can_focus> - <label>_Add</label> - <relief>GTK_RELIEF_NORMAL</relief> + <has_focus>True</has_focus> + <editable>True</editable> + <text_visible>True</text_visible> + <text_max_length>50</text_max_length> + <text></text> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> </widget> <widget> - <class>GtkButton</class> - <name>cmdMailEdit</name> - <can_default>True</can_default> + <class>GtkEntry</class> + <name>identity_address</name> <can_focus>True</can_focus> - <label>_Edit</label> - <relief>GTK_RELIEF_NORMAL</relief> + <editable>True</editable> + <text_visible>True</text_visible> + <text_max_length>50</text_max_length> + <text></text> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>1</top_attach> + <bottom_attach>2</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> </widget> <widget> - <class>GtkButton</class> - <name>cmdMailDelete</name> - <can_default>True</can_default> - <can_focus>True</can_focus> - <label>_Delete</label> - <relief>GTK_RELIEF_NORMAL</relief> + <class>GtkLabel</class> + <name>identity_address_label</name> + <label>Email Address:</label> + <justify>GTK_JUSTIFY_RIGHT</justify> + <wrap>False</wrap> + <xalign>1</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>1</top_attach> + <bottom_attach>2</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> </widget> <widget> - <class>GtkButton</class> - <name>cmdMailDefault</name> - <can_default>True</can_default> - <can_focus>True</can_focus> - <label>De_fault</label> - <relief>GTK_RELIEF_NORMAL</relief> + <class>GtkLabel</class> + <name>identity_full_name_label</name> + <label>Full Name:</label> + <justify>GTK_JUSTIFY_RIGHT</justify> + <wrap>False</wrap> + <xalign>1</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> </widget> </widget> </widget> <widget> - <class>GtkLabel</class> - <child_name>Notebook:tab</child_name> - <name>lblMail</name> - <label>Mail</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0.5</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - </widget> - - <widget> - <class>GtkHBox</class> - <name>hbox37</name> - <homogeneous>False</homogeneous> - <spacing>0</spacing> + <class>GtkFrame</class> + <name>identity_optional_frame</name> + <border_width>3</border_width> + <label>Optional Information</label> + <label_xalign>0</label_xalign> + <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> <widget> - <class>GtkScrolledWindow</class> - <name>scrolledwindow2</name> - <hscrollbar_policy>GTK_POLICY_AUTOMATIC</hscrollbar_policy> - <vscrollbar_policy>GTK_POLICY_AUTOMATIC</vscrollbar_policy> - <hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy> - <vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> + <class>GtkTable</class> + <name>table2</name> + <border_width>4</border_width> + <rows>2</rows> + <columns>2</columns> + <homogeneous>False</homogeneous> + <row_spacing>4</row_spacing> + <column_spacing>4</column_spacing> <widget> - <class>GtkCList</class> - <name>clistNews</name> + <class>GtkEntry</class> + <name>identity_organization</name> <can_focus>True</can_focus> - <columns>1</columns> - <column_widths>80</column_widths> - <selection_mode>GTK_SELECTION_SINGLE</selection_mode> - <show_titles>True</show_titles> - <shadow_type>GTK_SHADOW_IN</shadow_type> - - <widget> - <class>GtkLabel</class> - <child_name>CList:title</child_name> - <name>lblSources</name> - <label>Sources</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0.5</xalign> - <yalign>0.5</yalign> + <editable>True</editable> + <text_visible>True</text_visible> + <text_max_length>0</text_max_length> + <text></text> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> <xpad>0</xpad> <ypad>0</ypad> - </widget> + <xexpand>True</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> </widget> - </widget> - - <widget> - <class>GtkVButtonBox</class> - <name>vbuttonbox2</name> - <layout_style>GTK_BUTTONBOX_START</layout_style> - <spacing>0</spacing> - <child_min_width>85</child_min_width> - <child_min_height>27</child_min_height> - <child_ipad_x>7</child_ipad_x> - <child_ipad_y>0</child_ipad_y> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> <widget> - <class>GtkButton</class> - <name>cmdNewsAdd</name> - <can_default>True</can_default> - <can_focus>True</can_focus> - <label>Add</label> - <relief>GTK_RELIEF_NORMAL</relief> + <class>GnomeFileEntry</class> + <name>identity_signature</name> + <max_saved>10</max_saved> + <directory>False</directory> + <modal>False</modal> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>1</top_attach> + <bottom_attach>2</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + + <widget> + <class>GtkEntry</class> + <child_name>GnomeEntry:entry</child_name> + <name>identity_signature_entry</name> + <can_focus>True</can_focus> + <editable>True</editable> + <text_visible>True</text_visible> + <text_max_length>0</text_max_length> + <text></text> + </widget> </widget> <widget> - <class>GtkButton</class> - <name>cmdNewsEdit</name> - <can_default>True</can_default> - <can_focus>True</can_focus> - <label>Edit</label> - <relief>GTK_RELIEF_NORMAL</relief> + <class>GtkLabel</class> + <name>identity_signature_label</name> + <label>Signature file:</label> + <justify>GTK_JUSTIFY_RIGHT</justify> + <wrap>False</wrap> + <xalign>1</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>1</top_attach> + <bottom_attach>2</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> </widget> <widget> - <class>GtkButton</class> - <name>cmdNewsDelete</name> - <can_default>True</can_default> - <can_focus>True</can_focus> - <label>Delete</label> - <relief>GTK_RELIEF_NORMAL</relief> + <class>GtkLabel</class> + <name>identity_organization_label</name> + <label>Organization:</label> + <justify>GTK_JUSTIFY_RIGHT</justify> + <wrap>False</wrap> + <xalign>1</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> </widget> </widget> </widget> + </widget> - <widget> - <class>GtkLabel</class> - <child_name>Notebook:tab</child_name> - <name>lblNews</name> - <label>News</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0.5</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - </widget> + <widget> + <class>GtkLabel</class> + <child_name>Notebook:tab</child_name> + <name>label31</name> + <label>Identity</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + </widget> + + <widget> + <class>GtkVBox</class> + <name>source_vbox</name> + <homogeneous>False</homogeneous> + <spacing>0</spacing> <widget> - <class>GtkVBox</class> - <name>vbox38</name> + <class>GtkTable</class> + <name>table3</name> + <border_width>3</border_width> + <rows>1</rows> + <columns>2</columns> <homogeneous>False</homogeneous> - <spacing>4</spacing> + <row_spacing>0</row_spacing> + <column_spacing>2</column_spacing> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> <widget> - <class>GtkCheckButton</class> - <name>chkSendHTML</name> - <can_focus>True</can_focus> - <label>Send mail in HTML format by default.</label> - <active>False</active> - <draw_indicator>True</draw_indicator> + <class>GtkLabel</class> + <name>source_type_label</name> + <label>Server Type: </label> + <justify>GTK_JUSTIFY_RIGHT</justify> + <wrap>False</wrap> + <xalign>1</xalign> + <yalign>0.5</yalign> + <xpad>2</xpad> + <ypad>0</ypad> <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> </child> </widget> <widget> - <class>GtkHBox</class> - <name>hbox42</name> - <homogeneous>False</homogeneous> - <spacing>0</spacing> + <class>GtkOptionMenu</class> + <name>source_type_omenu</name> + <can_focus>True</can_focus> + <items>POP +IMAPv4 +Standard Unix mbox +Qmail maildir +None +</items> + <initial_choice>0</initial_choice> <child> - <padding>0</padding> - <expand>False</expand> - <fill>True</fill> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>False</xfill> + <yfill>False</yfill> </child> + </widget> + </widget> - <widget> - <class>GtkCheckButton</class> - <name>chckHighlightCitations</name> - <can_focus>True</can_focus> - <label>Highlight citations with </label> - <active>False</active> - <draw_indicator>True</draw_indicator> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> - </widget> + <widget> + <class>GtkFrame</class> + <name>source_frame</name> + <border_width>3</border_width> + <label>Server Configuration</label> + <label_xalign>0</label_xalign> + <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> + + <widget> + <class>GtkTable</class> + <name>table4</name> + <border_width>3</border_width> + <rows>4</rows> + <columns>2</columns> + <homogeneous>False</homogeneous> + <row_spacing>3</row_spacing> + <column_spacing>3</column_spacing> <widget> - <class>GnomeColorPicker</class> - <name>colorpickerCitations</name> - <can_focus>True</can_focus> - <dither>True</dither> - <use_alpha>False</use_alpha> - <title>Pick a color</title> + <class>GtkLabel</class> + <name>source_host_label</name> + <label>Host:</label> + <justify>GTK_JUSTIFY_RIGHT</justify> + <wrap>False</wrap> + <xalign>1</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> </child> </widget> <widget> <class>GtkLabel</class> - <name>label1</name> - <label> color</label> - <justify>GTK_JUSTIFY_CENTER</justify> + <name>source_user_label</name> + <label>Username:</label> + <justify>GTK_JUSTIFY_RIGHT</justify> <wrap>False</wrap> - <xalign>0.5</xalign> + <xalign>1</xalign> <yalign>0.5</yalign> <xpad>0</xpad> <ypad>0</ypad> <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>1</top_attach> + <bottom_attach>2</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> </child> </widget> - </widget> - <widget> - <class>GtkHBox</class> - <name>hbox38</name> - <homogeneous>False</homogeneous> - <spacing>0</spacing> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>True</fill> - </child> + <widget> + <class>GtkEntry</class> + <name>source_host</name> + <can_focus>True</can_focus> + <editable>True</editable> + <text_visible>True</text_visible> + <text_max_length>0</text_max_length> + <text></text> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> <widget> - <class>GtkLabel</class> - <name>lblMarkAsRead</name> - <label>Mark messages as "Read" after:</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0.5</xalign> - <yalign>0.5</yalign> - <xpad>4</xpad> - <ypad>0</ypad> + <class>GtkEntry</class> + <name>source_user</name> + <can_focus>True</can_focus> + <editable>True</editable> + <text_visible>True</text_visible> + <text_max_length>0</text_max_length> + <text></text> <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>1</top_attach> + <bottom_attach>2</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> </child> </widget> <widget> - <class>GtkSpinButton</class> - <name>spinMarkTimeout</name> + <class>GtkEntry</class> + <name>source_path</name> <can_focus>True</can_focus> - <climb_rate>1</climb_rate> - <digits>1</digits> - <numeric>True</numeric> - <update_policy>GTK_UPDATE_IF_VALID</update_policy> - <snap>False</snap> - <wrap>False</wrap> - <value>1.5</value> - <lower>0</lower> - <upper>10</upper> - <step>0.1</step> - <page>1</page> - <page_size>1</page_size> + <editable>True</editable> + <text_visible>True</text_visible> + <text_max_length>0</text_max_length> + <text></text> <child> - <padding>0</padding> - <expand>False</expand> - <fill>True</fill> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>2</top_attach> + <bottom_attach>3</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> </child> </widget> <widget> <class>GtkLabel</class> - <name>lblSeconds</name> - <label>seconds.</label> - <justify>GTK_JUSTIFY_CENTER</justify> + <name>source_path_label</name> + <label>Path:</label> + <justify>GTK_JUSTIFY_RIGHT</justify> <wrap>False</wrap> - <xalign>0.5</xalign> + <xalign>1</xalign> <yalign>0.5</yalign> - <xpad>4</xpad> + <xpad>0</xpad> <ypad>0</ypad> <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>2</top_attach> + <bottom_attach>3</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> + + <widget> + <class>GtkCheckButton</class> + <name>source_use_ssl</name> + <can_focus>True</can_focus> + <label>Use secure connection (SSL)</label> + <active>False</active> + <draw_indicator>True</draw_indicator> + <child> + <left_attach>0</left_attach> + <right_attach>2</right_attach> + <top_attach>3</top_attach> + <bottom_attach>4</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> </child> </widget> </widget> + </widget> + + <widget> + <class>GtkFrame</class> + <name>source_auth_frame</name> + <border_width>3</border_width> + <label>Authentication</label> + <label_xalign>0</label_xalign> + <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> <widget> - <class>GtkHBox</class> - <name>hbox41</name> + <class>GtkVBox</class> + <name>vbox60</name> + <border_width>3</border_width> <homogeneous>False</homogeneous> <spacing>0</spacing> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>True</fill> - </child> <widget> - <class>GtkLabel</class> - <name>lblPgpPath</name> - <label>PGP binary path:</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0.5</xalign> - <yalign>0.5</yalign> - <xpad>4</xpad> - <ypad>0</ypad> + <class>GtkHBox</class> + <name>hbox44</name> + <homogeneous>False</homogeneous> + <spacing>3</spacing> <child> <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> - </widget> - - <widget> - <class>GnomeFileEntry</class> - <name>filePgpPath</name> - <max_saved>10</max_saved> - <title>Select PGP binary</title> - <directory>False</directory> - <modal>True</modal> - <child> - <padding>4</padding> <expand>True</expand> <fill>True</fill> </child> <widget> - <class>GtkEntry</class> - <child_name>GnomeEntry:entry</child_name> - <name>combo-entry1</name> + <class>GtkLabel</class> + <name>source_auth_label</name> + <label>Authentication Type: </label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> + </widget> + + <widget> + <class>GtkOptionMenu</class> + <name>source_auth_omenu</name> <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>0</text_max_length> - <text></text> + <items>Password +Kerberos +</items> + <initial_choice>0</initial_choice> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> + </widget> + + <widget> + <class>GtkAlignment</class> + <name>alignment1</name> + <xalign>1</xalign> + <yalign>0.5</yalign> + <xscale>1</xscale> + <yscale>1</yscale> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + <pack>GTK_PACK_END</pack> + </child> + + <widget> + <class>GtkButton</class> + <name>source_check_supported</name> + <can_focus>True</can_focus> + <label> Check for supported types </label> + <relief>GTK_RELIEF_NORMAL</relief> + </widget> </widget> </widget> - </widget> - </widget> - <widget> - <class>GtkLabel</class> - <child_name>Notebook:tab</child_name> - <name>lblOther</name> - <label>Other</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0.5</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> + <widget> + <class>GtkCheckButton</class> + <name>source_remember_password</name> + <can_focus>True</can_focus> + <label>Remember this password</label> + <active>False</active> + <draw_indicator>True</draw_indicator> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> + </widget> + </widget> </widget> </widget> - </widget> -</widget> - -<widget> - <class>GnomeDialog</class> - <name>mail-account-editor</name> - <visible>False</visible> - <type>GTK_WINDOW_TOPLEVEL</type> - <position>GTK_WIN_POS_NONE</position> - <modal>True</modal> - <allow_shrink>True</allow_shrink> - <allow_grow>True</allow_grow> - <auto_shrink>True</auto_shrink> - <auto_close>False</auto_close> - <hide_on_close>False</hide_on_close> - - <widget> - <class>GtkVBox</class> - <child_name>GnomeDialog:vbox</child_name> - <name>dialog-vbox4</name> - <homogeneous>False</homogeneous> - <spacing>8</spacing> - <child> - <padding>4</padding> - <expand>True</expand> - <fill>True</fill> - </child> <widget> - <class>GtkHButtonBox</class> - <child_name>GnomeDialog:action_area</child_name> - <name>dialog-action_area4</name> - <layout_style>GTK_BUTTONBOX_END</layout_style> - <spacing>8</spacing> - <child_min_width>85</child_min_width> - <child_min_height>27</child_min_height> - <child_ipad_x>7</child_ipad_x> - <child_ipad_y>0</child_ipad_y> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>True</fill> - <pack>GTK_PACK_END</pack> - </child> - - <widget> - <class>GtkButton</class> - <name>button1</name> - <can_default>True</can_default> - <can_focus>True</can_focus> - <stock_button>GNOME_STOCK_BUTTON_OK</stock_button> - </widget> - - <widget> - <class>GtkButton</class> - <name>button2</name> - <can_default>True</can_default> - <can_focus>True</can_focus> - <stock_button>GNOME_STOCK_BUTTON_APPLY</stock_button> - </widget> - - <widget> - <class>GtkButton</class> - <name>button3</name> - <can_default>True</can_default> - <can_focus>True</can_focus> - <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button> - </widget> + <class>GtkLabel</class> + <child_name>Notebook:tab</child_name> + <name>label32</name> + <label>Receiving Mail</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> </widget> <widget> - <class>GtkNotebook</class> - <name>toplevel</name> - <can_focus>True</can_focus> - <show_tabs>True</show_tabs> - <show_border>True</show_border> - <tab_pos>GTK_POS_TOP</tab_pos> - <scrollable>False</scrollable> - <tab_hborder>2</tab_hborder> - <tab_vborder>2</tab_vborder> - <popup_enable>False</popup_enable> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> + <class>GtkVBox</class> + <name>extra_vbox</name> + <border_width>4</border_width> + <homogeneous>False</homogeneous> + <spacing>0</spacing> <widget> - <class>GtkVBox</class> - <name>vboxGeneral</name> - <homogeneous>False</homogeneous> - <spacing>0</spacing> + <class>GtkFrame</class> + <name>extra_mailcheck_frame</name> + <label>Checking for new mail</label> + <label_xalign>0</label_xalign> + <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> <widget> - <class>GtkFrame</class> - <name>frameMailAccount</name> + <class>GtkVBox</class> + <name>extra_mailcheck_vbox</name> <border_width>4</border_width> - <label>Mail Account</label> - <label_xalign>0</label_xalign> - <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> - <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> - </child> + <homogeneous>False</homogeneous> + <spacing>0</spacing> <widget> - <class>GtkVBox</class> - <name>vboxMailAccount</name> + <class>GtkHBox</class> + <name>hbox53</name> <homogeneous>False</homogeneous> <spacing>0</spacing> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> <widget> - <class>GtkLabel</class> - <name>labelDirections</name> - <label>Type the name by which you would like to refer to these servers. For example: "Work" or "Home".</label> - <justify>GTK_JUSTIFY_LEFT</justify> - <wrap>True</wrap> - <xalign>0.5</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>4</ypad> + <class>GtkCheckButton</class> + <name>extra_auto_check</name> + <can_focus>True</can_focus> + <label>Automatically check for new mail every</label> + <active>False</active> + <draw_indicator>True</draw_indicator> <child> <padding>0</padding> <expand>False</expand> @@ -2326,52 +1023,175 @@ Click "Finish" to save your settings.</text> </widget> <widget> - <class>GtkEntry</class> - <name>txtAccountName</name> + <class>GtkSpinButton</class> + <name>extra_auto_check_min</name> <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>0</text_max_length> - <text></text> + <climb_rate>1</climb_rate> + <digits>0</digits> + <numeric>True</numeric> + <update_policy>GTK_UPDATE_ALWAYS</update_policy> + <snap>False</snap> + <wrap>False</wrap> + <value>10</value> + <lower>1</lower> + <upper>1440</upper> + <step>1</step> + <page>10</page> + <page_size>10</page_size> <child> - <padding>2</padding> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> + </widget> + + <widget> + <class>GtkLabel</class> + <name>label36</name> + <label>minute(s)</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <padding>0</padding> <expand>False</expand> <fill>False</fill> </child> </widget> </widget> </widget> + </widget> + </widget> + + <widget> + <class>GtkLabel</class> + <child_name>Notebook:tab</child_name> + <name>label33</name> + <label>Receiving Options</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + </widget> + + <widget> + <class>GtkVBox</class> + <name>transport_vbox</name> + <homogeneous>False</homogeneous> + <spacing>0</spacing> + + <widget> + <class>GtkTable</class> + <name>table5</name> + <border_width>3</border_width> + <rows>1</rows> + <columns>2</columns> + <homogeneous>False</homogeneous> + <row_spacing>0</row_spacing> + <column_spacing>2</column_spacing> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> + + <widget> + <class>GtkLabel</class> + <name>transport_type_label</name> + <label>Server Type: </label> + <justify>GTK_JUSTIFY_RIGHT</justify> + <wrap>False</wrap> + <xalign>1</xalign> + <yalign>0.5</yalign> + <xpad>2</xpad> + <ypad>0</ypad> + <child> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> <widget> - <class>GtkFrame</class> - <name>frameIdentity</name> - <border_width>4</border_width> - <label>User Information</label> - <label_xalign>0</label_xalign> - <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> + <class>GtkOptionMenu</class> + <name>transport_type_omenu</name> + <can_focus>True</can_focus> + <items>SMTP +Sendmail +</items> + <initial_choice>0</initial_choice> <child> - <padding>0</padding> - <expand>True</expand> - <fill>True</fill> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>False</xfill> + <yfill>False</yfill> </child> + </widget> + </widget> + + <widget> + <class>GtkFrame</class> + <name>transport_frame</name> + <border_width>3</border_width> + <label>Server Configuration</label> + <label_xalign>0</label_xalign> + <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> + + <widget> + <class>GtkVBox</class> + <name>vbox12</name> + <border_width>3</border_width> + <homogeneous>False</homogeneous> + <spacing>0</spacing> <widget> <class>GtkTable</class> - <name>tableIdentity</name> - <border_width>4</border_width> - <rows>5</rows> + <name>table6</name> + <rows>1</rows> <columns>2</columns> <homogeneous>False</homogeneous> <row_spacing>4</row_spacing> <column_spacing>4</column_spacing> + <child> + <padding>4</padding> + <expand>False</expand> + <fill>True</fill> + </child> <widget> <class>GtkLabel</class> - <name>lblName</name> - <label>Full Name:</label> - <justify>GTK_JUSTIFY_CENTER</justify> + <name>transport_host_label</name> + <label>Host:</label> + <justify>GTK_JUSTIFY_RIGHT</justify> <wrap>False</wrap> - <xalign>0</xalign> + <xalign>1</xalign> <yalign>0.5</yalign> <xpad>0</xpad> <ypad>0</ypad> @@ -2392,23 +1212,21 @@ Click "Finish" to save your settings.</text> </widget> <widget> - <class>GtkLabel</class> - <name>lblEmailAddress</name> - <label>Email address:</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> + <class>GtkEntry</class> + <name>transport_host</name> + <can_focus>True</can_focus> + <editable>True</editable> + <text_visible>True</text_visible> + <text_max_length>0</text_max_length> + <text></text> <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>1</top_attach> - <bottom_attach>2</bottom_attach> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> <xpad>0</xpad> <ypad>0</ypad> - <xexpand>False</xexpand> + <xexpand>True</xexpand> <yexpand>False</yexpand> <xshrink>False</xshrink> <yshrink>False</yshrink> @@ -2416,993 +1234,862 @@ Click "Finish" to save your settings.</text> <yfill>False</yfill> </child> </widget> + </widget> - <widget> - <class>GtkLabel</class> - <name>lblReplyTo</name> - <label>Reply address:</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>2</top_attach> - <bottom_attach>3</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> + <widget> + <class>GtkCheckButton</class> + <name>transport_use_ssl</name> + <can_focus>True</can_focus> + <label>Use secure connection (SSL)</label> + <active>False</active> + <draw_indicator>True</draw_indicator> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> + </widget> - <widget> - <class>GtkLabel</class> - <name>lblOrganization</name> - <label>Organization:</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>3</top_attach> - <bottom_attach>4</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> + <widget> + <class>GtkCheckButton</class> + <name>transport_needs_auth</name> + <can_focus>True</can_focus> + <label>Server requires authentication</label> + <active>False</active> + <draw_indicator>True</draw_indicator> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> + </widget> + </widget> + </widget> + + <widget> + <class>GtkFrame</class> + <name>transport_auth_frame</name> + <border_width>3</border_width> + <label>Authentication</label> + <label_xalign>0</label_xalign> + <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> + + <widget> + <class>GtkVBox</class> + <name>vbox61</name> + <border_width>3</border_width> + <homogeneous>False</homogeneous> + <spacing>4</spacing> + + <widget> + <class>GtkHBox</class> + <name>hbox49</name> + <homogeneous>False</homogeneous> + <spacing>3</spacing> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> <widget> <class>GtkLabel</class> - <name>lblSignature</name> - <label>Signature:</label> + <name>transport_auth_label</name> + <label>Authentication Type: </label> <justify>GTK_JUSTIFY_CENTER</justify> <wrap>False</wrap> - <xalign>0</xalign> + <xalign>0.5</xalign> <yalign>0.5</yalign> <xpad>0</xpad> <ypad>0</ypad> <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>4</top_attach> - <bottom_attach>5</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> </child> </widget> <widget> - <class>GtkEntry</class> - <name>txtName</name> + <class>GtkOptionMenu</class> + <name>transport_auth_omenu</name> <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>0</text_max_length> - <text></text> + <items>Password +Kerberos +</items> + <initial_choice>0</initial_choice> <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> </child> </widget> <widget> - <class>GtkEntry</class> - <name>txtAddress</name> - <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>0</text_max_length> - <text></text> + <class>GtkAlignment</class> + <name>alignment2</name> + <xalign>1</xalign> + <yalign>0.5</yalign> + <xscale>1</xscale> + <yscale>1</yscale> <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>1</top_attach> - <bottom_attach>2</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + <pack>GTK_PACK_END</pack> </child> + + <widget> + <class>GtkButton</class> + <name>transport_check_supported</name> + <can_focus>True</can_focus> + <label> Check for supported types </label> + <relief>GTK_RELIEF_NORMAL</relief> + </widget> </widget> + </widget> + + <widget> + <class>GtkHBox</class> + <name>hbox52</name> + <homogeneous>False</homogeneous> + <spacing>4</spacing> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> <widget> - <class>GtkEntry</class> - <name>txtReplyTo</name> - <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>0</text_max_length> - <text></text> + <class>GtkLabel</class> + <name>transport_user_label</name> + <label>Username:</label> + <justify>GTK_JUSTIFY_RIGHT</justify> + <wrap>False</wrap> + <xalign>1</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>2</top_attach> - <bottom_attach>3</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> </child> </widget> <widget> <class>GtkEntry</class> - <name>txtOrganization</name> + <name>transport_user</name> <can_focus>True</can_focus> <editable>True</editable> <text_visible>True</text_visible> <text_max_length>0</text_max_length> <text></text> <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>3</top_attach> - <bottom_attach>4</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> + <padding>0</padding> + <expand>True</expand> + <fill>True</fill> </child> </widget> + </widget> - <widget> - <class>GnomeFileEntry</class> - <name>fileSignature</name> - <max_saved>10</max_saved> - <title>Select signature file</title> - <directory>False</directory> - <modal>True</modal> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>4</top_attach> - <bottom_attach>5</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - - <widget> - <class>GtkEntry</class> - <child_name>GnomeEntry:entry</child_name> - <name>txtSignature</name> - <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>0</text_max_length> - <text></text> - </widget> - </widget> + <widget> + <class>GtkCheckButton</class> + <name>transport_remember_password</name> + <can_focus>True</can_focus> + <label>Remember this password</label> + <active>False</active> + <draw_indicator>True</draw_indicator> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> </widget> </widget> </widget> + </widget> - <widget> - <class>GtkLabel</class> - <child_name>Notebook:tab</child_name> - <name>lblGeneral</name> - <label>General</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0.5</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - </widget> + <widget> + <class>GtkLabel</class> + <child_name>Notebook:tab</child_name> + <name>label34</name> + <label>Sending Mail</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + </widget> + + <widget> + <class>GtkVBox</class> + <name>folders_vbox</name> + <homogeneous>False</homogeneous> + <spacing>0</spacing> <widget> - <class>GtkTable</class> - <name>tableSource</name> - <border_width>4</border_width> - <rows>7</rows> - <columns>2</columns> - <homogeneous>False</homogeneous> - <row_spacing>4</row_spacing> - <column_spacing>4</column_spacing> + <class>GtkFrame</class> + <name>folders_frame</name> + <border_width>3</border_width> + <label>Sent and Draft Messages</label> + <label_xalign>0</label_xalign> + <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> <widget> - <class>GtkLabel</class> - <name>lblIncomingServerType</name> - <label>Server type:</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> + <class>GtkTable</class> + <name>table7</name> + <border_width>3</border_width> + <rows>2</rows> + <columns>2</columns> + <homogeneous>False</homogeneous> + <row_spacing>4</row_spacing> + <column_spacing>4</column_spacing> + + <widget> + <class>GtkLabel</class> + <name>drafts_label</name> + <label>Drafts folder:</label> + <justify>GTK_JUSTIFY_RIGHT</justify> + <wrap>False</wrap> + <xalign>1</xalign> + <yalign>0.5</yalign> <xpad>0</xpad> <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> + <child> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> - <widget> - <class>GtkLabel</class> - <name>lblSourceHost</name> - <label>Hostname:</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>1</top_attach> - <bottom_attach>2</bottom_attach> + <widget> + <class>GtkLabel</class> + <name>sent_label</name> + <label>Sent messages folder:</label> + <justify>GTK_JUSTIFY_RIGHT</justify> + <wrap>False</wrap> + <xalign>1</xalign> + <yalign>0.5</yalign> <xpad>0</xpad> <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> + <child> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>1</top_attach> + <bottom_attach>2</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> + + <widget> + <class>GtkButton</class> + <name>sent_button</name> + <can_focus>True</can_focus> + <label>Sent</label> + <relief>GTK_RELIEF_NORMAL</relief> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>1</top_attach> + <bottom_attach>2</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> + + <widget> + <class>GtkButton</class> + <name>drafts_button</name> + <can_focus>True</can_focus> + <label>Drafts</label> + <relief>GTK_RELIEF_NORMAL</relief> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> </widget> + </widget> + </widget> + + <widget> + <class>GtkLabel</class> + <child_name>Notebook:tab</child_name> + <name>label35</name> + <label>Special Folders</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + </widget> + </widget> +</widget> + +<widget> + <class>GtkWindow</class> + <name>mail_accounts_window</name> + <visible>False</visible> + <title>window1</title> + <type>GTK_WINDOW_TOPLEVEL</type> + <position>GTK_WIN_POS_NONE</position> + <modal>False</modal> + <allow_shrink>False</allow_shrink> + <allow_grow>True</allow_grow> + <auto_shrink>False</auto_shrink> + + <widget> + <class>GtkNotebook</class> + <name>notebook</name> + <can_focus>True</can_focus> + <show_tabs>True</show_tabs> + <show_border>True</show_border> + <tab_pos>GTK_POS_TOP</tab_pos> + <scrollable>False</scrollable> + <tab_hborder>2</tab_hborder> + <tab_vborder>2</tab_vborder> + <popup_enable>False</popup_enable> + + <widget> + <class>GtkHBox</class> + <name>hbox54</name> + <homogeneous>False</homogeneous> + <spacing>0</spacing> + + <widget> + <class>GtkScrolledWindow</class> + <name>scrolledwindow1</name> + <hscrollbar_policy>GTK_POLICY_AUTOMATIC</hscrollbar_policy> + <vscrollbar_policy>GTK_POLICY_AUTOMATIC</vscrollbar_policy> + <hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy> + <vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy> + <child> + <padding>0</padding> + <expand>True</expand> + <fill>True</fill> + </child> <widget> - <class>GtkEntry</class> - <name>txtSourceHost</name> + <class>GtkCList</class> + <name>clistAccounts</name> <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>0</text_max_length> - <text></text> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>1</top_attach> - <bottom_attach>2</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> + <columns>3</columns> + <column_widths>20,150,80</column_widths> + <selection_mode>GTK_SELECTION_SINGLE</selection_mode> + <show_titles>True</show_titles> + <shadow_type>GTK_SHADOW_IN</shadow_type> - <widget> - <class>GtkLabel</class> - <name>lblSourceUser</name> - <label>Username:</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>3</top_attach> - <bottom_attach>4</bottom_attach> + <widget> + <class>GtkLabel</class> + <child_name>CList:title</child_name> + <name>lblEnable</name> + <label></label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> <xpad>0</xpad> <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> + </widget> - <widget> - <class>GtkEntry</class> - <name>txtSourceUser</name> - <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>0</text_max_length> - <text></text> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>3</top_attach> - <bottom_attach>4</bottom_attach> + <widget> + <class>GtkLabel</class> + <child_name>CList:title</child_name> + <name>lblAccount</name> + <label>Account</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> <xpad>0</xpad> <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> + </widget> - <widget> - <class>GtkLabel</class> - <name>lblSourcePasswd</name> - <label>Password:</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>4</top_attach> - <bottom_attach>5</bottom_attach> + <widget> + <class>GtkLabel</class> + <child_name>CList:title</child_name> + <name>lblType</name> + <label>Type</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> <xpad>0</xpad> <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> + </widget> </widget> + </widget> + + <widget> + <class>GtkVBox</class> + <name>vbox62</name> + <homogeneous>False</homogeneous> + <spacing>0</spacing> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> <widget> - <class>GtkEntry</class> - <name>txtSourcePasswd</name> - <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>False</text_visible> - <text_max_length>0</text_max_length> - <text></text> + <class>GtkVButtonBox</class> + <name>vbuttonbox1</name> + <layout_style>GTK_BUTTONBOX_START</layout_style> + <spacing>0</spacing> + <child_min_width>85</child_min_width> + <child_min_height>27</child_min_height> + <child_ipad_x>7</child_ipad_x> + <child_ipad_y>0</child_ipad_y> <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>4</top_attach> - <bottom_attach>5</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> + <padding>0</padding> + <expand>True</expand> + <fill>True</fill> </child> + + <widget> + <class>GtkButton</class> + <name>cmdMailAdd</name> + <can_default>True</can_default> + <can_focus>True</can_focus> + <label>_Add</label> + <relief>GTK_RELIEF_NORMAL</relief> + </widget> + + <widget> + <class>GtkButton</class> + <name>cmdMailEdit</name> + <can_default>True</can_default> + <can_focus>True</can_focus> + <label>_Edit</label> + <relief>GTK_RELIEF_NORMAL</relief> + </widget> + + <widget> + <class>GtkButton</class> + <name>cmdMailDelete</name> + <can_default>True</can_default> + <can_focus>True</can_focus> + <label>_Delete</label> + <relief>GTK_RELIEF_NORMAL</relief> + </widget> </widget> <widget> - <class>GtkCheckButton</class> - <name>chkSourceSavePasswd</name> - <can_focus>True</can_focus> - <label>Save password</label> - <active>False</active> - <draw_indicator>True</draw_indicator> + <class>GtkHSeparator</class> + <name>hseparator1</name> <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>5</top_attach> - <bottom_attach>6</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> + <padding>0</padding> + <expand>True</expand> + <fill>True</fill> </child> </widget> <widget> - <class>GtkLabel</class> - <name>lblSourcePath</name> - <label>Path:</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> + <class>GtkVButtonBox</class> + <name>vbuttonbox3</name> + <layout_style>GTK_BUTTONBOX_END</layout_style> + <spacing>0</spacing> + <child_min_width>85</child_min_width> + <child_min_height>27</child_min_height> + <child_ipad_x>7</child_ipad_x> + <child_ipad_y>0</child_ipad_y> <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>6</top_attach> - <bottom_attach>7</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> + <padding>0</padding> + <expand>True</expand> + <fill>True</fill> </child> + + <widget> + <class>GtkButton</class> + <name>cmdMailDefault</name> + <can_default>True</can_default> + <can_focus>True</can_focus> + <label>De_fault</label> + <relief>GTK_RELIEF_NORMAL</relief> + </widget> + + <widget> + <class>GtkButton</class> + <name>cmdMailAble</name> + <can_default>True</can_default> + <can_focus>True</can_focus> + <label>Enable</label> + <relief>GTK_RELIEF_NORMAL</relief> + </widget> </widget> + </widget> + </widget> + + <widget> + <class>GtkLabel</class> + <child_name>Notebook:tab</child_name> + <name>accounts_config_label</name> + <label>Accounts</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + </widget> + + <widget> + <class>GtkHBox</class> + <name>hbox37</name> + <homogeneous>False</homogeneous> + <spacing>0</spacing> + + <widget> + <class>GtkScrolledWindow</class> + <name>scrolledwindow2</name> + <hscrollbar_policy>GTK_POLICY_AUTOMATIC</hscrollbar_policy> + <vscrollbar_policy>GTK_POLICY_AUTOMATIC</vscrollbar_policy> + <hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy> + <vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy> + <child> + <padding>0</padding> + <expand>True</expand> + <fill>True</fill> + </child> <widget> - <class>GtkEntry</class> - <name>txtSourcePath</name> + <class>GtkCList</class> + <name>clistNews</name> <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>0</text_max_length> - <text></text> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>6</top_attach> - <bottom_attach>7</bottom_attach> + <columns>1</columns> + <column_widths>80</column_widths> + <selection_mode>GTK_SELECTION_SINGLE</selection_mode> + <show_titles>True</show_titles> + <shadow_type>GTK_SHADOW_IN</shadow_type> + + <widget> + <class>GtkLabel</class> + <child_name>CList:title</child_name> + <name>lblSources</name> + <label>Sources</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> <xpad>0</xpad> <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> + </widget> </widget> + </widget> + + <widget> + <class>GtkVButtonBox</class> + <name>vbuttonbox2</name> + <layout_style>GTK_BUTTONBOX_START</layout_style> + <spacing>0</spacing> + <child_min_width>85</child_min_width> + <child_min_height>27</child_min_height> + <child_ipad_x>7</child_ipad_x> + <child_ipad_y>0</child_ipad_y> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> <widget> - <class>GtkLabel</class> - <name>lblSourceAuth</name> - <label>Authentication:</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>2</top_attach> - <bottom_attach>3</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> + <class>GtkButton</class> + <name>cmdNewsAdd</name> + <can_default>True</can_default> + <can_focus>True</can_focus> + <label>Add</label> + <relief>GTK_RELIEF_NORMAL</relief> </widget> <widget> - <class>GtkOptionMenu</class> - <name>omenuSourceAuth</name> + <class>GtkButton</class> + <name>cmdNewsEdit</name> + <can_default>True</can_default> <can_focus>True</can_focus> - <items>Plain Text -Kerberos -CRAM-MD5 -DIGEST-MD5 -</items> - <initial_choice>0</initial_choice> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>2</top_attach> - <bottom_attach>3</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> + <label>Edit</label> + <relief>GTK_RELIEF_NORMAL</relief> </widget> <widget> - <class>GtkLabel</class> - <name>txtSourceType</name> - <label>IMAP</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> + <class>GtkButton</class> + <name>cmdNewsDelete</name> + <can_default>True</can_default> + <can_focus>True</can_focus> + <label>Delete</label> + <relief>GTK_RELIEF_NORMAL</relief> </widget> </widget> + </widget> + + <widget> + <class>GtkLabel</class> + <child_name>Notebook:tab</child_name> + <name>news_config_label</name> + <label>News</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + </widget> + + <widget> + <class>GtkVBox</class> + <name>vbox38</name> + <homogeneous>False</homogeneous> + <spacing>4</spacing> <widget> - <class>GtkLabel</class> - <child_name>Notebook:tab</child_name> - <name>lblSource</name> - <label>Source</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0.5</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> + <class>GtkCheckButton</class> + <name>chkSendHTML</name> + <can_focus>True</can_focus> + <label>Send mail in HTML format by default.</label> + <active>False</active> + <draw_indicator>True</draw_indicator> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> </widget> <widget> - <class>GtkTable</class> - <name>tableTransport</name> - <border_width>4</border_width> - <rows>6</rows> - <columns>2</columns> + <class>GtkHBox</class> + <name>hbox42</name> <homogeneous>False</homogeneous> - <row_spacing>4</row_spacing> - <column_spacing>4</column_spacing> + <spacing>0</spacing> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> <widget> - <class>GtkLabel</class> - <name>lblOutgoingServerType</name> - <label>Server type:</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> + <class>GtkCheckButton</class> + <name>chckHighlightCitations</name> + <can_focus>True</can_focus> + <label>Highlight citations with </label> + <active>False</active> + <draw_indicator>True</draw_indicator> <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> </child> </widget> <widget> - <class>GtkOptionMenu</class> - <name>omenuTransportType</name> + <class>GnomeColorPicker</class> + <name>colorpickerCitations</name> <can_focus>True</can_focus> - <items>Sendmail -SMTP -</items> - <initial_choice>0</initial_choice> + <dither>True</dither> + <use_alpha>False</use_alpha> + <title>Pick a color</title> <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>0</top_attach> - <bottom_attach>1</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> </child> </widget> <widget> <class>GtkLabel</class> - <name>lblTransportHost</name> - <label>Hostname:</label> + <name>label1</name> + <label> color</label> <justify>GTK_JUSTIFY_CENTER</justify> <wrap>False</wrap> - <xalign>0</xalign> + <xalign>0.5</xalign> <yalign>0.5</yalign> <xpad>0</xpad> <ypad>0</ypad> <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>1</top_attach> - <bottom_attach>2</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> </child> </widget> + </widget> - <widget> - <class>GtkEntry</class> - <name>txtTransportHost</name> - <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>0</text_max_length> - <text></text> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>1</top_attach> - <bottom_attach>2</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> + <widget> + <class>GtkHBox</class> + <name>hbox38</name> + <homogeneous>False</homogeneous> + <spacing>0</spacing> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> <widget> <class>GtkLabel</class> - <name>lblTransportUser</name> - <label>Username:</label> + <name>lblMarkAsRead</name> + <label>Mark messages as "Read" after:</label> <justify>GTK_JUSTIFY_CENTER</justify> <wrap>False</wrap> - <xalign>0</xalign> + <xalign>0.5</xalign> <yalign>0.5</yalign> - <xpad>0</xpad> + <xpad>4</xpad> <ypad>0</ypad> <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>3</top_attach> - <bottom_attach>4</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> </child> </widget> <widget> - <class>GtkEntry</class> - <name>txtTransportUser</name> + <class>GtkSpinButton</class> + <name>spinMarkTimeout</name> <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>True</text_visible> - <text_max_length>0</text_max_length> - <text></text> + <climb_rate>1</climb_rate> + <digits>1</digits> + <numeric>True</numeric> + <update_policy>GTK_UPDATE_IF_VALID</update_policy> + <snap>False</snap> + <wrap>False</wrap> + <value>1.5</value> + <lower>0</lower> + <upper>10</upper> + <step>0.1</step> + <page>1</page> + <page_size>1</page_size> <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>3</top_attach> - <bottom_attach>4</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> </child> </widget> <widget> <class>GtkLabel</class> - <name>lblTransportPasswd</name> - <label>Password:</label> + <name>lblSeconds</name> + <label>seconds.</label> <justify>GTK_JUSTIFY_CENTER</justify> <wrap>False</wrap> - <xalign>0</xalign> + <xalign>0.5</xalign> <yalign>0.5</yalign> - <xpad>0</xpad> + <xpad>4</xpad> <ypad>0</ypad> <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>4</top_attach> - <bottom_attach>5</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> </child> </widget> + </widget> - <widget> - <class>GtkEntry</class> - <name>txtTransportPasswd</name> - <can_focus>True</can_focus> - <editable>True</editable> - <text_visible>False</text_visible> - <text_max_length>0</text_max_length> - <text></text> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>4</top_attach> - <bottom_attach>5</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>True</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> + <widget> + <class>GtkHBox</class> + <name>hbox41</name> + <homogeneous>False</homogeneous> + <spacing>0</spacing> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> <widget> <class>GtkLabel</class> - <name>lblTransportAuth</name> - <label>Authentication:</label> + <name>lblPgpPath</name> + <label>PGP binary path:</label> <justify>GTK_JUSTIFY_CENTER</justify> <wrap>False</wrap> - <xalign>0</xalign> + <xalign>0.5</xalign> <yalign>0.5</yalign> - <xpad>0</xpad> + <xpad>4</xpad> <ypad>0</ypad> <child> - <left_attach>0</left_attach> - <right_attach>1</right_attach> - <top_attach>2</top_attach> - <bottom_attach>3</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GtkOptionMenu</class> - <name>omenuTransportAuth</name> - <can_focus>True</can_focus> - <items>None -CRAM-MD5 -</items> - <initial_choice>0</initial_choice> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>2</top_attach> - <bottom_attach>3</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> - </child> - </widget> - - <widget> - <class>GtkCheckButton</class> - <name>chkTransportSavePasswd</name> - <can_focus>True</can_focus> - <label>Save password</label> - <active>False</active> - <draw_indicator>True</draw_indicator> - <child> - <left_attach>1</left_attach> - <right_attach>2</right_attach> - <top_attach>5</top_attach> - <bottom_attach>6</bottom_attach> - <xpad>0</xpad> - <ypad>0</ypad> - <xexpand>False</xexpand> - <yexpand>False</yexpand> - <xshrink>False</xshrink> - <yshrink>False</yshrink> - <xfill>True</xfill> - <yfill>False</yfill> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> </child> </widget> - </widget> - - <widget> - <class>GtkLabel</class> - <child_name>Notebook:tab</child_name> - <name>lblTransport</name> - <label>Transport</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0.5</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - </widget> - - <widget> - <class>GtkVBox</class> - <name>vboxAdvanced</name> - <homogeneous>False</homogeneous> - <spacing>0</spacing> <widget> - <class>GtkHBox</class> - <name>hboxAutoCheckMail</name> - <homogeneous>False</homogeneous> - <spacing>4</spacing> + <class>GnomeFileEntry</class> + <name>filePgpPath</name> + <max_saved>10</max_saved> + <title>Select PGP binary</title> + <directory>False</directory> + <modal>True</modal> <child> - <padding>0</padding> - <expand>False</expand> + <padding>4</padding> + <expand>True</expand> <fill>True</fill> </child> <widget> - <class>GtkCheckButton</class> - <name>chkAutoCheckMail</name> - <can_focus>True</can_focus> - <label>Automatically check mail every</label> - <active>False</active> - <draw_indicator>True</draw_indicator> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> - </widget> - - <widget> - <class>GtkSpinButton</class> - <name>spinAutoCheckTimeout</name> - <sensitive>False</sensitive> + <class>GtkEntry</class> + <child_name>GnomeEntry:entry</child_name> + <name>combo-entry1</name> <can_focus>True</can_focus> - <climb_rate>1</climb_rate> - <digits>0</digits> - <numeric>True</numeric> - <update_policy>GTK_UPDATE_ALWAYS</update_policy> - <snap>False</snap> - <wrap>False</wrap> - <value>10</value> - <lower>0</lower> - <upper>100</upper> - <step>1</step> - <page>10</page> - <page_size>10</page_size> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>True</fill> - </child> - </widget> - - <widget> - <class>GtkLabel</class> - <name>lblMinutes</name> - <label>minutes.</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0.5</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> + <editable>True</editable> + <text_visible>True</text_visible> + <text_max_length>0</text_max_length> + <text></text> </widget> </widget> - - <widget> - <class>GtkCheckButton</class> - <name>chkKeepMailOnServer</name> - <can_focus>True</can_focus> - <label>Keep mail on server</label> - <active>False</active> - <draw_indicator>True</draw_indicator> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> - </widget> - - <widget> - <class>GtkCheckButton</class> - <name>chkEnabled</name> - <can_focus>True</can_focus> - <label>Include this account when receiving mail</label> - <active>False</active> - <draw_indicator>True</draw_indicator> - <child> - <padding>0</padding> - <expand>False</expand> - <fill>False</fill> - </child> - </widget> </widget> + </widget> - <widget> - <class>GtkLabel</class> - <child_name>Notebook:tab</child_name> - <name>lblAdvanced</name> - <label>Advanced</label> - <justify>GTK_JUSTIFY_CENTER</justify> - <wrap>False</wrap> - <xalign>0.5</xalign> - <yalign>0.5</yalign> - <xpad>0</xpad> - <ypad>0</ypad> - </widget> + <widget> + <class>GtkLabel</class> + <child_name>Notebook:tab</child_name> + <name>other_config_label</name> + <label>Other</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> </widget> </widget> </widget> diff --git a/mail/mail-config.h b/mail/mail-config.h index f800e48275..5a293ef9ce 100644 --- a/mail/mail-config.h +++ b/mail/mail-config.h @@ -34,7 +34,6 @@ extern "C" { typedef struct { gchar *name; gchar *address; - gchar *reply_to; gchar *organization; gchar *signature; } MailConfigIdentity; @@ -44,9 +43,8 @@ typedef struct { gboolean keep_on_server; gboolean auto_check; gint auto_check_time; - gboolean enabled; - gboolean save_passwd; + gboolean enabled; } MailConfigService; typedef struct { @@ -132,7 +130,7 @@ GSList *mail_config_get_sources (void); /* static utility functions */ char *mail_config_folder_to_cachename (CamelFolder *folder, const char *prefix); -gboolean mail_config_check_service (CamelURL *url, CamelProviderType type, gboolean connect, GList **authtypes); +gboolean mail_config_check_service (const char *url, CamelProviderType type, GList **authtypes); #ifdef __cplusplus } |