aboutsummaryrefslogtreecommitdiffstats
path: root/mail/mail-config.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/mail-config.c')
-rw-r--r--mail/mail-config.c2129
1 files changed, 0 insertions, 2129 deletions
diff --git a/mail/mail-config.c b/mail/mail-config.c
deleted file mode 100644
index 4adec9a78b..0000000000
--- a/mail/mail-config.c
+++ /dev/null
@@ -1,2129 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* mail-config.c: Mail configuration dialogs/wizard. */
-
-/*
- * Authors:
- * Dan Winship <danw@helixcode.com>
- * Jeffrey Stedfast <fejj@helixcode.com>
- *
- * Copyright 2000 Helix Code, Inc. (http://www.helixcode.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 Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include <config.h>
-#include <pwd.h>
-
-#include <gnome.h>
-#include <gtkhtml/gtkhtml.h>
-
-#include "mail.h"
-#include "e-util/e-html-utils.h"
-#include "e-util/e-setup.h"
-
-struct service_type {
- CamelProvider *provider;
- CamelService *service;
- GList *authtypes;
-};
-
-struct identity_record {
- char *name, *address, *organization, *sigfile;
-};
-
-static char *username = NULL;
-
-/* private prototypes - these are ugly, rename some of them? */
-static void html_size_req (GtkWidget *widget, GtkRequisition *requisition);
-static GtkWidget *html_new (gboolean white);
-static void put_html (GtkHTML *html, char *text);
-static void error_dialog (GtkWidget *parent_finder, const char *fmt, ...);
-static void identity_note_doneness (GtkObject *page, gpointer user_data);
-static void prepare_identity (GnomeDruidPage *page, gpointer arg1, gpointer user_data);
-static gboolean identity_next (GnomeDruidPage *page, gpointer arg1, gpointer user_data);
-static void destroy_identity (GtkObject *table, gpointer idrecp);
-static void create_identity_page (GtkWidget *vbox, struct identity_record *idrec);
-static void service_note_doneness (GtkObject *page, gpointer user_data);
-static void prepare_service (GnomeDruidPage *page, gpointer arg1, gpointer user_data);
-static void auth_menuitem_activate (GtkObject *menuitem, GtkHTML *html);
-static void fill_auth_menu (GtkOptionMenu *optionmenu, GtkHTML *html, GList *authtypes);
-static char *get_service_url (GtkObject *table);
-static void set_service_url (GtkObject *table, char *url_str);
-static void autodetect_cb (GtkWidget *button, GtkObject *table);
-static gboolean service_acceptable (GtkNotebook *notebook);
-static gboolean service_next (GnomeDruidPage *page, gpointer arg1, gpointer user_data);
-static void destroy_service (GtkObject *notebook, gpointer urlp);
-static void add_row (GtkWidget *table, int row, const char *label_text, const char *tag, int flag);
-static GtkWidget *create_source (struct service_type *st);
-static GtkWidget *create_transport (struct service_type *st);
-static void stype_menuitem_activate (GtkObject *menuitem, GtkObject *table);
-static void create_service_page (GtkWidget *vbox, const char *label_text, GList *services,
- GtkWidget *(*create_service)(struct service_type *),
- char **urlp);
-static void create_source_page (GtkWidget *vbox, GList *sources, char **urlp);
-static void create_transport_page (GtkWidget *vbox, GList *transports, char **urlp);
-static GList *add_service (GList *services, CamelProviderType type, CamelProvider *prov);
-static GdkImlibImage *load_image (const char *name);
-static void prepare_first (GnomeDruidPage *page, GnomeDruid *druid, gpointer user_data);
-static void cancel (GnomeDruid *druid, gpointer window);
-static void finish (GnomeDruidPage *page, gpointer arg1, gpointer window);
-static void on_cmdIdentityAdd_clicked (GtkWidget *widget, gpointer user_data);
-static void on_cmdIdentityEdit_clicked (GtkWidget *widget, gpointer user_data);
-static void on_cmdIdentityDelete_clicked (GtkWidget *widget, gpointer user_data);
-static void on_cmdSourcesAdd_clicked (GtkWidget *widget, gpointer user_data);
-static void on_cmdSourcesEdit_clicked (GtkWidget *widget, gpointer user_data);
-static void on_cmdSourcesDelete_clicked (GtkWidget *widget, gpointer user_data);
-static void on_cmdCamelServicesOK_clicked (GtkButton *button, gpointer user_data);
-static void on_cmdCamelServicesCancel_clicked (GtkButton *button, gpointer user_data);
-
-
-
-/* HTML Helpers */
-
-static void
-html_size_req (GtkWidget *widget, GtkRequisition *requisition)
-{
- requisition->height = GTK_LAYOUT (widget)->height;
-}
-
-/* Returns a GtkHTML which is already inside a GtkScrolledWindow. If
- * @white is TRUE, the GtkScrolledWindow will be inside a GtkFrame.
- */
-static GtkWidget *
-html_new (gboolean white)
-{
- GtkWidget *html, *scrolled, *frame;
- GtkStyle *style;
-
- html = gtk_html_new ();
- GTK_LAYOUT (html)->height = 0;
- gtk_signal_connect (GTK_OBJECT (html), "size_request",
- GTK_SIGNAL_FUNC (html_size_req), NULL);
- gtk_html_set_editable (GTK_HTML (html), FALSE);
- style = gtk_rc_get_style (html);
- if (style) {
- gtk_html_set_default_background_color (GTK_HTML (html),
- white ? &style->white :
- &style->bg[0]);
- }
- gtk_widget_set_sensitive (html, FALSE);
- scrolled = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
- GTK_POLICY_NEVER,
- GTK_POLICY_NEVER);
- gtk_container_add (GTK_CONTAINER (scrolled), html);
-
- if (white) {
- frame = gtk_frame_new (NULL);
- gtk_frame_set_shadow_type (GTK_FRAME (frame),
- GTK_SHADOW_ETCHED_IN);
- gtk_container_add (GTK_CONTAINER (frame), scrolled);
- gtk_widget_show_all (frame);
- } else
- gtk_widget_show_all (scrolled);
-
- return html;
-}
-
-static void
-put_html (GtkHTML *html, char *text)
-{
- GtkHTMLStream *handle;
-
- text = e_text_to_html (text, E_TEXT_TO_HTML_CONVERT_NL);
- handle = gtk_html_begin (html);
- gtk_html_write (html, handle, "<HTML><BODY>", 12);
- gtk_html_write (html, handle, text, strlen (text));
- gtk_html_write (html, handle, "</BODY></HTML>", 14);
- g_free (text);
- gtk_html_end (html, handle, GTK_HTML_STREAM_OK);
-}
-
-
-/* Error helper */
-static void
-error_dialog (GtkWidget *parent_finder, const char *fmt, ...)
-{
- GtkWidget *parent, *dialog;
- char *msg;
- va_list ap;
-
- parent = gtk_widget_get_ancestor (parent_finder, GTK_TYPE_WINDOW);
-
- va_start (ap, fmt);
- msg = g_strdup_vprintf (fmt, ap);
- va_end (ap);
-
- dialog = gnome_error_dialog_parented (msg, GTK_WINDOW (parent));
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
- g_free (msg);
-}
-
-
-/* Identity page */
-
-static void
-identity_note_doneness (GtkObject *page, gpointer user_data)
-{
- GtkWidget *exit_button;
- GtkEntry *entry;
- char *data;
-
- if (!(exit_button = gtk_object_get_data (page, "exit_button")))
- exit_button = gtk_object_get_data (page, "ok_button");
-
- entry = gtk_object_get_data (page, "name");
- data = gtk_entry_get_text (entry);
- if (data && *data) {
- entry = gtk_object_get_data (page, "addr");
- data = gtk_entry_get_text (entry);
- }
-
- gtk_widget_set_sensitive (exit_button, data && *data);
-}
-
-static void
-prepare_identity (GnomeDruidPage *page, gpointer arg1, gpointer user_data)
-{
- identity_note_doneness (user_data, NULL);
-}
-
-static gboolean
-identity_next (GnomeDruidPage *page, gpointer arg1, gpointer user_data)
-{
- GtkObject *box = user_data;
- GtkEntry *addr = gtk_object_get_data (box, "addr");
- char *data, *at;
-
- /* FIXME: we need more sanity checking than this. */
-
- data = gtk_entry_get_text (addr);
- at = strchr (data, '@');
- if (!at || !strchr (at + 1, '.')) {
- error_dialog (GTK_WIDGET (page), "Email address must be "
- "of the form \"user@domain\".");
- return TRUE;
- }
-
- g_free (username);
- username = g_strndup (data, at - data);
-
- return FALSE;
-}
-
-static void
-destroy_identity (GtkObject *table, gpointer idrecp)
-{
- struct identity_record *idrec = idrecp;
- GtkWidget *entry;
-
- entry = gtk_object_get_data (table, "name");
- idrec->name = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
-
- entry = gtk_object_get_data (table, "addr");
- idrec->address = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
-
- entry = gtk_object_get_data (table, "org");
- idrec->organization = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
-
- entry = gtk_object_get_data (table, "sig");
- idrec->sigfile = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
-}
-
-static void
-create_identity_page (GtkWidget *vbox, struct identity_record *idrec)
-{
- GtkWidget *html, *table;
- GtkWidget *name, *addr, *org, *sig;
- GtkWidget *name_entry, *addr_entry, *org_entry, *sig_entry;
- GtkWidget *hsep;
- char *user;
- struct passwd *pw = NULL;
-
- html = html_new (FALSE);
- put_html (GTK_HTML (html),
- _("Enter your name and email address to be used in "
- "outgoing mail. You may also, optionally, enter the "
- "name of your organization, and the name of a file "
- "to read your signature from."));
- gtk_box_pack_start (GTK_BOX (vbox), html->parent, FALSE, TRUE, 0);
-
- table = gtk_table_new (5, 2, FALSE);
- gtk_widget_set_name (table, "table");
- gtk_table_set_row_spacings (GTK_TABLE (table), 10);
- gtk_table_set_col_spacings (GTK_TABLE (table), 6);
- gtk_container_set_border_width (GTK_CONTAINER (table), 8);
- gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0);
- gtk_signal_connect (GTK_OBJECT (vbox), "destroy",
- GTK_SIGNAL_FUNC (destroy_identity), idrec);
-
- name = gtk_label_new (_("Full name:"));
- gtk_table_attach (GTK_TABLE (table), name, 0, 1, 0, 1,
- GTK_FILL, 0, 0, 0);
- gtk_misc_set_alignment (GTK_MISC (name), 1, 0.5);
-
- name_entry = gtk_entry_new ();
- gtk_table_attach (GTK_TABLE (table), name_entry, 1, 2, 0, 1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
- gtk_object_set_data (GTK_OBJECT (vbox), "name", name_entry);
-
- if (!idrec || !idrec->name) {
- user = getenv ("USER");
- if (user)
- pw = getpwnam (user);
- else
- pw = getpwuid (getuid ());
- }
- if ((idrec && idrec->name) || (pw && pw->pw_gecos && *pw->pw_gecos)) {
- char *name;
-
- if (idrec && idrec->name)
- name = g_strdup (idrec->name);
- else
- name = g_strndup (pw->pw_gecos, strcspn (pw->pw_gecos, ","));
- gtk_entry_set_text (GTK_ENTRY (name_entry), name);
- g_free (name);
- }
-
- addr = gtk_label_new (_("Email address:"));
- gtk_table_attach (GTK_TABLE (table), addr, 0, 1, 1, 2,
- GTK_FILL, 0, 0, 0);
- gtk_misc_set_alignment (GTK_MISC (addr), 1, 0.5);
-
- addr_entry = gtk_entry_new ();
- if (idrec && idrec->address)
- gtk_entry_set_text (GTK_ENTRY (addr_entry), idrec->address);
- gtk_table_attach (GTK_TABLE (table), addr_entry, 1, 2, 1, 2,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
- gtk_object_set_data (GTK_OBJECT (vbox), "addr", addr_entry);
-
- gtk_signal_connect_object (GTK_OBJECT (name_entry), "changed",
- GTK_SIGNAL_FUNC (identity_note_doneness),
- GTK_OBJECT (vbox));
- gtk_signal_connect_object (GTK_OBJECT (addr_entry), "changed",
- GTK_SIGNAL_FUNC (identity_note_doneness),
- GTK_OBJECT (vbox));
-
- hsep = gtk_hseparator_new ();
- gtk_table_attach (GTK_TABLE (table), hsep, 0, 2, 2, 3,
- GTK_FILL, 0, 0, 8);
-
- org = gtk_label_new (_("Organization:"));
- gtk_table_attach (GTK_TABLE (table), org, 0, 1, 3, 4,
- GTK_FILL, 0, 0, 0);
- gtk_misc_set_alignment (GTK_MISC (org), 1, 0.5);
-
- org_entry = gtk_entry_new ();
- if (idrec && idrec->organization)
- gtk_entry_set_text (GTK_ENTRY (org_entry), idrec->organization);
- gtk_table_attach (GTK_TABLE (table), org_entry, 1, 2, 3, 4,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
- gtk_object_set_data (GTK_OBJECT (vbox), "org", org_entry);
-
- sig = gtk_label_new (_("Signature file:"));
- gtk_table_attach (GTK_TABLE (table), sig, 0, 1, 4, 5,
- GTK_FILL, GTK_FILL, 0, 0);
- gtk_misc_set_alignment (GTK_MISC (sig), 1, 0);
-
- sig_entry = gnome_file_entry_new (NULL, _("Signature File"));
- if (idrec && idrec->sigfile)
- gtk_entry_set_text (GTK_ENTRY (sig_entry), idrec->sigfile);
- gtk_table_attach (GTK_TABLE (table), sig_entry, 1, 2, 4, 5,
- GTK_FILL, 0, 0, 0);
- gnome_file_entry_set_default_path (GNOME_FILE_ENTRY (sig_entry),
- g_get_home_dir ());
- gtk_object_set_data (GTK_OBJECT (vbox), "sig",
- gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (sig_entry)));
-
- gtk_widget_show_all (table);
-}
-
-
-/* Source/Transport pages */
-
-static void
-service_note_doneness (GtkObject *page, gpointer user_data)
-{
- GtkObject *box;
- GtkWidget *button;
- GtkEntry *entry;
- char *data;
- gboolean sensitive = TRUE;
-
- entry = gtk_object_get_data (page, "server_entry");
- if (entry) {
- data = gtk_entry_get_text (entry);
- if (!data || !*data)
- sensitive = FALSE;
- }
-
- if (sensitive) {
- entry = gtk_object_get_data (page, "user_entry");
- if (entry) {
- data = gtk_entry_get_text (entry);
- if (!data || !*data)
- sensitive = FALSE;
- }
- }
-
- if (sensitive) {
- entry = gtk_object_get_data (page, "path_entry");
- if (entry) {
- data = gtk_entry_get_text (entry);
- if (!data || !*data)
- sensitive = FALSE;
- }
- }
-
- button = gtk_object_get_data (page, "autodetect");
- if (button)
- gtk_widget_set_sensitive (button, sensitive);
-
- box = gtk_object_get_data (page, "box");
-
- if (!(button = gtk_object_get_data (box, "exit_button")))
- button = gtk_object_get_data (box, "ok_button");
-
- if (button)
- gtk_widget_set_sensitive (button, sensitive);
-}
-
-static void
-prepare_service (GnomeDruidPage *page, gpointer arg1, gpointer user_data)
-{
- GtkObject *box = user_data;
- GtkNotebook *notebook = gtk_object_get_data (box, "notebook");
- GtkWidget *table;
- GtkEntry *entry;
-
- table = gtk_notebook_get_nth_page (notebook,
- gtk_notebook_get_current_page (notebook));
-
- if (username) {
- char *data = NULL;
-
- entry = gtk_object_get_data (GTK_OBJECT (table), "user_entry");
- if (entry) {
- data = gtk_entry_get_text (entry);
- if (!data || !*data)
- gtk_entry_set_text (entry, username);
- }
- }
-
- service_note_doneness (GTK_OBJECT (table), NULL);
-}
-
-static void
-auth_menuitem_activate (GtkObject *menuitem, GtkHTML *html)
-{
- CamelServiceAuthType *authtype;
-
- authtype = gtk_object_get_data (menuitem, "authtype");
- put_html (html, authtype->description);
-}
-
-static void
-fill_auth_menu (GtkOptionMenu *optionmenu, GtkHTML *html, GList *authtypes)
-{
- CamelServiceAuthType *authtype;
- GtkWidget *menu, *item, *firstitem = NULL;
-
- menu = gtk_menu_new ();
- gtk_option_menu_set_menu (optionmenu, menu);
- for (; authtypes; authtypes = authtypes->next) {
- authtype = authtypes->data;
- item = gtk_menu_item_new_with_label (_(authtype->name));
- if (!firstitem)
- firstitem = item;
- gtk_menu_append (GTK_MENU (menu), item);
- gtk_object_set_data (GTK_OBJECT (item), "authtype", authtype);
- gtk_signal_connect (GTK_OBJECT (item), "activate",
- GTK_SIGNAL_FUNC (auth_menuitem_activate),
- html);
- }
- gtk_widget_show_all (menu);
- gtk_option_menu_set_history (optionmenu, 0);
- if (firstitem)
- auth_menuitem_activate (GTK_OBJECT (firstitem), html);
-}
-
-static char *
-get_service_url (GtkObject *table)
-{
- CamelURL *url;
- GtkEditable *editable;
- GtkOptionMenu *auth_optionmenu;
- char *url_str;
-
- url = g_new0 (CamelURL, 1);
- url->protocol = g_strdup (gtk_object_get_data (table, "protocol"));
- editable = gtk_object_get_data (table, "user_entry");
- if (editable)
- url->user = gtk_editable_get_chars (editable, 0, -1);
- editable = gtk_object_get_data (table, "server_entry");
- if (editable)
- url->host = gtk_editable_get_chars (editable, 0, -1);
- editable = gtk_object_get_data (table, "path_entry");
- if (editable)
- url->path = gtk_editable_get_chars (editable, 0, -1);
-
- auth_optionmenu = gtk_object_get_data (table, "auth_optionmenu");
- if (auth_optionmenu) {
- GtkWidget *menu, *item;
- CamelServiceAuthType *authtype;
-
- menu = gtk_option_menu_get_menu (auth_optionmenu);
- if (menu) {
- item = gtk_menu_get_active (GTK_MENU (menu));
- authtype = gtk_object_get_data (GTK_OBJECT (item),
- "authtype");
- if (*authtype->authproto)
- url->authmech = g_strdup (authtype->authproto);
- }
- }
-
- url_str = camel_url_to_string (url, FALSE);
- camel_url_free (url);
- return url_str;
-}
-
-static void
-set_service_url (GtkObject *table, char *url_str)
-{
- CamelURL *url;
- GtkEditable *editable;
- GtkOptionMenu *auth_optionmenu;
- CamelException *ex;
-
- g_return_if_fail (table != NULL);
- g_return_if_fail (url_str != NULL);
-
- ex = camel_exception_new ();
-
- url = camel_url_new (url_str, ex);
- if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) {
- camel_exception_free (ex);
- return;
- }
-
- editable = gtk_object_get_data (table, "user_entry");
- if (editable && url)
- gtk_entry_set_text (GTK_ENTRY (editable), url->user);
-
- editable = gtk_object_get_data (table, "server_entry");
- if (editable && url)
- gtk_entry_set_text (GTK_ENTRY (editable), url->host);
-
- editable = gtk_object_get_data (table, "path_entry");
- if (editable && url)
- gtk_entry_set_text (GTK_ENTRY (editable), url->path);
-
- /* How are we gonna do this? */
- auth_optionmenu = gtk_object_get_data (table, "auth_optionmenu");
- if (auth_optionmenu) {
-#if 0
- GtkWidget *menu, *item;
- CamelServiceAuthType *authtype;
-
- menu = gtk_option_menu_get_menu (auth_optionmenu);
- if (menu) {
- item = gtk_menu_get_active (GTK_MENU (menu));
- authtype = gtk_object_get_data (GTK_OBJECT (item),
- "authtype");
- if (*authtype->authproto)
- url->authmech = g_strdup (authtype->authproto);
- }
-#endif
- }
-
- camel_exception_free (ex);
- camel_url_free (url);
-}
-
-static void
-autodetect_cb (GtkWidget *button, GtkObject *table)
-{
- char *url;
- CamelException *ex;
- CamelService *service;
- GList *authtypes;
- GtkHTML *html;
- GtkOptionMenu *optionmenu;
- int type;
-
- type = GPOINTER_TO_UINT (gtk_object_get_data (table, "service_type"));
- url = get_service_url (table);
-
- ex = camel_exception_new ();
- service = camel_session_get_service (session, url, type, ex);
- g_free (url);
- if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE)
- goto error;
-
- authtypes = camel_service_query_auth_types (service, ex);
- if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE)
- goto error;
-
- html = gtk_object_get_data (table, "auth_html");
- optionmenu = gtk_object_get_data (table, "auth_optionmenu");
- fill_auth_menu (optionmenu, html, authtypes);
- camel_exception_free (ex);
- return;
-
- error:
- error_dialog (button, "Could not detect supported authentication "
- "types:\n%s", camel_exception_get_description (ex));
- camel_exception_free (ex);
-}
-
-static gboolean
-service_acceptable (GtkNotebook *notebook)
-{
- char *url;
- GtkWidget *table;
- GtkToggleButton *check;
- int page, type;
- CamelService *service;
- CamelException *ex;
- gboolean ok;
-
- page = gtk_notebook_get_current_page (notebook);
- table = gtk_notebook_get_nth_page (notebook, page);
- check = gtk_object_get_data (GTK_OBJECT (table), "check");
-
- if (!check || !gtk_toggle_button_get_active (check))
- return TRUE;
-
- type = GPOINTER_TO_UINT (gtk_object_get_data (GTK_OBJECT (table),
- "service_type"));
- url = get_service_url (GTK_OBJECT (table));
-
- ex = camel_exception_new ();
- camel_exception_clear (ex);
- service = camel_session_get_service (session, url, type, ex);
- g_free (url);
-
- if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE)
- goto error;
-
- ok = camel_service_connect (service, ex);
-
- if (ok) {
- camel_service_disconnect (service, ex);
- gtk_object_unref (GTK_OBJECT (service));
- camel_exception_free (ex);
- return TRUE;
- }
-
- gtk_object_unref (GTK_OBJECT (service));
-
- error:
- error_dialog (GTK_WIDGET (notebook), camel_exception_get_description (ex));
- camel_exception_free (ex);
- return FALSE;
-}
-
-static gboolean
-service_next (GnomeDruidPage *page, gpointer arg1, gpointer user_data)
-{
- return !service_acceptable (user_data);
-}
-
-static void
-destroy_service (GtkObject *notebook, gpointer urlp)
-{
- char **url = urlp;
- GtkWidget *table;
- int page;
-
- page = gtk_notebook_get_current_page (GTK_NOTEBOOK (notebook));
- table = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), page);
- *url = get_service_url (GTK_OBJECT (table));
-}
-
-static void
-add_row (GtkWidget *table, int row, const char *label_text,
- const char *tag, int flag)
-{
- GtkWidget *label, *entry;
-
- label = gtk_label_new (label_text);
- gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row + 1,
- GTK_FILL, 0, 0, 0);
- gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
-
- entry = gtk_entry_new ();
- gtk_table_attach (GTK_TABLE (table), entry, 1, 3, row, row + 1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
- gtk_signal_connect_object (GTK_OBJECT (entry), "changed",
- GTK_SIGNAL_FUNC (service_note_doneness),
- GTK_OBJECT (table));
- gtk_object_set_data (GTK_OBJECT (table), tag, entry);
-}
-
-static GtkWidget *
-create_source (struct service_type *st)
-{
- GtkWidget *table;
- GtkWidget *auth, *auth_optionmenu, *auth_html;
- GtkWidget *autodetect;
- int row, service_flags;
-
- table = gtk_table_new (5, 3, FALSE);
- gtk_table_set_row_spacings (GTK_TABLE (table), 2);
- gtk_table_set_col_spacings (GTK_TABLE (table), 10);
- gtk_container_set_border_width (GTK_CONTAINER (table), 8);
- gtk_object_set_data (GTK_OBJECT (table), "protocol",
- st->provider->protocol);
- gtk_object_set_data (GTK_OBJECT (table), "service_type",
- GUINT_TO_POINTER (CAMEL_PROVIDER_STORE));
-
- row = 0;
- service_flags = st->service->url_flags & ~CAMEL_SERVICE_URL_NEED_AUTH;
-
- if (service_flags & CAMEL_SERVICE_URL_NEED_HOST) {
- add_row (table, row, _("Server:"), "server_entry",
- CAMEL_SERVICE_URL_NEED_HOST);
- row++;
- }
-
- if (service_flags & CAMEL_SERVICE_URL_NEED_USER) {
- add_row (table, row, _("Username:"), "user_entry",
- CAMEL_SERVICE_URL_NEED_USER);
- row++;
- }
-
- if (service_flags & CAMEL_SERVICE_URL_NEED_PATH) {
- add_row (table, row, _("Path:"), "path_entry",
- CAMEL_SERVICE_URL_NEED_PATH);
- row++;
- }
-
- if (st->authtypes) {
- auth = gtk_label_new (_("Authentication:"));
- gtk_table_attach (GTK_TABLE (table), auth, 0, 1,
- row, row + 1, GTK_FILL, 0, 0, 0);
- gtk_misc_set_alignment (GTK_MISC (auth), 1, 0.5);
-
- auth_optionmenu = gtk_option_menu_new ();
- gtk_table_attach (GTK_TABLE (table), auth_optionmenu, 1, 2,
- row, row + 1, GTK_FILL | GTK_EXPAND,
- 0, 0, 0);
- gtk_object_set_data (GTK_OBJECT (table), "auth_optionmenu",
- auth_optionmenu);
-
- autodetect = gtk_button_new_with_label (_("Detect supported types..."));
- gtk_table_attach (GTK_TABLE (table), autodetect, 2, 3,
- row, row + 1, 0, 0, 0, 0);
- gtk_widget_set_sensitive (autodetect, FALSE);
- gtk_signal_connect (GTK_OBJECT (autodetect), "clicked",
- GTK_SIGNAL_FUNC (autodetect_cb), table);
- gtk_object_set_data (GTK_OBJECT (table), "autodetect",
- autodetect);
-
- auth_html = html_new (TRUE);
- gtk_table_attach (GTK_TABLE (table), auth_html->parent->parent,
- 0, 3, row + 1, row + 2,
- GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
- gtk_object_set_data (GTK_OBJECT (table), "auth_html",
- auth_html);
-
- fill_auth_menu (GTK_OPTION_MENU (auth_optionmenu),
- GTK_HTML (auth_html), st->authtypes);
-
- row += 2;
- }
-
- if (row != 0) {
- GtkWidget *check;
-
- check = gtk_check_button_new_with_label (
- _("Test these values before continuing"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
- gtk_table_attach (GTK_TABLE (table), check, 0, 3,
- row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
- gtk_object_set_data (GTK_OBJECT (table), "check", check);
- row += 1;
- }
-
- gtk_table_resize (GTK_TABLE (table), row, 3);
- gtk_widget_show_all (table);
-
- return table;
-}
-
-static GtkWidget *
-create_transport (struct service_type *st)
-{
- GtkWidget *table;
- GtkWidget *auth, *auth_optionmenu, *auth_html;
- GtkWidget *autodetect;
- int row, service_flags;
-
- table = gtk_table_new (5, 3, FALSE);
- gtk_table_set_row_spacings (GTK_TABLE (table), 2);
- gtk_table_set_col_spacings (GTK_TABLE (table), 10);
- gtk_container_set_border_width (GTK_CONTAINER (table), 8);
- gtk_object_set_data (GTK_OBJECT (table), "protocol",
- st->provider->protocol);
- gtk_object_set_data (GTK_OBJECT (table), "service_type",
- GUINT_TO_POINTER (CAMEL_PROVIDER_TRANSPORT));
-
- row = 0;
- service_flags = st->service->url_flags & ~CAMEL_SERVICE_URL_NEED_AUTH;
-
- if (service_flags & CAMEL_SERVICE_URL_NEED_HOST) {
- add_row (table, row, _("Server:"), "server_entry",
- CAMEL_SERVICE_URL_NEED_HOST);
- row++;
- }
-
- if (st->authtypes) {
- auth = gtk_label_new (_("Authentication:"));
- gtk_table_attach (GTK_TABLE (table), auth, 0, 1,
- row, row + 1, GTK_FILL, 0, 0, 0);
- gtk_misc_set_alignment (GTK_MISC (auth), 1, 0.5);
-
- auth_optionmenu = gtk_option_menu_new ();
- gtk_table_attach (GTK_TABLE (table), auth_optionmenu, 1, 2,
- row, row + 1, GTK_FILL | GTK_EXPAND,
- 0, 0, 0);
- gtk_object_set_data (GTK_OBJECT (table), "auth_optionmenu",
- auth_optionmenu);
-
- autodetect = gtk_button_new_with_label (_("Detect supported types..."));
- gtk_table_attach (GTK_TABLE (table), autodetect, 2, 3,
- row, row + 1, 0, 0, 0, 0);
- gtk_widget_set_sensitive (autodetect, FALSE);
- gtk_object_set_data (GTK_OBJECT (table), "autodetect",
- autodetect);
-
- auth_html = html_new (TRUE);
- gtk_table_attach (GTK_TABLE (table), auth_html->parent->parent,
- 0, 3, row + 1, row + 2,
- GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
- fill_auth_menu (GTK_OPTION_MENU (auth_optionmenu),
- GTK_HTML (auth_html), st->authtypes);
-
- row += 2;
- }
-
- if (row != 0) {
- GtkWidget *check;
-
- check = gtk_check_button_new_with_label (
- _("Test these values before continuing"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
- gtk_table_attach (GTK_TABLE (table), check, 0, 3,
- row, row + 1, GTK_FILL | GTK_EXPAND,
- GTK_FILL, 0, 0);
- gtk_object_set_data (GTK_OBJECT (table), "check", check);
- row += 1;
- }
-
- gtk_table_resize (GTK_TABLE (table), row, 3);
- gtk_widget_show_all (table);
-
- return table;
-}
-
-static void
-stype_menuitem_activate (GtkObject *menuitem, GtkObject *table)
-{
- GtkHTML *html;
- char *text;
- int page;
- GtkNotebook *notebook;
-
- text = gtk_object_get_data (menuitem, "description");
- html = gtk_object_get_data (table, "html");
- put_html (html, text);
-
- page = GPOINTER_TO_UINT (gtk_object_get_data (menuitem, "page"));
- notebook = gtk_object_get_data (table, "notebook");
- gtk_notebook_set_page (notebook, page);
- service_note_doneness (GTK_OBJECT (gtk_notebook_get_nth_page (notebook,
- page)),
- NULL);
-}
-
-/* Create the mail source/transport page. */
-static void
-create_service_page (GtkWidget *vbox, const char *label_text, GList *services,
- GtkWidget *(*create_service)(struct service_type *),
- char **urlp)
-{
- GtkWidget *hbox, *stype, *stype_optionmenu, *stype_menu;
- GtkWidget *menuitem, *first_menuitem = NULL;
- GtkWidget *stype_html, *notebook, *service;
- int page;
- GList *s;
-
- hbox = gtk_hbox_new (FALSE, 8);
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
-
- stype = gtk_label_new (label_text);
- gtk_box_pack_start (GTK_BOX (hbox), stype, FALSE, FALSE, 0);
- gtk_misc_set_alignment (GTK_MISC (stype), 1, 0.5);
-
- stype_optionmenu = gtk_option_menu_new ();
- gtk_object_set_data (GTK_OBJECT (vbox), "stype_optionmenu", stype_optionmenu);
- gtk_box_pack_start (GTK_BOX (hbox), stype_optionmenu, TRUE, TRUE, 0);
- stype_menu = gtk_menu_new ();
- gtk_option_menu_set_menu (GTK_OPTION_MENU (stype_optionmenu), stype_menu);
-
- stype_html = html_new (TRUE);
- gtk_object_set_data (GTK_OBJECT (vbox), "html", stype_html);
- gtk_box_pack_start (GTK_BOX (vbox), stype_html->parent->parent,
- TRUE, TRUE, 0);
-
- notebook = gtk_notebook_new ();
- gtk_notebook_set_show_tabs (GTK_NOTEBOOK (notebook), FALSE);
- gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0);
- gtk_object_set_data (GTK_OBJECT (vbox), "notebook", notebook);
- gtk_signal_connect (GTK_OBJECT (notebook), "destroy",
- GTK_SIGNAL_FUNC (destroy_service), urlp);
-
- for (s = services, page = 0; s; s = s->next, page++) {
- struct service_type *st = s->data;
-
- menuitem = gtk_menu_item_new_with_label (_(st->provider->name));
- if (!first_menuitem)
- first_menuitem = menuitem;
- gtk_object_set_data (GTK_OBJECT (vbox), st->provider->name, menuitem);
- gtk_signal_connect (GTK_OBJECT (menuitem), "activate",
- GTK_SIGNAL_FUNC (stype_menuitem_activate),
- vbox);
- gtk_menu_append (GTK_MENU (stype_menu), menuitem);
-
- service = (*create_service) (st);
- gtk_notebook_append_page (GTK_NOTEBOOK (notebook), service, NULL);
- gtk_object_set_data (GTK_OBJECT (service), "box", vbox);
-
- gtk_object_set_data (GTK_OBJECT (menuitem), "page",
- GUINT_TO_POINTER (page));
- gtk_object_set_data (GTK_OBJECT (menuitem), "description",
- st->provider->description);
- }
-
- stype_menuitem_activate (GTK_OBJECT (first_menuitem), GTK_OBJECT (vbox));
- gtk_option_menu_set_history (GTK_OPTION_MENU (stype_optionmenu), 0);
-
- gtk_widget_show_all (vbox);
-}
-
-static void
-create_source_page (GtkWidget *vbox, GList *sources, char **urlp)
-{
- GtkWidget *html;
-
- html = html_new (FALSE);
- put_html (GTK_HTML (html),
- _("Select the kind of mail server you have, and enter "
- "the relevant information about it.\n\nIf the server "
- "requires authentication, you can click the "
- "\"Detect supported types...\" button after entering "
- "the other information."));
- gtk_box_pack_start (GTK_BOX (vbox), html->parent, FALSE, TRUE, 0);
-
- create_service_page (vbox, "Mail source type:", sources,
- create_source, urlp);
-}
-
-static void
-create_transport_page (GtkWidget *vbox, GList *transports, char **urlp)
-{
- GtkWidget *html, *optionmenu, *menuitem;
-
- html = html_new (FALSE);
- put_html (GTK_HTML (html),
- _("Select the method you would like to use to deliver your mail."));
- gtk_box_pack_start (GTK_BOX (vbox), html->parent, FALSE, TRUE, 0);
-
- create_service_page (vbox, "Mail transport type:", transports,
- create_transport, urlp);
-
- optionmenu = gtk_object_get_data (GTK_OBJECT (vbox), "stype_optionmenu");
-
- if (*urlp && !strncasecmp(*urlp, "sendmail", 8)) {
- menuitem = gtk_object_get_data (GTK_OBJECT (vbox), "Sendmail");
- gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 1);
- } else {
- menuitem = gtk_object_get_data (GTK_OBJECT (vbox), "SMTP");
- gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 0);
- }
-
- stype_menuitem_activate (GTK_OBJECT (menuitem), GTK_OBJECT (vbox));
-}
-
-
-/* Generic stuff */
-
-static GList *
-add_service (GList *services, CamelProviderType type, CamelProvider *prov)
-{
- CamelService *service;
- CamelException *ex;
- char *url;
- struct service_type *st;
-
- ex = camel_exception_new ();
-
- url = g_strdup_printf ("%s:", prov->protocol);
- service = camel_session_get_service (session, url, type, ex);
- g_free (url);
- if (!service) {
- camel_exception_free (ex);
- return services;
- }
-
- st = g_new (struct service_type, 1);
- st->provider = prov;
- st->service = service;
- st->authtypes = camel_service_query_auth_types (st->service, ex);
- camel_exception_free (ex);
-
- return g_list_append (services, st);
-}
-
-static GdkImlibImage *
-load_image (const char *name)
-{
- char *path;
- GdkImlibImage *image;
-
- path = g_strdup_printf ("/usr/local/share/images/evolution/%s", name);
- image = gdk_imlib_load_image (path);
- g_free (path);
-
- return image;
-}
-
-static void
-prepare_first (GnomeDruidPage *page, GnomeDruid *druid, gpointer user_data)
-{
- gnome_druid_set_buttons_sensitive (druid, TRUE, TRUE, TRUE);
-}
-
-static struct identity_record idrec;
-static char *source = NULL, *transport = NULL;
-static gboolean format = FALSE;
-
-static void
-cancel (GnomeDruid *druid, gpointer window)
-{
- gtk_window_set_modal (window, FALSE);
- gtk_widget_destroy (window);
- gtk_main_quit ();
-}
-
-static void
-write_config (void)
-{
- char *path;
-
- /* According to the API docs, there's an easier way to do this,
- * except that it doesn't work. Anyway, this will be replaced
- * by GConf eventually. FIXME.
- */
-
- path = g_strdup_printf ("=%s/config=/mail/configured", evolution_dir);
- gnome_config_set_bool (path, TRUE);
- g_free (path);
-
- path = g_strdup_printf ("=%s/config=/mail/id_name", evolution_dir);
- gnome_config_set_string (path, idrec.name);
- g_free (path);
-
- path = g_strdup_printf ("=%s/config=/mail/id_addr", evolution_dir);
- gnome_config_set_string (path, idrec.address);
- g_free (path);
-
- path = g_strdup_printf ("=%s/config=/mail/id_org", evolution_dir);
- gnome_config_set_string (path, idrec.organization);
- g_free (path);
-
- path = g_strdup_printf ("=%s/config=/mail/id_sig", evolution_dir);
- gnome_config_set_string (path, idrec.sigfile);
- g_free (path);
-
- path = g_strdup_printf ("=%s/config=/mail/source", evolution_dir);
- gnome_config_set_string (path, source);
- g_free (path);
-
- path = g_strdup_printf ("=%s/config=/mail/transport", evolution_dir);
- gnome_config_set_string (path, transport);
- g_free (path);
-
- path = g_strdup_printf ("=%s/config=/mail/msg_format", evolution_dir);
- gnome_config_set_string (path, format ? "alternative" : "plain");
- g_free (path);
-
- gnome_config_sync ();
-}
-
-static void
-finish (GnomeDruidPage *page, gpointer arg1, gpointer window)
-{
- cancel (arg1, window);
- write_config();
-}
-
-void
-mail_config_druid (void)
-{
- GnomeDruid *druid;
- GtkWidget *page, *window;
- GnomeDruidPageStandard *dpage;
- GList *providers, *p, *sources, *transports;
- GdkImlibImage *mail_logo, *identity_logo;
- GdkImlibImage *source_logo, *transport_logo;
-
- /* Fetch list of all providers. */
- providers = camel_session_list_providers (session, TRUE);
- sources = transports = NULL;
- for (p = providers; p; p = p->next) {
- CamelProvider *prov = p->data;
-
- if (strcmp (prov->domain, "mail") != 0)
- continue;
-
- if (prov->object_types[CAMEL_PROVIDER_STORE]) {
- sources = add_service (sources,
- CAMEL_PROVIDER_STORE,
- prov);
- } else if (prov->object_types[CAMEL_PROVIDER_TRANSPORT]) {
- transports = add_service (transports,
- CAMEL_PROVIDER_TRANSPORT,
- prov);
- }
- }
-
- mail_logo = load_image ("evolution-inbox.png");
- identity_logo = load_image ("malehead.png");
- source_logo = mail_logo;
- transport_logo = load_image ("envelope.png");
-
- window = gtk_window_new (GTK_WINDOW_DIALOG);
- druid = GNOME_DRUID (gnome_druid_new ());
- gtk_signal_connect (GTK_OBJECT (druid), "cancel",
- GTK_SIGNAL_FUNC (cancel), window);
-
- /* Start page */
- page = gnome_druid_page_start_new_with_vals (
- _("Mail Configuration"),
- "Welcome to the Evolution Mail configuration wizard!\n"
- "By filling in some information about your email\n"
- "settings,you can start sending and receiving email\n"
- "right away. Click \"Next\" to continue.",
- mail_logo, NULL);
-
- gnome_druid_page_start_set_logo_bg_color (
- GNOME_DRUID_PAGE_START (page),
- &GNOME_DRUID_PAGE_START (page)->background_color);
- gnome_druid_append_page (druid, GNOME_DRUID_PAGE (page));
- gtk_signal_connect (GTK_OBJECT (page), "prepare",
- GTK_SIGNAL_FUNC (prepare_first), NULL);
- gtk_widget_show_all (page);
-
-
- /* Identity page */
- page = gnome_druid_page_standard_new_with_vals (_("Identity"),
- identity_logo);
- dpage = GNOME_DRUID_PAGE_STANDARD (page);
- gnome_druid_page_standard_set_logo_bg_color (dpage,
- &dpage->background_color);
- gtk_container_set_border_width (GTK_CONTAINER (dpage->vbox), 8);
- gtk_box_set_spacing (GTK_BOX (dpage->vbox), 5);
- create_identity_page (dpage->vbox, &idrec);
- gtk_object_set_data (GTK_OBJECT (dpage->vbox), "exit_button",
- druid->next);
- gnome_druid_append_page (druid, GNOME_DRUID_PAGE (page));
- gtk_signal_connect (GTK_OBJECT (page), "prepare",
- GTK_SIGNAL_FUNC (prepare_identity), dpage->vbox);
- gtk_signal_connect (GTK_OBJECT (page), "next",
- GTK_SIGNAL_FUNC (identity_next), dpage->vbox);
- gtk_widget_show (page);
-
-
- /* Source page */
- page = gnome_druid_page_standard_new_with_vals (_("Mail Source"),
- source_logo);
- dpage = GNOME_DRUID_PAGE_STANDARD (page);
- gnome_druid_page_standard_set_logo_bg_color (dpage,
- &dpage->background_color);
- gtk_container_set_border_width (GTK_CONTAINER (dpage->vbox), 8);
- gtk_box_set_spacing (GTK_BOX (dpage->vbox), 5);
- create_source_page (dpage->vbox, sources, &source);
- gtk_object_set_data (GTK_OBJECT (dpage->vbox), "exit_button",
- druid->next);
- gnome_druid_append_page (druid, GNOME_DRUID_PAGE (page));
- gtk_signal_connect (GTK_OBJECT (page), "prepare",
- GTK_SIGNAL_FUNC (prepare_service), dpage->vbox);
- gtk_signal_connect (GTK_OBJECT (page), "next",
- GTK_SIGNAL_FUNC (service_next),
- gtk_object_get_data (GTK_OBJECT (dpage->vbox),
- "notebook"));
- gtk_widget_show (page);
-
-
- /* Transport page */
- page = gnome_druid_page_standard_new_with_vals (_("Mail Transport"),
- transport_logo);
- dpage = GNOME_DRUID_PAGE_STANDARD (page);
- gnome_druid_page_standard_set_logo_bg_color (dpage,
- &dpage->background_color);
- gtk_container_set_border_width (GTK_CONTAINER (dpage->vbox), 8);
- gtk_box_set_spacing (GTK_BOX (dpage->vbox), 5);
- create_transport_page (dpage->vbox, transports, &transport);
- gtk_object_set_data (GTK_OBJECT (dpage->vbox), "exit_button",
- druid->next);
- gnome_druid_append_page (druid, GNOME_DRUID_PAGE (page));
- gtk_signal_connect (GTK_OBJECT (page), "prepare",
- GTK_SIGNAL_FUNC (prepare_service), dpage->vbox);
- gtk_signal_connect (GTK_OBJECT (page), "next",
- GTK_SIGNAL_FUNC (service_next),
- gtk_object_get_data (GTK_OBJECT (dpage->vbox),
- "notebook"));
- gtk_widget_show (page);
-
-
- /* Finish page */
- page = gnome_druid_page_finish_new_with_vals (
- _("Mail Configuration"),
- "Your email configuration is now complete.\n"
- "Click \"finish\" to save your new settings",
- mail_logo, NULL);
- gnome_druid_page_finish_set_logo_bg_color (
- GNOME_DRUID_PAGE_FINISH (page),
- &GNOME_DRUID_PAGE_FINISH (page)->background_color);
- gnome_druid_append_page (druid, GNOME_DRUID_PAGE (page));
- gtk_signal_connect (GTK_OBJECT (page), "finish",
- GTK_SIGNAL_FUNC (finish), window);
- gtk_widget_show_all (page);
-
- gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (druid));
-
- gtk_widget_show (GTK_WIDGET (druid));
- gtk_widget_show (window);
- gtk_widget_queue_resize (window);
- gnome_druid_set_buttons_sensitive (druid, FALSE, TRUE, TRUE);
-
- gtk_window_set_modal (GTK_WINDOW (window), TRUE);
- gtk_main ();
-}
-
-static gint identity_row = -1;
-static gint source_row = -1;
-
-struct identity_dialog_data {
- GtkWidget *clist;
- struct identity_record *idrec;
- gboolean new_entry;
-};
-
-struct source_dialog_data {
- GtkWidget *clist;
- char *source;
- gboolean new_entry;
-};
-
-
-static void
-on_cmdIdentityConfigDialogOK_clicked (GtkWidget *dialog, gpointer user_data)
-{
- struct identity_dialog_data *data = user_data;
- GtkWidget *vbox = gtk_object_get_data (GTK_OBJECT (dialog), "vbox");
-
- destroy_identity (GTK_OBJECT (vbox), data->idrec);
-
- gtk_clist_set_text (GTK_CLIST (data->clist), identity_row, 0, data->idrec->name);
- gtk_clist_set_text (GTK_CLIST (data->clist), identity_row, 1, data->idrec->address);
- gtk_clist_set_text (GTK_CLIST (data->clist), identity_row, 2, data->idrec->organization);
- gtk_clist_set_text (GTK_CLIST (data->clist), identity_row, 3, data->idrec->sigfile);
-
- gtk_clist_set_row_data (GTK_CLIST (data->clist), identity_row,
- g_memdup (data->idrec, sizeof (struct identity_record)));
-}
-
-static void
-on_cmdIdentityConfigDialogCancel_clicked (GtkWidget *dialog, gpointer user_data)
-{
- struct identity_dialog_data *data = user_data;
- int max_row;
-
- if (data && data->new_entry) {
- gtk_clist_remove (GTK_CLIST (data->clist), identity_row);
- max_row = GTK_CLIST (data->clist)->rows - 1;
- identity_row = identity_row > max_row ? max_row : identity_row;
- gtk_clist_select_row (GTK_CLIST (data->clist), identity_row, 0);
- }
-}
-
-static void
-on_IdentityConfigDialogButton_clicked (GnomeDialog *dialog, int button, gpointer user_data)
-{
- switch (button) {
- case 0: /* OK clicked */
- g_print ("OK clicked\n");
- on_cmdIdentityConfigDialogOK_clicked (GTK_WIDGET (dialog), user_data);
- break;
- case 1: /* Cancel clicked */
- g_print ("Cancel clicked\n");
- on_cmdIdentityConfigDialogCancel_clicked (GTK_WIDGET (dialog), user_data);
- break;
- }
-
- if (button != -1)
- gnome_dialog_close (dialog);
-}
-
-static GtkWidget*
-create_identity_config_dialog (gboolean edit_mode, struct identity_record *idrecp, GtkWidget *clist)
-{
- GtkWidget *config_dialog;
- GtkWidget *dialog_vbox1;
- GtkWidget *dialog_action_area1;
- GtkWidget *cmdConfigDialogOK;
- GtkWidget *cmdConfigDialogCancel;
- GtkWidget *vbox;
- struct identity_dialog_data *data = NULL;
-
- if (edit_mode)
- config_dialog = gnome_dialog_new (_("Edit Identity"), NULL);
- else
- config_dialog = gnome_dialog_new (_("Add Identity"), NULL);
- gtk_window_set_modal (GTK_WINDOW (config_dialog), TRUE);
- gtk_widget_set_name (config_dialog, "config_dialog");
- gtk_object_set_data (GTK_OBJECT (config_dialog), "config_dialog", config_dialog);
- gtk_window_set_policy (GTK_WINDOW (config_dialog), TRUE, TRUE, FALSE);
-
- dialog_vbox1 = GNOME_DIALOG (config_dialog)->vbox;
- gtk_widget_set_name (dialog_vbox1, "dialog_vbox1");
- gtk_object_set_data (GTK_OBJECT (config_dialog), "dialog_vbox1", dialog_vbox1);
- gtk_widget_show (dialog_vbox1);
-
- dialog_action_area1 = GNOME_DIALOG (config_dialog)->action_area;
- gtk_widget_set_name (dialog_action_area1, "dialog_action_area1");
- gtk_object_set_data (GTK_OBJECT (config_dialog), "dialog_action_area1", dialog_action_area1);
- gtk_widget_show (dialog_action_area1);
- gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
- gtk_button_box_set_spacing (GTK_BUTTON_BOX (dialog_action_area1), 8);
-
- /* Create the vbox that we will pack the identity widget into */
- vbox = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (vbox, "vbox");
- gtk_object_set_data (GTK_OBJECT (config_dialog), "vbox", vbox);
- gtk_widget_ref (vbox);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "vbox", vbox,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (vbox);
- gtk_box_pack_start (GTK_BOX (dialog_vbox1), vbox, TRUE, TRUE, 0);
-
- gnome_dialog_append_button (GNOME_DIALOG (config_dialog), GNOME_STOCK_BUTTON_OK);
- cmdConfigDialogOK = g_list_last (GNOME_DIALOG (config_dialog)->buttons)->data;
- gtk_widget_set_name (cmdConfigDialogOK, "cmdConfigDialogOK");
- gtk_object_set_data (GTK_OBJECT (vbox), "ok_button", cmdConfigDialogOK);
- gtk_widget_ref (cmdConfigDialogOK);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "cmdConfigDialogOK", cmdConfigDialogOK,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (cmdConfigDialogOK);
- GTK_WIDGET_SET_FLAGS (cmdConfigDialogOK, GTK_CAN_DEFAULT);
- gtk_widget_set_sensitive (cmdConfigDialogOK, FALSE);
-
- gnome_dialog_append_button (GNOME_DIALOG (config_dialog), GNOME_STOCK_BUTTON_CANCEL);
- cmdConfigDialogCancel = g_list_last (GNOME_DIALOG (config_dialog)->buttons)->data;
- gtk_widget_set_name (cmdConfigDialogCancel, "cmdConfigDialogCancel");
- gtk_widget_ref (cmdConfigDialogCancel);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "cmdConfigDialogCancel", cmdConfigDialogCancel,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (cmdConfigDialogCancel);
- GTK_WIDGET_SET_FLAGS (cmdConfigDialogCancel, GTK_CAN_DEFAULT);
-
- /* create/pack our Identity widget */
- create_identity_page (vbox, &idrec);
-
- /*gtk_signal_disconnect_by_func (GTK_OBJECT (vbox), GTK_SIGNAL_FUNC (destroy_identity), NULL);*/
-
- data = g_malloc0 (sizeof (struct identity_dialog_data));
- data->clist = clist;
- data->idrec = idrecp;
- data->new_entry = !edit_mode;
-
- gtk_signal_connect(GTK_OBJECT (config_dialog), "clicked",
- GTK_SIGNAL_FUNC (on_IdentityConfigDialogButton_clicked),
- data);
- /*
- gtk_signal_connect (GTK_OBJECT (cmdConfigDialogOK), "clicked",
- GTK_SIGNAL_FUNC (on_cmdIdentityConfigDialogOK_clicked),
- data);
-
- gtk_signal_connect (GTK_OBJECT (cmdConfigDialogCancel), "clicked",
- GTK_SIGNAL_FUNC (on_cmdIdentityConfigDialogCancel_clicked),
- data);
- */
-
- return config_dialog;
-}
-
-static void
-on_SourceConfigDialogButton_clicked (GnomeDialog *dialog, int button, gpointer user_data)
-{
- struct source_dialog_data *data = user_data;
- GtkWidget *vbox;
- GtkWidget *notebook;
- int max_row;
-
- switch (button) {
- case 0: /* OK clicked */
- vbox = gtk_object_get_data (GTK_OBJECT (dialog), "vbox");
- notebook = gtk_object_get_data (GTK_OBJECT (vbox), "notebook");
-
- destroy_service (GTK_OBJECT (notebook), &data->source);
-
- gtk_clist_set_text (GTK_CLIST (data->clist), source_row, 0, data->source);
- gtk_clist_set_row_data (GTK_CLIST (data->clist), source_row,
- g_strdup (data->source));
- source = data->source;
- break;
- case 1: /* Cancel clicked */
- g_print ("Cancel clicked\n");
- if (data && data->new_entry) {
- gtk_clist_remove (GTK_CLIST (data->clist), source_row);
- max_row = GTK_CLIST (data->clist)->rows - 1;
- source_row = source_row > max_row ? max_row : source_row;
- gtk_clist_select_row (GTK_CLIST (data->clist), source_row, 0);
- }
- break;
- }
-
- if (button != -1) {
- gnome_dialog_close (dialog);
- }
-}
-
-static GtkWidget*
-create_source_config_dialog (gboolean edit_mode, char **sourcep, GtkWidget *clist)
-{
- GtkWidget *config_dialog;
- GtkWidget *dialog_vbox1;
- GtkWidget *dialog_action_area1;
- GtkWidget *cmdConfigDialogOK;
- GtkWidget *cmdConfigDialogCancel;
- GtkWidget *vbox;
- GList *providers, *p, *sources, *transports;
- struct source_dialog_data *data = NULL;
-
- /* Fetch list of all providers. */
- providers = camel_session_list_providers (session, TRUE);
- sources = transports = NULL;
- for (p = providers; p; p = p->next) {
- CamelProvider *prov = p->data;
-
- if (strcmp (prov->domain, "mail") != 0)
- continue;
-
- if (prov->object_types[CAMEL_PROVIDER_STORE]) {
- sources = add_service (sources,
- CAMEL_PROVIDER_STORE,
- prov);
- } else if (prov->object_types[CAMEL_PROVIDER_TRANSPORT]) {
- transports = add_service (transports,
- CAMEL_PROVIDER_TRANSPORT,
- prov);
- }
- }
-
- if (edit_mode)
- config_dialog = gnome_dialog_new (_("Edit Source"), NULL);
- else
- config_dialog = gnome_dialog_new (_("Add Source"), NULL);
- gtk_window_set_modal (GTK_WINDOW (config_dialog), TRUE);
- gtk_widget_set_name (config_dialog, "config_dialog");
- gtk_object_set_data (GTK_OBJECT (config_dialog), "config_dialog", config_dialog);
- gtk_window_set_policy (GTK_WINDOW (config_dialog), TRUE, TRUE, FALSE);
- gtk_window_set_default_size (GTK_WINDOW (config_dialog), 380, 450);
-
- dialog_vbox1 = GNOME_DIALOG (config_dialog)->vbox;
- gtk_widget_set_name (dialog_vbox1, "dialog_vbox1");
- gtk_object_set_data (GTK_OBJECT (config_dialog), "dialog_vbox1", dialog_vbox1);
- gtk_widget_show (dialog_vbox1);
-
- dialog_action_area1 = GNOME_DIALOG (config_dialog)->action_area;
- gtk_widget_set_name (dialog_action_area1, "dialog_action_area1");
- gtk_object_set_data (GTK_OBJECT (config_dialog), "dialog_action_area1", dialog_action_area1);
- gtk_widget_show (dialog_action_area1);
- gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
- gtk_button_box_set_spacing (GTK_BUTTON_BOX (dialog_action_area1), 8);
-
- /* Create the vbox that we will pack the source widget into */
- vbox = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (vbox, "vbox");
- gtk_object_set_data (GTK_OBJECT (config_dialog), "vbox", vbox);
- gtk_widget_ref (vbox);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "vbox", vbox,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (vbox);
- gtk_box_pack_start (GTK_BOX (dialog_vbox1), vbox, TRUE, TRUE, 0);
-
- gnome_dialog_append_button (GNOME_DIALOG (config_dialog), GNOME_STOCK_BUTTON_OK);
- cmdConfigDialogOK = g_list_last (GNOME_DIALOG (config_dialog)->buttons)->data;
- gtk_widget_set_name (cmdConfigDialogOK, "cmdConfigDialogOK");
- gtk_object_set_data (GTK_OBJECT (vbox), "ok_button", cmdConfigDialogOK);
- gtk_widget_ref (cmdConfigDialogOK);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "cmdConfigDialogOK", cmdConfigDialogOK,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (cmdConfigDialogOK);
- GTK_WIDGET_SET_FLAGS (cmdConfigDialogOK, GTK_CAN_DEFAULT);
- gtk_widget_set_sensitive (cmdConfigDialogOK, FALSE);
-
- gnome_dialog_append_button (GNOME_DIALOG (config_dialog), GNOME_STOCK_BUTTON_CANCEL);
- cmdConfigDialogCancel = g_list_last (GNOME_DIALOG (config_dialog)->buttons)->data;
- gtk_widget_set_name (cmdConfigDialogCancel, "cmdConfigDialogCancel");
- gtk_widget_ref (cmdConfigDialogCancel);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "cmdConfigDialogCancel", cmdConfigDialogCancel,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (cmdConfigDialogCancel);
- GTK_WIDGET_SET_FLAGS (cmdConfigDialogCancel, GTK_CAN_DEFAULT);
-
- /* create/pack our source widget */
- create_source_page (vbox, sources, sourcep);
-
- data = g_malloc0 (sizeof (struct source_dialog_data));
- data->clist = clist;
- data->source = *sourcep;
- data->new_entry = !edit_mode;
-
- gtk_signal_connect(GTK_OBJECT (config_dialog), "clicked",
- GTK_SIGNAL_FUNC (on_SourceConfigDialogButton_clicked),
- data);
-
- return config_dialog;
-}
-
-static void
-on_clistIdentities_select_row (GtkWidget *widget, gint row, gint column,
- GdkEventButton *event, gpointer data)
-{
- identity_row = row;
-}
-
-static void
-on_clistSources_select_row (GtkWidget *widget, gint row, gint column,
- GdkEventButton *event, gpointer data)
-{
- source_row = row;
-}
-
-static void
-on_cmdIdentityAdd_clicked (GtkWidget *widget, gpointer user_data)
-{
- GtkWidget *dialog;
- char *text[] = { "", "", "", "" };
-
- gtk_clist_append (GTK_CLIST (user_data), text);
-
- if (identity_row > -1)
- gtk_clist_unselect_row (GTK_CLIST (user_data), identity_row, 0);
-
- gtk_clist_select_row (GTK_CLIST (user_data), GTK_CLIST (user_data)->rows - 1, 0);
-
- /* now create the editing dialog */
- dialog = create_identity_config_dialog (FALSE, &idrec, GTK_WIDGET (user_data));
- gtk_widget_show (dialog);
-}
-
-static void
-on_cmdIdentityEdit_clicked (GtkWidget *widget, gpointer user_data)
-{
- GtkWidget *dialog;
- struct identity_record *idrecp;
-
- if (identity_row == -1)
- return;
-
- idrecp = gtk_clist_get_row_data (GTK_CLIST (user_data), identity_row);
- if (!idrecp) {
- idrecp = &idrec;
-#if 0
- g_free (idrecp->name);
- idrecp->name = NULL;
- g_free (idrecp->address);
- idrecp->address = NULL;
- g_free (idrecp->organization);
- idrecp->organization = NULL;
- g_free (idrecp->sigfile);
- idrecp->sigfile = NULL;
-#endif
- }
-
- /* now create the editing dialog */
- dialog = create_identity_config_dialog (TRUE, idrecp, GTK_WIDGET (user_data));
- gtk_widget_show (dialog);
-}
-
-static void
-on_cmdIdentityDelete_clicked (GtkWidget *widget, gpointer user_data)
-{
- if (identity_row == -1)
- return;
-
- gtk_clist_remove (GTK_CLIST (user_data), identity_row);
- identity_row = -1;
-}
-
-static void
-on_cmdSourcesAdd_clicked (GtkWidget *widget, gpointer user_data)
-{
- GtkWidget *dialog;
- char *text[] = { "" };
-
- gtk_clist_append (GTK_CLIST (user_data), text);
-
- if (source_row > -1)
- gtk_clist_unselect_row (GTK_CLIST (user_data), source_row, 0);
-
- gtk_clist_select_row (GTK_CLIST (user_data), GTK_CLIST (user_data)->rows - 1, 0);
-
- /* now create the editing dialog */
- dialog = create_source_config_dialog (FALSE, &source, GTK_WIDGET (user_data));
- gtk_widget_show (dialog);
-}
-
-static void
-on_cmdSourcesEdit_clicked (GtkWidget *widget, gpointer user_data)
-{
- GtkWidget *dialog;
- GtkWidget *vbox;
- GtkWidget *interior_notebook;
- GtkWidget *table;
- int page;
- char *sourcep;
-
- if (source_row == -1)
- return;
-
- sourcep = gtk_clist_get_row_data (GTK_CLIST (user_data), source_row);
- if (sourcep) {
- source = sourcep;
- }
-
- /* now create the editing dialog */
- dialog = create_source_config_dialog (TRUE, &sourcep, GTK_WIDGET (user_data));
-
- /* Set the data in the source editor */
- vbox = gtk_object_get_data (GTK_OBJECT (dialog), "vbox");
- interior_notebook = gtk_object_get_data (GTK_OBJECT (vbox), "notebook");
- page = gtk_notebook_get_current_page (GTK_NOTEBOOK (interior_notebook));
- table = gtk_notebook_get_nth_page (GTK_NOTEBOOK (interior_notebook), page);
- set_service_url (GTK_OBJECT (table), source);
-
- gtk_widget_show (dialog);
-}
-
-static void
-on_cmdSourcesDelete_clicked (GtkWidget *widget, gpointer user_data)
-{
- if (source_row == -1)
- return;
-
- gtk_clist_remove (GTK_CLIST (user_data), source_row);
- source_row = -1;
-}
-
-static void
-on_cmdCamelServicesOK_clicked (GtkButton *button, gpointer user_data)
-{
- GtkWidget *notebook, *interior_notebook;
- GtkWidget *vbox;
-
- notebook = gtk_object_get_data (GTK_OBJECT (user_data), "notebook");
-
- /* switch to the third page which is the transport page */
- gtk_notebook_set_page (GTK_NOTEBOOK (notebook), 2);
-
- vbox = gtk_object_get_data (GTK_OBJECT (notebook), "transport_page_vbox");
- interior_notebook = gtk_object_get_data (GTK_OBJECT (vbox), "notebook");
-
- if (service_acceptable (GTK_NOTEBOOK (interior_notebook))) {
- destroy_service (GTK_OBJECT (interior_notebook), (gpointer) &transport);
- gtk_widget_destroy (GTK_WIDGET (user_data));
- }
-
- write_config();
-}
-
-static void
-on_cmdCamelServicesCancel_clicked (GtkButton *button, gpointer user_data)
-{
- gtk_widget_destroy(GTK_WIDGET (user_data));
-}
-
-static void
-on_chkFormat_toggled (GtkWidget *widget, gpointer user_data)
-{
- format = GTK_TOGGLE_BUTTON (widget)->active;
-}
-
-GtkWidget*
-providers_config_new (void)
-{
- GtkWidget *providers_config;
- GtkWidget *dialog_vbox1;
- GtkWidget *notebook;
- GtkWidget *hbox1;
- GtkWidget *scrolledwindow1;
- GtkWidget *clistIdentities;
- GtkWidget *lblIdentities;
- GtkWidget *vbuttonbox1;
- GtkWidget *cmdIdentityAdd;
- GtkWidget *cmdIdentityEdit;
- GtkWidget *cmdIdentityDelete;
- GtkWidget *lblIdentity;
- GtkWidget *hbox2;
- GtkWidget *scrolledwindow2;
- GtkWidget *clistSources;
- GtkWidget *lblMailSources;
- GtkWidget *vbuttonbox2;
- GtkWidget *cmdSourcesAdd;
- GtkWidget *cmdSourcesEdit;
- GtkWidget *cmdSourcesDelete;
- GtkWidget *lblProviders;
- GtkWidget *lblTransports;
- GtkWidget *dialog_action_area1;
- GtkWidget *cmdCamelServicesOK;
- GtkWidget *cmdCamelServicesCancel;
- GtkWidget *transport_page_vbox;
- GtkWidget *format_vbox;
- GtkWidget *chkFormat;
- GtkWidget *lblOther;
- GList *providers, *p, *sources, *transports;
- GtkWidget *table, *interior_notebook;
- char *titles[] = { _("Name"), _("Address"), _("Organization"), _("Signature file") };
- char *path;
- gboolean configured;
- int page;
-
-
- /* Fetch list of all providers. */
- providers = camel_session_list_providers (session, TRUE);
- sources = transports = NULL;
- for (p = providers; p; p = p->next) {
- CamelProvider *prov = p->data;
-
- if (strcmp (prov->domain, "mail") != 0)
- continue;
-
- if (prov->object_types[CAMEL_PROVIDER_STORE]) {
- sources = add_service (sources,
- CAMEL_PROVIDER_STORE,
- prov);
- } else if (prov->object_types[CAMEL_PROVIDER_TRANSPORT]) {
- transports = add_service (transports,
- CAMEL_PROVIDER_TRANSPORT,
- prov);
- }
- }
-
- providers_config = gnome_dialog_new (_("Camel Providers Configuration"), NULL);
- gtk_window_set_modal (GTK_WINDOW (providers_config), TRUE);
- gtk_widget_set_name (providers_config, "providers_config");
- gtk_object_set_data (GTK_OBJECT (providers_config), "providers_config", providers_config);
- gtk_window_set_policy (GTK_WINDOW (providers_config), TRUE, TRUE, FALSE);
- gtk_window_set_default_size (GTK_WINDOW (providers_config), 460, 340);
-
- dialog_vbox1 = GNOME_DIALOG (providers_config)->vbox;
- gtk_widget_set_name (dialog_vbox1, "dialog_vbox1");
- gtk_object_set_data (GTK_OBJECT (providers_config), "dialog_vbox1", dialog_vbox1);
- gtk_widget_show (dialog_vbox1);
-
- notebook = gtk_notebook_new ();
- gtk_widget_set_name (notebook, "notebook");
- gtk_widget_ref (notebook);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "notebook", notebook,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (notebook);
- gtk_box_pack_start (GTK_BOX (dialog_vbox1), notebook, TRUE, TRUE, 0);
-
- hbox1 = gtk_hbox_new (FALSE, 0);
- gtk_widget_set_name (hbox1, "hbox1");
- gtk_widget_ref (hbox1);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "hbox1", hbox1,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (hbox1);
- gtk_container_add (GTK_CONTAINER (notebook), hbox1);
-
- scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
- gtk_widget_set_name (scrolledwindow1, "scrolledwindow1");
- gtk_widget_ref (scrolledwindow1);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "scrolledwindow1", scrolledwindow1,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (scrolledwindow1);
- gtk_box_pack_start (GTK_BOX (hbox1), scrolledwindow1, TRUE, TRUE, 0);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-
- clistIdentities = gtk_clist_new_with_titles (4, titles);
- gtk_widget_set_name (clistIdentities, "clistIdentities");
- gtk_widget_ref (clistIdentities);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "clistIdentities", clistIdentities,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (clistIdentities);
- gtk_container_add (GTK_CONTAINER (scrolledwindow1), clistIdentities);
- gtk_clist_set_column_width (GTK_CLIST (clistIdentities), 0, 80);
- gtk_clist_column_titles_show (GTK_CLIST (clistIdentities));
-
- /* Find out if stuff has been configured */
- path = g_strdup_printf ("=%s/config=/mail/configured", evolution_dir);
- configured = gnome_config_get_bool (path);
- g_free (path);
-
- identity_row = -1;
- if (configured) {
- char *text[] = { "", "", "", "" };
- struct identity_record *data;
-
- /* add an entry to the identity clist */
- gtk_clist_append (GTK_CLIST (clistIdentities), text);
-
- path = g_strdup_printf ("=%s/config=/mail/id_name", evolution_dir);
- idrec.name = gnome_config_get_string (path);
- gtk_clist_set_text (GTK_CLIST (clistIdentities), 0, 0, idrec.name);
- g_free (path);
-
- path = g_strdup_printf ("=%s/config=/mail/id_addr", evolution_dir);
- idrec.address = gnome_config_get_string (path);
- gtk_clist_set_text (GTK_CLIST (clistIdentities), 0, 1, idrec.address);
- g_free (path);
-
- path = g_strdup_printf ("=%s/config=/mail/id_org", evolution_dir);
- idrec.organization = gnome_config_get_string (path);
- gtk_clist_set_text (GTK_CLIST (clistIdentities), 0, 2, idrec.organization);
- g_free (path);
-
- path = g_strdup_printf ("=%s/config=/mail/id_sig", evolution_dir);
- idrec.sigfile = gnome_config_get_string (path);
- gtk_clist_set_text (GTK_CLIST (clistIdentities), 0, 3, idrec.sigfile);
- g_free (path);
-
- data = g_malloc0 (sizeof (struct identity_record));
- data->name = g_strdup (idrec.name);
- data->address = g_strdup (idrec.address);
- data->organization = g_strdup (idrec.organization);
- data->sigfile = g_strdup (idrec.sigfile);
- gtk_clist_set_row_data (GTK_CLIST (clistIdentities), 0, data);
- }
-
-
- lblIdentities = gtk_label_new (_("Identities"));
- gtk_widget_set_name (lblIdentities, "lblIdentities");
- gtk_widget_ref (lblIdentities);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "lblIdentities", lblIdentities,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (lblIdentities);
- gtk_clist_set_column_widget (GTK_CLIST (clistIdentities), 0, lblIdentities);
-
- vbuttonbox1 = gtk_vbutton_box_new ();
- gtk_widget_set_name (vbuttonbox1, "vbuttonbox1");
- gtk_widget_ref (vbuttonbox1);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "vbuttonbox1", vbuttonbox1,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (vbuttonbox1);
- gtk_box_pack_start (GTK_BOX (hbox1), vbuttonbox1, FALSE, FALSE, 0);
-
- cmdIdentityAdd = gtk_button_new_with_label (_("Add"));
- gtk_widget_set_name (cmdIdentityAdd, "cmdIdentityAdd");
- gtk_widget_ref (cmdIdentityAdd);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "cmdIdentityAdd", cmdIdentityAdd,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (cmdIdentityAdd);
- gtk_container_add (GTK_CONTAINER (vbuttonbox1), cmdIdentityAdd);
- GTK_WIDGET_SET_FLAGS (cmdIdentityAdd, GTK_CAN_DEFAULT);
-
- cmdIdentityEdit = gtk_button_new_with_label (_("Edit"));
- gtk_widget_set_name (cmdIdentityEdit, "cmdIdentityEdit");
- gtk_widget_ref (cmdIdentityEdit);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "cmdIdentityEdit", cmdIdentityEdit,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (cmdIdentityEdit);
- gtk_container_add (GTK_CONTAINER (vbuttonbox1), cmdIdentityEdit);
- GTK_WIDGET_SET_FLAGS (cmdIdentityEdit, GTK_CAN_DEFAULT);
-
- cmdIdentityDelete = gtk_button_new_with_label (_("Delete"));
- gtk_widget_set_name (cmdIdentityDelete, "cmdIdentityDelete");
- gtk_widget_ref (cmdIdentityDelete);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "cmdIdentityDelete", cmdIdentityDelete,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (cmdIdentityDelete);
- gtk_container_add (GTK_CONTAINER (vbuttonbox1), cmdIdentityDelete);
- GTK_WIDGET_SET_FLAGS (cmdIdentityDelete, GTK_CAN_DEFAULT);
-
- lblIdentity = gtk_label_new (_("Identity"));
- gtk_widget_set_name (lblIdentity, "lblIdentity");
- gtk_widget_ref (lblIdentity);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "lblIdentity", lblIdentity,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (lblIdentity);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 0),
- lblIdentity);
-
- hbox2 = gtk_hbox_new (FALSE, 0);
- gtk_widget_set_name (hbox2, "hbox2");
- gtk_widget_ref (hbox2);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "hbox2", hbox2,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (hbox2);
- gtk_container_add (GTK_CONTAINER (notebook), hbox2);
-
- scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL);
- gtk_widget_set_name (scrolledwindow2, "scrolledwindow2");
- gtk_widget_ref (scrolledwindow2);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "scrolledwindow2", scrolledwindow2,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (scrolledwindow2);
- gtk_box_pack_start (GTK_BOX (hbox2), scrolledwindow2, TRUE, TRUE, 0);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow2), GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
-
- clistSources = gtk_clist_new (1);
- gtk_widget_set_name (clistSources, "clistSources");
- gtk_widget_ref (clistSources);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "clistSources", clistSources,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (clistSources);
- gtk_container_add (GTK_CONTAINER (scrolledwindow2), clistSources);
- gtk_clist_set_column_width (GTK_CLIST (clistSources), 0, 80);
- gtk_clist_column_titles_show (GTK_CLIST (clistSources));
-
- if (configured && !source) {
- path = g_strdup_printf ("=%s/config=/mail/source", evolution_dir);
- source = gnome_config_get_string (path);
- g_free (path);
- }
-
- source_row = -1;
- if (source) {
- char *text[] = { "" };
-
- gtk_clist_append (GTK_CLIST (clistSources), text);
-
- gtk_clist_set_text (GTK_CLIST (clistSources), 0, 0, source);
- gtk_clist_set_row_data (GTK_CLIST (clistSources), 0, g_strdup(source));
- }
-
- lblMailSources = gtk_label_new (_("Mail sources"));
- gtk_widget_set_name (lblMailSources, "lblMailSources");
- gtk_widget_ref (lblMailSources);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "lblMailSources", lblMailSources,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (lblMailSources);
- gtk_clist_set_column_widget (GTK_CLIST (clistSources), 0, lblMailSources);
-
- vbuttonbox2 = gtk_vbutton_box_new ();
- gtk_widget_set_name (vbuttonbox2, "vbuttonbox2");
- gtk_widget_ref (vbuttonbox2);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "vbuttonbox2", vbuttonbox2,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (vbuttonbox2);
- gtk_box_pack_start (GTK_BOX (hbox2), vbuttonbox2, FALSE, FALSE, 0);
-
- cmdSourcesAdd = gtk_button_new_with_label (_("Add"));
- gtk_widget_set_name (cmdSourcesAdd, "cmdSourcesAdd");
- gtk_widget_ref (cmdSourcesAdd);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "cmdSourcesAdd", cmdSourcesAdd,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (cmdSourcesAdd);
- gtk_container_add (GTK_CONTAINER (vbuttonbox2), cmdSourcesAdd);
- GTK_WIDGET_SET_FLAGS (cmdSourcesAdd, GTK_CAN_DEFAULT);
-
- cmdSourcesEdit = gtk_button_new_with_label (_("Edit"));
- gtk_widget_set_name (cmdSourcesEdit, "cmdSourcesEdit");
- gtk_widget_ref (cmdSourcesEdit);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "cmdSourcesEdit", cmdSourcesEdit,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (cmdSourcesEdit);
- gtk_container_add (GTK_CONTAINER (vbuttonbox2), cmdSourcesEdit);
- GTK_WIDGET_SET_FLAGS (cmdSourcesEdit, GTK_CAN_DEFAULT);
-
- cmdSourcesDelete = gtk_button_new_with_label (_("Delete"));
- gtk_widget_set_name (cmdSourcesDelete, "cmdSourcesDelete");
- gtk_widget_ref (cmdSourcesDelete);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "cmdSourcesDelete", cmdSourcesDelete,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (cmdSourcesDelete);
- gtk_container_add (GTK_CONTAINER (vbuttonbox2), cmdSourcesDelete);
- GTK_WIDGET_SET_FLAGS (cmdSourcesDelete, GTK_CAN_DEFAULT);
-
- lblProviders = gtk_label_new (_("Sources"));
- gtk_widget_set_name (lblProviders, "lblProviders");
- gtk_widget_ref (lblProviders);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "lblProviders", lblProviders,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (lblProviders);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 1),
- lblProviders);
-
-
- /* Setup the transport page */
- transport_page_vbox = gtk_vbox_new (FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (transport_page_vbox), 8);
- gtk_box_set_spacing (GTK_BOX (transport_page_vbox), 5);
- gtk_widget_set_name (transport_page_vbox, "transport_page_vbox");
- gtk_object_set_data (GTK_OBJECT (notebook), "transport_page_vbox", transport_page_vbox);
- gtk_widget_ref (transport_page_vbox);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "transport_page_vbox", transport_page_vbox,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (transport_page_vbox);
- gtk_container_add (GTK_CONTAINER (notebook), transport_page_vbox);
- if (configured && !transport) {
- path = g_strdup_printf ("=%s/config=/mail/transport", evolution_dir);
- transport = gnome_config_get_string (path);
- g_free (path);
- }
- create_transport_page (transport_page_vbox, transports, &transport);
-
- /* Set the data in the transports page */
- interior_notebook = gtk_object_get_data (GTK_OBJECT (transport_page_vbox), "notebook");
- page = gtk_notebook_get_current_page (GTK_NOTEBOOK (interior_notebook));
- if (transport != NULL && !strncasecmp(transport, "Sendmail", 8))
- page = 1;
- else
- page = 0;
- table = gtk_notebook_get_nth_page (GTK_NOTEBOOK (interior_notebook), page);
- set_service_url (GTK_OBJECT (table), transport);
-
-
- lblTransports = gtk_label_new (_("Transports"));
- gtk_widget_set_name (lblTransports, "lblTransports");
- gtk_widget_ref (lblTransports);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "lblTransports", lblTransports,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (lblTransports);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 2),
- lblTransports);
-
- /* Lets make a page to mark Send HTML or text/plan...yay */
- format_vbox = gtk_vbox_new (FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (format_vbox), 8);
- gtk_box_set_spacing (GTK_BOX (format_vbox), 5);
- gtk_widget_set_name (format_vbox, "format_vbox");
- gtk_object_set_data (GTK_OBJECT (notebook), "format_vbox", format_vbox);
- gtk_widget_ref (format_vbox);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "format_vbox", format_vbox,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (format_vbox);
- gtk_container_add (GTK_CONTAINER (notebook), format_vbox);
-
- chkFormat = gtk_check_button_new_with_label (_("Send messages in HTML format"));
- gtk_widget_set_name (chkFormat, "chkFormat");
- gtk_object_set_data (GTK_OBJECT (notebook), "chkFormat", chkFormat);
- gtk_widget_ref (chkFormat);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "chkFormat", chkFormat,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (chkFormat);
- gtk_box_pack_start (GTK_BOX (format_vbox), chkFormat, FALSE, FALSE, 0);
-
- lblOther = gtk_label_new (_("Other"));
- gtk_widget_set_name (lblOther, "lblOther");
- gtk_widget_ref (lblOther);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "lblOther", lblOther,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (lblOther);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 3),
- lblOther);
-
- if (configured) {
- char *buf;
-
- path = g_strdup_printf ("=%s/config=/mail/msg_format", evolution_dir);
- buf = gnome_config_get_string (path);
- g_free (path);
-
- if (!buf || !strcmp(buf, "alternative"))
- format = TRUE;
- else
- format = FALSE;
-
- g_free (buf);
- }
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (chkFormat), format);
-
-
- dialog_action_area1 = GNOME_DIALOG (providers_config)->action_area;
- gtk_widget_set_name (dialog_action_area1, "dialog_action_area1");
- gtk_object_set_data (GTK_OBJECT (providers_config), "dialog_action_area1", dialog_action_area1);
- gtk_widget_show (dialog_action_area1);
- gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
- gtk_button_box_set_spacing (GTK_BUTTON_BOX (dialog_action_area1), 8);
-
- gnome_dialog_append_button (GNOME_DIALOG (providers_config), GNOME_STOCK_BUTTON_OK);
- cmdCamelServicesOK = g_list_last (GNOME_DIALOG (providers_config)->buttons)->data;
- gtk_widget_set_name (cmdCamelServicesOK, "cmdCamelServicesOK");
- gtk_widget_ref (cmdCamelServicesOK);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "cmdCamelServicesOK", cmdCamelServicesOK,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (cmdCamelServicesOK);
- GTK_WIDGET_SET_FLAGS (cmdCamelServicesOK, GTK_CAN_DEFAULT);
-
- gnome_dialog_append_button (GNOME_DIALOG (providers_config), GNOME_STOCK_BUTTON_CANCEL);
- cmdCamelServicesCancel = g_list_last (GNOME_DIALOG (providers_config)->buttons)->data;
- gtk_widget_set_name (cmdCamelServicesCancel, "cmdCamelServicesCancel");
- gtk_widget_ref (cmdCamelServicesCancel);
- gtk_object_set_data_full (GTK_OBJECT (providers_config), "cmdCamelServicesCancel", cmdCamelServicesCancel,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (cmdCamelServicesCancel);
- GTK_WIDGET_SET_FLAGS (cmdCamelServicesCancel, GTK_CAN_DEFAULT);
-
- gtk_signal_connect (GTK_OBJECT (cmdIdentityAdd), "clicked",
- GTK_SIGNAL_FUNC (on_cmdIdentityAdd_clicked),
- clistIdentities);
- gtk_signal_connect (GTK_OBJECT (cmdIdentityEdit), "clicked",
- GTK_SIGNAL_FUNC (on_cmdIdentityEdit_clicked),
- clistIdentities);
- gtk_signal_connect (GTK_OBJECT (cmdIdentityDelete), "clicked",
- GTK_SIGNAL_FUNC (on_cmdIdentityDelete_clicked),
- clistIdentities);
-
- gtk_signal_connect (GTK_OBJECT (cmdSourcesAdd), "clicked",
- GTK_SIGNAL_FUNC (on_cmdSourcesAdd_clicked),
- clistSources);
- gtk_signal_connect (GTK_OBJECT (cmdSourcesEdit), "clicked",
- GTK_SIGNAL_FUNC (on_cmdSourcesEdit_clicked),
- clistSources);
- gtk_signal_connect (GTK_OBJECT (cmdSourcesDelete), "clicked",
- GTK_SIGNAL_FUNC (on_cmdSourcesDelete_clicked),
- clistSources);
-
- gtk_signal_connect (GTK_OBJECT (cmdCamelServicesOK), "clicked",
- GTK_SIGNAL_FUNC (on_cmdCamelServicesOK_clicked),
- providers_config);
- gtk_signal_connect (GTK_OBJECT (cmdCamelServicesCancel), "clicked",
- GTK_SIGNAL_FUNC (on_cmdCamelServicesCancel_clicked),
- providers_config);
-
- gtk_signal_connect (GTK_OBJECT (clistIdentities), "select_row",
- GTK_SIGNAL_FUNC (on_clistIdentities_select_row),
- NULL);
- gtk_signal_connect (GTK_OBJECT (clistSources), "select_row",
- GTK_SIGNAL_FUNC (on_clistSources_select_row),
- NULL);
-
- gtk_signal_connect (GTK_OBJECT (chkFormat), "toggled",
- GTK_SIGNAL_FUNC (on_chkFormat_toggled),
- NULL);
-
- return providers_config;
-}