From 5ae78b362fa270a49077335c32277ea52779c49a Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Fri, 24 Oct 2003 19:31:22 +0000 Subject: Re-Namespaced mail-accounts.c 2003-10-24 Jeffrey Stedfast * em-account-prefs.[c,h]: Re-Namespaced mail-accounts.c * em-composer-prefs.[c,h]: Re-Namespaced mail-composer-prefs.c * em-mailer-prefs.[c,h]: Re-Namespaced mail-preferences.c * mail-accounts.[c,h]: Removed. * mail-composer-prefs.[c,h]: Removed. * mail-preferences.[c,h]: Removed. * mail-account-editor.c: Updated. * mail-account-gui.c: Updated. * mail-config-factory.c: Updated. * mail-component-factory.c: Updated. svn path=/trunk/; revision=23066 --- mail/ChangeLog | 22 + mail/Makefile.am | 12 +- mail/em-account-prefs.c | 580 +++++++++++++++++++++++ mail/em-account-prefs.h | 99 ++++ mail/em-composer-prefs.c | 1010 +++++++++++++++++++++++++++++++++++++++++ mail/em-composer-prefs.h | 130 ++++++ mail/em-mailer-prefs.c | 474 +++++++++++++++++++ mail/em-mailer-prefs.h | 124 +++++ mail/mail-account-editor.c | 6 +- mail/mail-account-editor.h | 6 +- mail/mail-account-gui.c | 6 +- mail/mail-account-gui.h | 8 +- mail/mail-accounts.c | 580 ----------------------- mail/mail-accounts.h | 99 ---- mail/mail-component-factory.c | 18 +- mail/mail-component.h | 7 +- mail/mail-composer-prefs.c | 1010 ----------------------------------------- mail/mail-composer-prefs.h | 130 ------ mail/mail-config-factory.c | 36 +- mail/mail-config-factory.h | 6 +- mail/mail-preferences.c | 474 ------------------- mail/mail-preferences.h | 124 ----- mail/mail.h | 3 - 23 files changed, 2494 insertions(+), 2470 deletions(-) create mode 100644 mail/em-account-prefs.c create mode 100644 mail/em-account-prefs.h create mode 100644 mail/em-composer-prefs.c create mode 100644 mail/em-composer-prefs.h create mode 100644 mail/em-mailer-prefs.c create mode 100644 mail/em-mailer-prefs.h delete mode 100644 mail/mail-accounts.c delete mode 100644 mail/mail-accounts.h delete mode 100644 mail/mail-composer-prefs.c delete mode 100644 mail/mail-composer-prefs.h delete mode 100644 mail/mail-preferences.c delete mode 100644 mail/mail-preferences.h (limited to 'mail') diff --git a/mail/ChangeLog b/mail/ChangeLog index c2000f0b5f..4d2dc72d3a 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,25 @@ +2003-10-24 Jeffrey Stedfast + + * em-account-prefs.[c,h]: Re-Namespaced mail-accounts.c + + * em-composer-prefs.[c,h]: Re-Namespaced mail-composer-prefs.c + + * em-mailer-prefs.[c,h]: Re-Namespaced mail-preferences.c + + * mail-accounts.[c,h]: Removed. + + * mail-composer-prefs.[c,h]: Removed. + + * mail-preferences.[c,h]: Removed. + + * mail-account-editor.c: Updated. + + * mail-account-gui.c: Updated. + + * mail-config-factory.c: Updated. + + * mail-component-factory.c: Updated. + 2003-10-22 Ettore Perazzoli * GNOME_Evolution_Mail.server.in.in: Add an diff --git a/mail/Makefile.am b/mail/Makefile.am index f6db73f74e..f52e6003ba 100644 --- a/mail/Makefile.am +++ b/mail/Makefile.am @@ -83,6 +83,12 @@ libevolution_mail_la_SOURCES = \ $(MAILER_IDL_GENERATED) \ e-searching-tokenizer.c \ e-searching-tokenizer.h \ + em-account-prefs.c \ + em-account-prefs.h \ + em-composer-prefs.c \ + em-composer-prefs.h \ + em-mailer-prefs.c \ + em-mailer-prefs.h \ em-inline-filter.c \ em-inline-filter.h \ em-folder-selection.c \ @@ -133,15 +139,11 @@ libevolution_mail_la_SOURCES = \ mail-account-editor.h \ mail-account-gui.c \ mail-account-gui.h \ - mail-accounts.c \ - mail-accounts.h \ mail-autofilter.c \ mail-autofilter.h \ mail-component-factory.c \ mail-component.c \ mail-component.h \ - mail-composer-prefs.c \ - mail-composer-prefs.h \ mail-config.c \ mail-config.h \ mail-config-druid.c \ @@ -150,8 +152,6 @@ libevolution_mail_la_SOURCES = \ mail-crypto.h \ mail-config-factory.c \ mail-config-factory.h \ - mail-preferences.c \ - mail-preferences.h \ mail-folder-cache.c \ mail-folder-cache.h \ mail-importer.c \ diff --git a/mail/em-account-prefs.c b/mail/em-account-prefs.c new file mode 100644 index 0000000000..4e5008f3ef --- /dev/null +++ b/mail/em-account-prefs.c @@ -0,0 +1,580 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: Jeffrey Stedfast + * + * Copyright 2002-2003 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. + * + */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +#include +#include + +#include "mail.h" +#include "mail-component.h" +#include "mail-config.h" +#include "mail-config-druid.h" +#include "mail-account-editor.h" +#include "mail-ops.h" +#include "mail-send-recv.h" + +#include "art/mark.xpm" + +#include "em-account-prefs.h" + + +static void em_account_prefs_class_init (EMAccountPrefsClass *class); +static void em_account_prefs_init (EMAccountPrefs *prefs); +static void em_account_prefs_finalise (GObject *obj); +static void em_account_prefs_destroy (GtkObject *object); + +static void mail_accounts_load (EMAccountPrefs *prefs); + +static GdkPixbuf *disabled_pixbuf = NULL; +static GdkPixbuf *enabled_pixbuf = NULL; + +static GtkVBoxClass *parent_class = NULL; + + +#define PREFS_WINDOW(prefs) GTK_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (prefs), GTK_TYPE_WINDOW)) + + +GType +em_account_prefs_get_type (void) +{ + static GType type = 0; + + if (!type) { + GTypeInfo type_info = { + sizeof (EMAccountPrefsClass), + NULL, NULL, + (GClassInitFunc) em_account_prefs_class_init, + NULL, NULL, + sizeof (EMAccountPrefs), + 0, + (GInstanceInitFunc) em_account_prefs_init, + }; + + type = g_type_register_static (gtk_vbox_get_type (), "EMAccountPrefs", &type_info, 0); + } + + return type; +} + +static void +em_account_prefs_class_init (EMAccountPrefsClass *klass) +{ + GtkObjectClass *gtk_object_class = (GtkObjectClass *) klass; + GObjectClass *object_class = (GObjectClass *) klass; + + parent_class = g_type_class_ref (gtk_vbox_get_type ()); + + gtk_object_class->destroy = em_account_prefs_destroy; + + object_class->finalize = em_account_prefs_finalise; + + /* setup static data */ + disabled_pixbuf = NULL; + enabled_pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) mark_xpm); +} + +static void +em_account_prefs_init (EMAccountPrefs *prefs) +{ + prefs->druid = NULL; + prefs->editor = NULL; + + gdk_pixbuf_render_pixmap_and_mask (enabled_pixbuf, &prefs->mark_pixmap, &prefs->mark_bitmap, 128); +} + +static void +em_account_prefs_destroy (GtkObject *obj) +{ + EMAccountPrefs *prefs = (EMAccountPrefs *) obj; + + prefs->destroyed = TRUE; + + GTK_OBJECT_CLASS (parent_class)->destroy (obj); +} + +static void +em_account_prefs_finalise (GObject *obj) +{ + EMAccountPrefs *prefs = (EMAccountPrefs *) obj; + + g_object_unref (prefs->gui); + gdk_pixmap_unref (prefs->mark_pixmap); + g_object_unref (prefs->mark_bitmap); + + G_OBJECT_CLASS (parent_class)->finalize (obj); +} + +static void +account_add_finished (EMAccountPrefs *prefs, GObject *deadbeef) +{ + /* Either Cancel or Finished was clicked in the druid so reload the accounts */ + prefs->druid = NULL; + + if (!prefs->destroyed) + mail_accounts_load (prefs); + + g_object_unref (prefs); +} + +static void +account_add_clicked (GtkButton *button, gpointer user_data) +{ + EMAccountPrefs *prefs = (EMAccountPrefs *) user_data; + GtkWidget *parent; + + if (prefs->druid == NULL) { + prefs->druid = (GtkWidget *) mail_config_druid_new (); + + parent = gtk_widget_get_toplevel ((GtkWidget *) prefs); + if (GTK_WIDGET_TOPLEVEL (parent)) + gtk_window_set_transient_for ((GtkWindow *) prefs->druid, (GtkWindow *) parent); + + g_object_weak_ref ((GObject *) prefs->druid, + (GWeakNotify) account_add_finished, prefs); + + gtk_widget_show (prefs->druid); + g_object_ref (prefs); + } else { + gdk_window_raise (prefs->druid->window); + } +} + +static void +account_edit_finished (EMAccountPrefs *prefs, GObject *deadbeef) +{ + prefs->editor = NULL; + + if (!prefs->destroyed) + mail_accounts_load (prefs); + + g_object_unref (prefs); +} + +static void +account_edit_clicked (GtkButton *button, gpointer user_data) +{ + EMAccountPrefs *prefs = (EMAccountPrefs *) user_data; + + if (prefs->editor == NULL) { + GtkTreeSelection *selection; + EAccount *account = NULL; + GtkTreeModel *model; + GtkTreeIter iter; + + selection = gtk_tree_view_get_selection (prefs->table); + if (gtk_tree_selection_get_selected (selection, &model, &iter)) + gtk_tree_model_get (model, &iter, 3, &account, -1); + + if (account) { + GtkWidget *parent; + + parent = gtk_widget_get_toplevel ((GtkWidget *) prefs); + parent = GTK_WIDGET_TOPLEVEL (parent) ? parent : NULL; + + prefs->editor = (GtkWidget *) mail_account_editor_new (account, (GtkWindow *) parent, prefs); + + g_object_weak_ref ((GObject *) prefs->editor, (GWeakNotify) account_edit_finished, prefs); + gtk_widget_show (prefs->editor); + g_object_ref (prefs); + } + } else { + gdk_window_raise (prefs->editor->window); + } +} + +static void +account_delete_clicked (GtkButton *button, gpointer user_data) +{ + EMAccountPrefs *prefs = user_data; + GtkTreeSelection *selection; + EAccount *account = NULL; + EAccountList *accounts; + GtkTreeModel *model; + GtkWidget *confirm; + GtkTreeIter iter; + int ans; + + selection = gtk_tree_view_get_selection (prefs->table); + if (gtk_tree_selection_get_selected (selection, &model, &iter)) + gtk_tree_model_get (model, &iter, 3, &account, -1); + + /* make sure we have a valid account selected and that we aren't editing anything... */ + if (account == NULL || prefs->editor != NULL) + return; + + confirm = gtk_message_dialog_new (PREFS_WINDOW (prefs), + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, + _("Are you sure you want to delete this account?")); + + button = (GtkButton *) gtk_button_new_from_stock (GTK_STOCK_YES); + gtk_button_set_label (button, _("Delete")); + gtk_dialog_add_action_widget ((GtkDialog *) confirm, (GtkWidget *) button, GTK_RESPONSE_YES); + gtk_widget_show ((GtkWidget *) button); + + button = (GtkButton *) gtk_button_new_from_stock (GTK_STOCK_NO); + gtk_button_set_label (button, _("Don't delete")); + gtk_dialog_add_action_widget ((GtkDialog *) confirm, (GtkWidget *) button, GTK_RESPONSE_NO); + gtk_widget_show ((GtkWidget *) button); + + ans = gtk_dialog_run ((GtkDialog *) confirm); + gtk_widget_destroy (confirm); + + if (ans == GTK_RESPONSE_YES) { + int len; + + /* remove it from the folder-tree in the shell */ + if (account->enabled && account->source && account->source->url) + mail_component_remove_storage_by_uri (mail_component_peek (), account->source->url); + + /* remove it from the config file */ + mail_config_remove_account (account); + accounts = mail_config_get_accounts (); + + mail_config_write (); + + mail_autoreceive_setup (); + + gtk_list_store_remove ((GtkListStore *) model, &iter); + + len = e_list_length ((EList *) accounts); + if (len > 0) { + gtk_tree_selection_select_iter (selection, &iter); + } else { + gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_edit), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_delete), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_default), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_able), FALSE); + } + } +} + +static void +account_default_clicked (GtkButton *button, gpointer user_data) +{ + EMAccountPrefs *prefs = user_data; + GtkTreeSelection *selection; + EAccount *account = NULL; + GtkTreeModel *model; + GtkTreeIter iter; + + selection = gtk_tree_view_get_selection (prefs->table); + if (gtk_tree_selection_get_selected (selection, &model, &iter)) + gtk_tree_model_get (model, &iter, 3, &account, -1); + + if (account) { + mail_config_set_default_account (account); + + mail_config_write (); + + mail_accounts_load (prefs); + } +} + +static void +account_able_clicked (GtkButton *button, gpointer user_data) +{ + MailComponent *component = mail_component_peek (); + EMAccountPrefs *prefs = user_data; + GtkTreeSelection *selection; + EAccount *account = NULL; + GtkTreeModel *model; + GtkTreeIter iter; + + selection = gtk_tree_view_get_selection (prefs->table); + if (gtk_tree_selection_get_selected (selection, &model, &iter)) { + gtk_tree_model_get (model, &iter, 3, &account, -1); + account->enabled = !account->enabled; + gtk_list_store_set ((GtkListStore *) model, &iter, 0, account->enabled, -1); + + gtk_button_set_label (prefs->mail_able, account->enabled ? _("Disable") : _("Enable")); + } + + if (account) { + /* if the account got disabled, remove it from the + folder-tree, otherwise add it to the folder-tree */ + if (account->source->url) { + if (account->enabled) + mail_component_load_storage_by_uri (component, + account->source->url, + account->name); + else + mail_component_remove_storage_by_uri (component, account->source->url); + } + + mail_autoreceive_setup (); + + mail_config_write (); + } +} + +static void +account_able_toggled (GtkCellRendererToggle *renderer, char *arg1, gpointer user_data) +{ + EMAccountPrefs *prefs = user_data; + GtkTreeSelection *selection; + EAccount *account = NULL; + GtkTreeModel *model; + GtkTreePath *path; + GtkTreeIter iter; + + path = gtk_tree_path_new_from_string (arg1); + model = gtk_tree_view_get_model (prefs->table); + selection = gtk_tree_view_get_selection (prefs->table); + + if (gtk_tree_model_get_iter (model, &iter, path)) { + gtk_tree_model_get (model, &iter, 3, &account, -1); + account->enabled = !account->enabled; + gtk_list_store_set ((GtkListStore *) model, &iter, 0, account->enabled, -1); + + if (gtk_tree_selection_iter_is_selected (selection, &iter)) + gtk_button_set_label (prefs->mail_able, account->enabled ? _("Disable") : _("Enable")); + } + + gtk_tree_path_free (path); + + if (account) { + MailComponent *component = mail_component_peek (); + + /* if the account got disabled, remove it from the + folder-tree, otherwise add it to the folder-tree */ + if (account->source->url) { + if (account->enabled) + mail_component_load_storage_by_uri (component, account->source->url, account->name); + else + mail_component_remove_storage_by_uri (component, account->source->url); + } + + mail_autoreceive_setup (); + mail_config_write (); + } +} + +static void +account_double_click (GtkTreeView *treeview, GtkTreePath *path, + GtkTreeViewColumn *column, EMAccountPrefs *prefs) +{ + account_edit_clicked (NULL, prefs); +} + +static void +account_cursor_change (GtkTreeSelection *selection, EMAccountPrefs *prefs) +{ + EAccount *account = NULL; + GtkTreeModel *model; + GtkTreeIter iter; + int state; + + state = gtk_tree_selection_get_selected (selection, &model, &iter); + if (state) { + gtk_tree_model_get (model, &iter, 3, &account, -1); + if (account->source && account->enabled) + gtk_button_set_label (prefs->mail_able, _("Disable")); + else + gtk_button_set_label (prefs->mail_able, _("Enable")); + } else { + gtk_widget_grab_focus (GTK_WIDGET (prefs->mail_add)); + } + + gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_edit), state); + gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_delete), state); + gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_default), state); + gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_able), state); +} + +static void +mail_accounts_load (EMAccountPrefs *prefs) +{ + EAccount *default_account; + EAccountList *accounts; + GtkListStore *model; + GtkTreeIter iter; + char *name, *val; + EIterator *node; + int row = 0; + + model = (GtkListStore *) gtk_tree_view_get_model (prefs->table); + gtk_list_store_clear (model); + + default_account = mail_config_get_default_account (); + + accounts = mail_config_get_accounts (); + node = e_list_get_iterator ((EList *) accounts); + while (e_iterator_is_valid (node)) { + EAccount *account; + CamelURL *url; + + account = (EAccount *) e_iterator_get (node); + + url = account->source && account->source->url ? camel_url_new (account->source->url, NULL) : NULL; + + gtk_list_store_append (model, &iter); + if (account == default_account) { + /* translators: default account indicator */ + name = val = g_strdup_printf ("%s %s", account->name, _("[Default]")); + } else { + val = account->name; + name = NULL; + } + + gtk_list_store_set (model, &iter, + 0, account->enabled, + 1, val, + 2, url && url->protocol ? url->protocol : (char *) _("None"), + 3, account, + -1); + g_free (name); + + if (url) + camel_url_free (url); + + row++; + + e_iterator_next (node); + } + + g_object_unref (node); +} + + + +GtkWidget *em_account_prefs_treeview_new (char *widget_name, char *string1, char *string2, + int int1, int int2); + +GtkWidget * +em_account_prefs_treeview_new (char *widget_name, char *string1, char *string2, int int1, int int2) +{ + GtkWidget *table, *scrolled; + GtkTreeSelection *selection; + GtkCellRenderer *renderer; + GtkListStore *model; + + scrolled = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled), GTK_SHADOW_IN); + + renderer = gtk_cell_renderer_toggle_new (); + g_object_set ((GObject *) renderer, "activatable", TRUE, NULL); + + model = gtk_list_store_new (4, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); + table = gtk_tree_view_new_with_model ((GtkTreeModel *) model); + gtk_tree_view_insert_column_with_attributes ((GtkTreeView *) table, -1, _("Enabled"), + renderer, "active", 0, NULL); + + g_object_set_data ((GObject *) scrolled, "renderer", renderer); + + renderer = gtk_cell_renderer_text_new (); + gtk_tree_view_insert_column_with_attributes ((GtkTreeView *) table, -1, _("Account name"), + renderer, "text", 1, NULL); + gtk_tree_view_insert_column_with_attributes ((GtkTreeView *)table, -1, _("Protocol"), + renderer, "text", 2, NULL); + selection = gtk_tree_view_get_selection ((GtkTreeView *) table); + gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); + gtk_tree_view_set_headers_visible ((GtkTreeView *) table, TRUE); + + /* FIXME: column auto-resize? */ + /* Is this needed? + gtk_tree_view_column_set_alignment (gtk_tree_view_get_column (prefs->table, 0), 1.0);*/ + + gtk_container_add (GTK_CONTAINER (scrolled), table); + + g_object_set_data ((GObject *) scrolled, "table", table); + + gtk_widget_show (scrolled); + gtk_widget_show (table); + + return scrolled; +} + +static void +em_account_prefs_construct (EMAccountPrefs *prefs) +{ + GtkWidget *toplevel, *widget; + GtkCellRenderer *renderer; + GladeXML *gui; + + gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", "accounts_tab", NULL); + prefs->gui = gui; + + /* get our toplevel widget */ + toplevel = glade_xml_get_widget (gui, "toplevel"); + + /* reparent */ + gtk_widget_ref (toplevel); + gtk_container_remove (GTK_CONTAINER (toplevel->parent), toplevel); + gtk_container_add (GTK_CONTAINER (prefs), toplevel); + gtk_widget_unref (toplevel); + + widget = glade_xml_get_widget (gui, "etableMailAccounts"); + + prefs->table = (GtkTreeView *) g_object_get_data ((GObject *) widget, "table"); + g_signal_connect (gtk_tree_view_get_selection (prefs->table), + "changed", G_CALLBACK (account_cursor_change), prefs); + g_signal_connect (prefs->table, "row-activated", G_CALLBACK (account_double_click), prefs); + + renderer = g_object_get_data ((GObject *) widget, "renderer"); + g_signal_connect (renderer, "toggled", G_CALLBACK (account_able_toggled), prefs); + + mail_accounts_load (prefs); + + prefs->mail_add = GTK_BUTTON (glade_xml_get_widget (gui, "cmdAccountAdd")); + g_signal_connect (prefs->mail_add, "clicked", G_CALLBACK (account_add_clicked), prefs); + + prefs->mail_edit = GTK_BUTTON (glade_xml_get_widget (gui, "cmdAccountEdit")); + g_signal_connect (prefs->mail_edit, "clicked", G_CALLBACK (account_edit_clicked), prefs); + + prefs->mail_delete = GTK_BUTTON (glade_xml_get_widget (gui, "cmdAccountDelete")); + g_signal_connect (prefs->mail_delete, "clicked", G_CALLBACK (account_delete_clicked), prefs); + + prefs->mail_default = GTK_BUTTON (glade_xml_get_widget (gui, "cmdAccountDefault")); + g_signal_connect (prefs->mail_default, "clicked", G_CALLBACK (account_default_clicked), prefs); + + prefs->mail_able = GTK_BUTTON (glade_xml_get_widget (gui, "cmdAccountAble")); + g_signal_connect (prefs->mail_able, "clicked", G_CALLBACK (account_able_clicked), prefs); +} + + +GtkWidget * +em_account_prefs_new (GNOME_Evolution_Shell shell) +{ + EMAccountPrefs *new; + + new = (EMAccountPrefs *) g_object_new (em_account_prefs_get_type (), NULL); + em_account_prefs_construct (new); + new->shell = shell; + + return (GtkWidget *) new; +} + + +void +em_account_prefs_apply (EMAccountPrefs *prefs) +{ + /* nothing to do here... */ +} diff --git a/mail/em-account-prefs.h b/mail/em-account-prefs.h new file mode 100644 index 0000000000..55cf27ec1c --- /dev/null +++ b/mail/em-account-prefs.h @@ -0,0 +1,99 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: Jeffrey Stedfast + * + * Copyright 2002-2003 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 __EM_ACCOUNT_PREFS_H__ +#define __EM_ACCOUNT_PREFS_H__ + +#ifdef __cplusplus +extern "C" { +#pragma } +#endif /* __cplusplus */ + +#include +#include +#include +#include +#include + +#include + +#include "evolution-config-control.h" + +#include + + +#define EM_ACCOUNT_PREFS_TYPE (em_account_prefs_get_type ()) +#define EM_ACCOUNT_PREFS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EM_ACCOUNT_PREFS_TYPE, EMAccountPrefs)) +#define EM_ACCOUNT_PREFS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EM_ACCOUNT_PREFS_TYPE, EMAccountPrefsClass)) +#define EM_IS_ACCOUNT_PREFS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EM_ACCOUNT_PREFS_TYPE)) +#define EM_IS_ACCOUNT_PREFS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EM_ACCOUNT_PREFS_TYPE)) + +typedef struct _EMAccountPrefs EMAccountPrefs; +typedef struct _EMAccountPrefsClass EMAccountPrefsClass; + +struct _EMAccountPrefs { + GtkVBox parent_object; + + GNOME_Evolution_Shell shell; + + GladeXML *gui; + + GtkWidget *druid; + GtkWidget *editor; + + GdkPixmap *mark_pixmap; + GdkBitmap *mark_bitmap; + + GtkTreeView *table; + + GtkButton *mail_add; + GtkButton *mail_edit; + GtkButton *mail_delete; + GtkButton *mail_default; + GtkButton *mail_able; + + guint destroyed : 1; +}; + +struct _EMAccountPrefsClass { + GtkVBoxClass parent_class; + + /* signals */ + +}; + + +GtkType em_account_prefs_get_type (void); + +GtkWidget *em_account_prefs_new (GNOME_Evolution_Shell shell); + +void em_account_prefs_apply (EMAccountPrefs *prefs); + +/* needed by global config */ +#define EM_ACCOUNT_PREFS_CONTROL_ID "OAFIID:GNOME_Evolution_Mail_Accounts_ConfigControl" + +#ifdef __cplusplus +} +#endif + +#endif /* __EM_ACCOUNT_PREFS_H__ */ diff --git a/mail/em-composer-prefs.c b/mail/em-composer-prefs.c new file mode 100644 index 0000000000..f16e254ccf --- /dev/null +++ b/mail/em-composer-prefs.c @@ -0,0 +1,1010 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: Jeffrey Stedfast + * + * Copyright 2002-2003 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. + * + */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +#include "em-composer-prefs.h" +#include "composer/e-msg-composer.h" + +#include + +#include +#include + +#include +#include +#include +#include + +#include "widgets/misc/e-charset-picker.h" + +#include "mail-config.h" + +#include "art/mark.xpm" + + +#define d(x) + +static void em_composer_prefs_class_init (EMComposerPrefsClass *class); +static void em_composer_prefs_init (EMComposerPrefs *dialog); +static void em_composer_prefs_destroy (GtkObject *obj); +static void em_composer_prefs_finalise (GObject *obj); + +static void sig_event_client (MailConfigSigEvent event, MailConfigSignature *sig, EMComposerPrefs *prefs); + +static GtkVBoxClass *parent_class = NULL; + + +GType +em_composer_prefs_get_type (void) +{ + static GType type = 0; + + if (!type) { + static const GTypeInfo info = { + sizeof (EMComposerPrefsClass), + NULL, NULL, + (GClassInitFunc) em_composer_prefs_class_init, + NULL, NULL, + sizeof (EMComposerPrefs), + 0, + (GInstanceInitFunc) em_composer_prefs_init, + }; + + type = g_type_register_static (gtk_vbox_get_type (), "EMComposerPrefs", &info, 0); + } + + return type; +} + +static void +em_composer_prefs_class_init (EMComposerPrefsClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GtkObjectClass *object_class = GTK_OBJECT_CLASS (klass); + + parent_class = g_type_class_ref (gtk_vbox_get_type ()); + + object_class->destroy = em_composer_prefs_destroy; + gobject_class->finalize = em_composer_prefs_finalise; +} + +static void +em_composer_prefs_init (EMComposerPrefs *composer_prefs) +{ + composer_prefs->enabled_pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) mark_xpm); + gdk_pixbuf_render_pixmap_and_mask (composer_prefs->enabled_pixbuf, + &composer_prefs->mark_pixmap, &composer_prefs->mark_bitmap, 128); +} + +static void +em_composer_prefs_finalise (GObject *obj) +{ + EMComposerPrefs *prefs = (EMComposerPrefs *) obj; + + g_object_unref (prefs->gui); + g_object_unref (prefs->enabled_pixbuf); + gdk_pixmap_unref (prefs->mark_pixmap); + g_object_unref (prefs->mark_bitmap); + + G_OBJECT_CLASS (parent_class)->finalize (obj); +} + +static void +em_composer_prefs_destroy (GtkObject *obj) +{ + EMComposerPrefs *prefs = (EMComposerPrefs *) obj; + + mail_config_signature_unregister_client ((MailConfigSignatureClient) sig_event_client, prefs); + + GTK_OBJECT_CLASS (parent_class)->destroy (obj); +} + +static void +attach_style_info (GtkWidget *item, gpointer user_data) +{ + int *style = user_data; + + g_object_set_data ((GObject *) item, "style", GINT_TO_POINTER (*style)); + + (*style)++; +} + +static void +toggle_button_toggled (GtkWidget *widget, gpointer user_data) +{ + EMComposerPrefs *prefs = (EMComposerPrefs *) user_data; + + if (prefs->control) + evolution_config_control_changed (prefs->control); +} + +static void +menu_changed (GtkWidget *widget, gpointer user_data) +{ + EMComposerPrefs *prefs = (EMComposerPrefs *) user_data; + + if (prefs->control) + evolution_config_control_changed (prefs->control); +} + +static void +option_menu_connect (GtkOptionMenu *omenu, gpointer user_data) +{ + GtkWidget *menu, *item; + GList *items; + + menu = gtk_option_menu_get_menu (omenu); + + items = GTK_MENU_SHELL (menu)->children; + while (items) { + item = items->data; + g_signal_connect (item, "activate", G_CALLBACK (menu_changed), user_data); + items = items->next; + } +} + +static void +sig_load_preview (EMComposerPrefs *prefs, MailConfigSignature *sig) +{ + char *str; + + if (!sig) { + gtk_html_load_from_string (GTK_HTML (prefs->sig_preview), " ", 1); + return; + } + + if (sig->script) + str = mail_config_signature_run_script (sig->script); + else + str = e_msg_composer_get_sig_file_content (sig->filename, sig->html); + if (!str) + str = g_strdup (""); + + /* printf ("HTML: %s\n", str); */ + if (sig->html) { + gtk_html_load_from_string (GTK_HTML (prefs->sig_preview), str, strlen (str)); + } else { + GtkHTMLStream *stream; + int len; + + len = strlen (str); + stream = gtk_html_begin_content (GTK_HTML (prefs->sig_preview), "text/html; charset=utf-8"); + gtk_html_write (GTK_HTML (prefs->sig_preview), stream, "
", 5);
+		if (len)
+			gtk_html_write (GTK_HTML (prefs->sig_preview), stream, str, len);
+		gtk_html_write (GTK_HTML (prefs->sig_preview), stream, "
", 6); + gtk_html_end (GTK_HTML (prefs->sig_preview), stream, GTK_HTML_STREAM_OK); + } + + g_free (str); +} + +static void +sig_edit_cb (GtkWidget *widget, EMComposerPrefs *prefs) +{ + GtkTreeSelection *selection; + MailConfigSignature *sig; + GtkTreeModel *model; + GtkWidget *parent; + GtkTreeIter iter; + + selection = gtk_tree_view_get_selection (prefs->sig_list); + if (!gtk_tree_selection_get_selected (selection, &model, &iter)) + return; + + gtk_tree_model_get (model, &iter, 1, &sig, -1); + + if (sig->script == NULL) { + /* normal signature */ + if (!sig->filename || *sig->filename == '\0') { + g_free (sig->filename); + sig->filename = g_strdup (_("Unnamed")); + } + + parent = gtk_widget_get_toplevel ((GtkWidget *) prefs); + parent = GTK_WIDGET_TOPLEVEL (parent) ? parent : NULL; + + mail_signature_editor (sig, (GtkWindow *) parent, FALSE); + } else { + /* signature script */ + GtkWidget *entry; + + entry = glade_xml_get_widget (prefs->sig_script_gui, "fileentry_add_script_script"); + gtk_entry_set_text (GTK_ENTRY (entry), sig->name); + + entry = glade_xml_get_widget (prefs->sig_script_gui, "entry_add_script_name"); + gtk_entry_set_text (GTK_ENTRY (entry), sig->name); + + g_object_set_data ((GObject *) entry, "script", sig); + + gtk_widget_show (prefs->sig_script_dialog); + gdk_window_raise (prefs->sig_script_dialog->window); + } +} + +MailConfigSignature * +em_composer_prefs_new_signature (GtkWindow *parent, gboolean html, const char *script) +{ + MailConfigSignature *sig; + + sig = mail_config_signature_new (html, script); + mail_signature_editor (sig, parent, TRUE); + + return sig; +} + +static void +sig_delete_cb (GtkWidget *widget, EMComposerPrefs *prefs) +{ + MailConfigSignature *sig; + GtkTreeModel *model; + GtkTreeSelection *selection; + GtkTreeIter iter; + + selection = gtk_tree_view_get_selection (prefs->sig_list); + if (gtk_tree_selection_get_selected (selection, &model, &iter)) { + gtk_tree_model_get (model, &iter, 1, &sig, -1); + gtk_list_store_remove ((GtkListStore *) model, &iter); + mail_config_signature_delete (sig); + } +} + +static void +sig_add_cb (GtkWidget *widget, EMComposerPrefs *prefs) +{ + GConfClient *gconf; + gboolean send_html; + GtkWidget *parent; + + gconf = mail_config_get_gconf_client (); + send_html = gconf_client_get_bool (gconf, "/apps/evolution/mail/composer/send_html", NULL); + + parent = gtk_widget_get_toplevel ((GtkWidget *) prefs); + parent = GTK_WIDGET_TOPLEVEL (parent) ? parent : NULL; + + em_composer_prefs_new_signature ((GtkWindow *) parent, send_html, NULL); +} + +static void +sig_add_script_response (GtkWidget *widget, int button, EMComposerPrefs *prefs) +{ + const char *script, *name; + GtkWidget *dialog; + GtkWidget *entry; + + if (button == GTK_RESPONSE_ACCEPT) { + entry = glade_xml_get_widget (prefs->sig_script_gui, "fileentry_add_script_script"); + script = gtk_entry_get_text (GTK_ENTRY (gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (entry)))); + + entry = glade_xml_get_widget (prefs->sig_script_gui, "entry_add_script_name"); + name = gtk_entry_get_text (GTK_ENTRY (entry)); + if (script && *script) { + struct stat st; + + if (!stat (script, &st) && S_ISREG (st.st_mode) && access (script, X_OK) == 0) { + MailConfigSignature *sig; + GtkWidget *parent; + + parent = gtk_widget_get_toplevel ((GtkWidget *) prefs); + parent = GTK_WIDGET_TOPLEVEL (parent) ? parent : NULL; + + if ((sig = g_object_get_data ((GObject *) entry, "script"))) { + /* we're just editing an existing signature script */ + mail_config_signature_set_name (sig, name); + } else { + sig = em_composer_prefs_new_signature ((GtkWindow *) parent, TRUE, script); + mail_config_signature_set_name (sig, name); + mail_config_signature_add (sig); + } + + gtk_widget_hide (prefs->sig_script_dialog); + + return; + } + } + + dialog = gtk_message_dialog_new (GTK_WINDOW (prefs->sig_script_dialog), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, + "%s", _("You must specify a valid script name.")); + + gtk_dialog_run ((GtkDialog *) dialog); + gtk_widget_destroy (dialog); + } + + gtk_widget_hide (widget); +} + +static void +sig_add_script_cb (GtkWidget *widget, EMComposerPrefs *prefs) +{ + GtkWidget *entry; + + entry = glade_xml_get_widget (prefs->sig_script_gui, "entry_add_script_name"); + gtk_entry_set_text (GTK_ENTRY (entry), _("Unnamed")); + + g_object_set_data ((GObject *) entry, "script", NULL); + + gtk_widget_show (prefs->sig_script_dialog); + gdk_window_raise (prefs->sig_script_dialog->window); +} + +static void +sig_selection_changed (GtkTreeSelection *selection, EMComposerPrefs *prefs) +{ + MailConfigSignature *sig; + GtkTreeModel *model; + GtkTreeIter iter; + int state; + + state = gtk_tree_selection_get_selected (selection, &model, &iter); + if (state) { + gtk_tree_model_get (model, &iter, 1, &sig, -1); + sig_load_preview (prefs, sig); + } + + gtk_widget_set_sensitive ((GtkWidget *) prefs->sig_delete, state); + gtk_widget_set_sensitive ((GtkWidget *) prefs->sig_edit, state); +} + +static void +sig_fill_clist (GtkTreeView *clist) +{ + GSList *l; + GtkListStore *model; + GtkTreeIter iter; + + model = (GtkListStore *) gtk_tree_view_get_model (clist); + gtk_list_store_clear (model); + + for (l = mail_config_get_signature_list (); l; l = l->next) { + MailConfigSignature *sig = l->data; + char *name = NULL, *val; + + gtk_list_store_append (model, &iter); + + if (sig->script) + name = val = g_strconcat (sig->name, " ", _("[script]"), NULL); + else + val = sig->name; + gtk_list_store_set (model, &iter, 0, val, 1, sig, -1); + g_free (name); + } +} + +static void +url_requested (GtkHTML *html, const char *url, GtkHTMLStream *handle) +{ + GtkHTMLStreamStatus status; + char buf[128]; + ssize_t size; + int fd; + + if (!strncmp (url, "file:", 5)) + url += 5; + + fd = open (url, O_RDONLY); + status = GTK_HTML_STREAM_OK; + if (fd != -1) { + while ((size = read (fd, buf, sizeof (buf)))) { + if (size == -1) { + status = GTK_HTML_STREAM_ERROR; + break; + } else + gtk_html_write (html, handle, buf, size); + } + } else + status = GTK_HTML_STREAM_ERROR; + + gtk_html_end (html, handle, status); +} + +static void +sig_event_client (MailConfigSigEvent event, MailConfigSignature *sig, EMComposerPrefs *prefs) +{ + MailConfigSignature *current; + GtkTreeSelection *selection; + GtkTreeModel *model; + GtkTreeIter iter; + char path[16]; + + switch (event) { + case MAIL_CONFIG_SIG_EVENT_ADDED: + d(printf ("signature ADDED\n")); + + model = gtk_tree_view_get_model (prefs->sig_list); + gtk_list_store_append ((GtkListStore *) model, &iter); + gtk_list_store_set ((GtkListStore *) model, &iter, 0, sig->name, 1, sig, -1); + break; + case MAIL_CONFIG_SIG_EVENT_NAME_CHANGED: + d(printf ("signature NAME CHANGED\n")); + + /* this is one bizarro interface */ + model = gtk_tree_view_get_model (prefs->sig_list); + sprintf (path, "%d", sig->id); + if (gtk_tree_model_get_iter_from_string (model, &iter, path)) { + char *val, *name = NULL; + + if (sig->script) + name = val = g_strconcat (sig->name, " ", _("[script]"), NULL); + else + val = sig->name; + + gtk_list_store_set ((GtkListStore *) model, &iter, 0, val, -1); + g_free (name); + } + break; + case MAIL_CONFIG_SIG_EVENT_CONTENT_CHANGED: + d(printf ("signature CONTENT CHANGED\n")); + selection = gtk_tree_view_get_selection (prefs->sig_list); + if (gtk_tree_selection_get_selected (selection, &model, &iter)) { + gtk_tree_model_get (model, &iter, 1, ¤t, -1); + if (sig == current) + sig_load_preview (prefs, sig); + } + break; + default: + ; + } +} + +/* + * + * Spell checking cut'n'pasted from gnome-spell/capplet/main.c + * + */ + +#include "Spell.h" + +#define GNOME_SPELL_GCONF_DIR "/GNOME/Spell" +#define SPELL_API_VERSION "0.3" + +static void +spell_set_ui (EMComposerPrefs *prefs) +{ + GtkListStore *model; + GtkTreeIter iter; + GHashTable *present; + gboolean go; + char **strv = NULL; + int i; + + prefs->spell_active = FALSE; + + /* setup the language list */ + present = g_hash_table_new (g_str_hash, g_str_equal); + if (prefs->language_str && (strv = g_strsplit (prefs->language_str, " ", 0))) { + for (i = 0; strv[i]; i++) + g_hash_table_insert (present, strv[i], strv[i]); + } + + model = (GtkListStore *) gtk_tree_view_get_model (prefs->language); + for (go = gtk_tree_model_get_iter_first ((GtkTreeModel *) model, &iter); go; + go = gtk_tree_model_iter_next ((GtkTreeModel *) model, &iter)) { + char *abbr; + + gtk_tree_model_get ((GtkTreeModel *) model, &iter, 2, &abbr, -1); + gtk_list_store_set (model, &iter, 0, g_hash_table_lookup (present, abbr) != NULL, -1); + } + + g_hash_table_destroy (present); + if (strv != NULL) + g_strfreev (strv); + + gnome_color_picker_set_i16 (GNOME_COLOR_PICKER (prefs->colour), + prefs->spell_error_color.red, + prefs->spell_error_color.green, + prefs->spell_error_color.blue, 0xffff); + + prefs->spell_active = TRUE; +} + +static gchar * +spell_get_language_str (EMComposerPrefs *prefs) +{ + GString *str = g_string_new (""); + GtkListStore *model; + GtkTreeIter iter; + gboolean go; + char *rv; + + model = (GtkListStore *) gtk_tree_view_get_model (prefs->language); + for (go = gtk_tree_model_get_iter_first ((GtkTreeModel *) model, &iter); + go; + go = gtk_tree_model_iter_next ((GtkTreeModel *) model, &iter)) { + char *abbr; + gboolean state; + + gtk_tree_model_get ((GtkTreeModel *) model, &iter, 0, &state, 2, &abbr, -1); + if (state) { + if (str->len) + g_string_append_c (str, ' '); + g_string_append (str, abbr); + } + } + + rv = str->str; + g_string_free (str, FALSE); + + return rv; +} + +static void +spell_get_ui (EMComposerPrefs *prefs) +{ + gnome_color_picker_get_i16 (GNOME_COLOR_PICKER (prefs->colour), + &prefs->spell_error_color.red, + &prefs->spell_error_color.green, + &prefs->spell_error_color.blue, NULL); + g_free (prefs->language_str); + prefs->language_str = spell_get_language_str (prefs); +} + +#define GET(t,x,prop,f,c) \ + val = gconf_client_get_without_default (prefs->gconf, GNOME_SPELL_GCONF_DIR x, NULL); \ + if (val) { f; prop = c (gconf_value_get_ ## t (val)); \ + gconf_value_free (val); } + +static void +spell_save_orig (EMComposerPrefs *prefs) +{ + g_free (prefs->language_str_orig); + prefs->language_str_orig = g_strdup (prefs->language_str ? prefs->language_str : ""); + prefs->spell_error_color_orig = prefs->spell_error_color; +} + +/* static void +spell_load_orig (EMComposerPrefs *prefs) +{ + g_free (prefs->language_str); + prefs->language_str = g_strdup (prefs->language_str_orig); + prefs->spell_error_color = prefs->spell_error_color_orig; +} */ + +static void +spell_load_values (EMComposerPrefs *prefs) +{ + GConfValue *val; + char *def_lang; + + def_lang = g_strdup (e_iconv_locale_language ()); + g_free (prefs->language_str); + prefs->language_str = g_strdup (def_lang); + prefs->spell_error_color.red = 0xffff; + prefs->spell_error_color.green = 0; + prefs->spell_error_color.blue = 0; + + GET (int, "/spell_error_color_red", prefs->spell_error_color.red, (void)0, (int)); + GET (int, "/spell_error_color_green", prefs->spell_error_color.green, (void)0, (int)); + GET (int, "/spell_error_color_blue", prefs->spell_error_color.blue, (void)0, (int)); + GET (string, "/language", prefs->language_str, g_free (prefs->language_str), g_strdup); + + if (prefs->language_str == NULL) + prefs->language_str = g_strdup (def_lang); + + spell_save_orig (prefs); + + g_free (def_lang); +} + +#define SET(t,x,prop) \ + gconf_client_set_ ## t (prefs->gconf, GNOME_SPELL_GCONF_DIR x, prop, NULL); + +#define STR_EQUAL(str1, str2) ((str1 == NULL && str2 == NULL) || (str1 && str2 && !strcmp (str1, str2))) + +static void +spell_save_values (EMComposerPrefs *prefs, gboolean force) +{ + if (force || !gdk_color_equal (&prefs->spell_error_color, &prefs->spell_error_color_orig)) { + SET (int, "/spell_error_color_red", prefs->spell_error_color.red); + SET (int, "/spell_error_color_green", prefs->spell_error_color.green); + SET (int, "/spell_error_color_blue", prefs->spell_error_color.blue); + } + + if (force || !STR_EQUAL (prefs->language_str, prefs->language_str_orig)) { + SET (string, "/language", prefs->language_str ? prefs->language_str : ""); + } + + gconf_client_suggest_sync (prefs->gconf, NULL); +} + +static void +spell_apply (EMComposerPrefs *prefs) +{ + spell_get_ui (prefs); + spell_save_values (prefs, FALSE); +} + +/* static void +spell_revert (EMComposerPrefs *prefs) +{ + spell_load_orig (prefs); + spell_set_ui (prefs); + spell_save_values (prefs, TRUE); +} */ + +static void +spell_changed (gpointer user_data) +{ + EMComposerPrefs *prefs = (EMComposerPrefs *) user_data; + + if (prefs->control) + evolution_config_control_changed (prefs->control); +} + +static void +spell_color_set (GtkWidget *widget, guint r, guint g, guint b, guint a, gpointer user_data) +{ + spell_changed (user_data); +} + +static void +spell_language_selection_changed (GtkTreeSelection *selection, EMComposerPrefs *prefs) +{ + GtkTreeIter iter; + GtkTreeModel *model; + gboolean state = FALSE; + + if (gtk_tree_selection_get_selected (selection, &model, &iter)) { + gtk_tree_model_get ((GtkTreeModel *) model, &iter, 0, &state, -1); + gtk_button_set_label ((GtkButton *) prefs->spell_able_button, state ? _("Disable") : _("Enable")); + state = TRUE; + } + gtk_widget_set_sensitive (prefs->spell_able_button, state); +} + +static void +spell_language_enable (GtkWidget *widget, EMComposerPrefs *prefs) +{ + GtkTreeIter iter; + GtkTreeModel *model; + GtkTreeSelection *selection; + gboolean state; + + selection = gtk_tree_view_get_selection (prefs->language); + if (gtk_tree_selection_get_selected (selection, &model, &iter)) { + gtk_tree_model_get (model, &iter, 0, &state, -1); + gtk_list_store_set ((GtkListStore *) model, &iter, 0, !state, -1); + gtk_button_set_label ((GtkButton *) prefs->spell_able_button, state ? _("Enable") : _("Disable")); + spell_changed (prefs); + } +} + +static gboolean +spell_language_button_press (GtkTreeView *tv, GdkEventButton *event, EMComposerPrefs *prefs) +{ + GtkTreePath *path = NULL; + GtkTreeViewColumn *column = NULL; + gtk_tree_view_get_path_at_pos (tv, event->x, event->y, &path, &column, NULL, NULL); + + /* FIXME: This routine should just be a "toggled" event handler on the checkbox cell renderer which + has "activatable" set. */ + + if (path != NULL && column != NULL && !strcmp (gtk_tree_view_column_get_title (column), _("Enabled"))) { + GtkTreeIter iter; + GtkTreeModel *model; + gboolean enabled; + + model = gtk_tree_view_get_model (tv); + gtk_tree_model_get_iter (model, &iter, path); + gtk_tree_model_get (model, &iter, 0, &enabled, -1); + gtk_list_store_set ((GtkListStore *) model, &iter, 0, !enabled, -1); + gtk_button_set_label ((GtkButton *) prefs->spell_able_button, enabled ? _("Enable") : _("Disable")); + spell_changed (prefs); + } + + return FALSE; +} + +static void +spell_setup (EMComposerPrefs *prefs) +{ + GtkListStore *model; + GtkTreeIter iter; + int i; + + model = (GtkListStore *) gtk_tree_view_get_model (prefs->language); + + if (prefs->language_seq) { + for (i = 0; i < prefs->language_seq->_length; i++) { + gtk_list_store_append (model, &iter); + gtk_list_store_set (model, &iter, + 1, _(prefs->language_seq->_buffer[i].name), + 2, prefs->language_seq->_buffer[i].abbreviation, + -1); + } + } + + spell_load_values (prefs); + spell_set_ui (prefs); + + glade_xml_signal_connect_data (prefs->gui, "spellColorSet", G_CALLBACK (spell_color_set), prefs); + glade_xml_signal_connect_data (prefs->gui, "spellLanguageEnable", GTK_SIGNAL_FUNC (spell_language_enable), prefs); + + g_signal_connect (prefs->language, "button_press_event", G_CALLBACK (spell_language_button_press), prefs); +} + +static gboolean +spell_setup_check_options (EMComposerPrefs *prefs) +{ + GNOME_Spell_Dictionary dict; + CORBA_Environment ev; + char *dictionary_id; + + dictionary_id = "OAFIID:GNOME_Spell_Dictionary:" SPELL_API_VERSION; + dict = bonobo_activation_activate_from_id (dictionary_id, 0, NULL, NULL); + if (dict == CORBA_OBJECT_NIL) { + g_warning ("Cannot activate %s", dictionary_id); + + return FALSE; + } + + CORBA_exception_init (&ev); + prefs->language_seq = GNOME_Spell_Dictionary_getLanguages (dict, &ev); + if (ev._major != CORBA_NO_EXCEPTION) + prefs->language_seq = NULL; + CORBA_exception_free (&ev); + + if (prefs->language_seq == NULL) + return FALSE; + + gconf_client_add_dir (prefs->gconf, GNOME_SPELL_GCONF_DIR, GCONF_CLIENT_PRELOAD_NONE, NULL); + + spell_setup (prefs); + + return TRUE; +} + +/* + * End of Spell checking + */ + +static void +em_composer_prefs_construct (EMComposerPrefs *prefs) +{ + GtkWidget *toplevel, *widget, *menu, *info_pixmap; + GtkDialog *dialog; + GladeXML *gui; + GtkListStore *model; + GtkTreeSelection *selection; + gboolean bool; + int style; + char *buf; + + prefs->gconf = mail_config_get_gconf_client (); + + gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", "composer_tab", NULL); + prefs->gui = gui; + prefs->sig_script_gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", "vbox_add_script_signature", NULL); + + /* get our toplevel widget */ + toplevel = glade_xml_get_widget (gui, "toplevel"); + + /* reparent */ + gtk_widget_ref (toplevel); + gtk_container_remove (GTK_CONTAINER (toplevel->parent), toplevel); + gtk_container_add (GTK_CONTAINER (prefs), toplevel); + gtk_widget_unref (toplevel); + + /* General tab */ + + /* Default Behavior */ + prefs->send_html = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkSendHTML")); + bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/composer/send_html", NULL); + gtk_toggle_button_set_active (prefs->send_html, bool); + g_signal_connect (prefs->send_html, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + + prefs->prompt_empty_subject = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkPromptEmptySubject")); + bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/prompts/empty_subject", NULL); + gtk_toggle_button_set_active (prefs->prompt_empty_subject, bool); + g_signal_connect (prefs->prompt_empty_subject, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + + prefs->prompt_bcc_only = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkPromptBccOnly")); + bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/prompts/only_bcc", NULL); + gtk_toggle_button_set_active (prefs->prompt_bcc_only, bool); + g_signal_connect (prefs->prompt_bcc_only, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + + prefs->auto_smileys = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkAutoSmileys")); + bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/composer/magic_smileys", NULL); + gtk_toggle_button_set_active (prefs->auto_smileys, bool); + g_signal_connect (prefs->auto_smileys, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + + prefs->spell_check = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkEnableSpellChecking")); + bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/composer/inline_spelling", NULL); + gtk_toggle_button_set_active (prefs->spell_check, bool); + g_signal_connect (prefs->spell_check, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + + prefs->charset = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuCharset")); + buf = gconf_client_get_string (prefs->gconf, "/apps/evolution/mail/composer/charset", NULL); + menu = e_charset_picker_new (buf && *buf ? buf : e_iconv_locale_charset ()); + gtk_option_menu_set_menu (prefs->charset, GTK_WIDGET (menu)); + option_menu_connect (prefs->charset, prefs); + g_free (buf); + + /* Spell Checking: GNOME Spell part */ + prefs->colour = GNOME_COLOR_PICKER (glade_xml_get_widget (gui, "colorpickerSpellCheckColor")); + prefs->language = GTK_TREE_VIEW (glade_xml_get_widget (gui, "clistSpellCheckLanguage")); + model = gtk_list_store_new (3, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_POINTER); + gtk_tree_view_set_model (prefs->language, (GtkTreeModel *) model); + gtk_tree_view_insert_column_with_attributes (prefs->language, -1, _("Enabled"), + gtk_cell_renderer_toggle_new (), + "active", 0, + NULL); + gtk_tree_view_insert_column_with_attributes (prefs->language, -1, _("Language(s)"), + gtk_cell_renderer_text_new (), + "text", 1, + NULL); + selection = gtk_tree_view_get_selection (prefs->language); + gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); + g_signal_connect (selection, "changed", G_CALLBACK (spell_language_selection_changed), prefs); +#if 0 + gtk_clist_set_column_justification (prefs->language, 0, GTK_JUSTIFY_RIGHT); + gtk_clist_set_column_auto_resize (prefs->language, 0, TRUE); +#endif + + prefs->spell_able_button = glade_xml_get_widget (gui, "buttonSpellCheckEnable"); + info_pixmap = glade_xml_get_widget (gui, "pixmapSpellInfo"); + gtk_image_set_from_file (GTK_IMAGE (info_pixmap), EVOLUTION_IMAGES "/info-bulb.png"); + if (!spell_setup_check_options (prefs)) { + gtk_widget_hide (GTK_WIDGET (prefs->colour)); + gtk_widget_hide (GTK_WIDGET (prefs->language)); + } + + /* Forwards and Replies */ + prefs->forward_style = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuForwardStyle")); + style = gconf_client_get_int (prefs->gconf, "/apps/evolution/mail/format/forward_style", NULL); + gtk_option_menu_set_history (prefs->forward_style, style); + style = 0; + gtk_container_foreach (GTK_CONTAINER (gtk_option_menu_get_menu (prefs->forward_style)), + attach_style_info, &style); + option_menu_connect (prefs->forward_style, prefs); + + prefs->reply_style = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuReplyStyle")); + style = gconf_client_get_int (prefs->gconf, "/apps/evolution/mail/format/reply_style", NULL); + gtk_option_menu_set_history (prefs->reply_style, style); + style = 0; + gtk_container_foreach (GTK_CONTAINER (gtk_option_menu_get_menu (prefs->reply_style)), + attach_style_info, &style); + option_menu_connect (prefs->reply_style, prefs); + + /* Signatures */ + dialog = (GtkDialog *) gtk_dialog_new (); + prefs->sig_script_dialog = (GtkWidget *) dialog; + gtk_dialog_add_buttons (dialog, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, + GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); + gtk_window_set_title ((GtkWindow *) dialog, _("Add script signature")); + g_signal_connect (dialog, "response", G_CALLBACK (sig_add_script_response), prefs); + widget = glade_xml_get_widget (prefs->sig_script_gui, "vbox_add_script_signature"); + gtk_box_pack_start_defaults ((GtkBox *) dialog->vbox, widget); + + prefs->sig_add = GTK_BUTTON (glade_xml_get_widget (gui, "cmdSignatureAdd")); + g_signal_connect (prefs->sig_add, "clicked", G_CALLBACK (sig_add_cb), prefs); + + glade_xml_signal_connect_data (gui, "cmdSignatureAddScriptClicked", + G_CALLBACK (sig_add_script_cb), prefs); + + prefs->sig_edit = GTK_BUTTON (glade_xml_get_widget (gui, "cmdSignatureEdit")); + g_signal_connect (prefs->sig_edit, "clicked", G_CALLBACK (sig_edit_cb), prefs); + + prefs->sig_delete = GTK_BUTTON (glade_xml_get_widget (gui, "cmdSignatureDelete")); + g_signal_connect (prefs->sig_delete, "clicked", G_CALLBACK (sig_delete_cb), prefs); + + prefs->sig_list = GTK_TREE_VIEW (glade_xml_get_widget (gui, "clistSignatures")); + model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_POINTER); + gtk_tree_view_set_model (prefs->sig_list, (GtkTreeModel *)model); + gtk_tree_view_insert_column_with_attributes (prefs->sig_list, -1, _("Signature(s)"), + gtk_cell_renderer_text_new (), + "text", 0, + NULL); + selection = gtk_tree_view_get_selection (prefs->sig_list); + gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); + g_signal_connect (selection, "changed", G_CALLBACK (sig_selection_changed), prefs); + + sig_fill_clist (prefs->sig_list); + if (mail_config_get_signature_list () == NULL) { + gtk_widget_set_sensitive ((GtkWidget *) prefs->sig_delete, FALSE); + gtk_widget_set_sensitive ((GtkWidget *) prefs->sig_edit, FALSE); + } + + /* preview GtkHTML widget */ + widget = glade_xml_get_widget (gui, "scrolled-sig"); + prefs->sig_preview = (GtkHTML *) gtk_html_new (); + g_signal_connect (prefs->sig_preview, "url_requested", G_CALLBACK (url_requested), NULL); + gtk_widget_show (GTK_WIDGET (prefs->sig_preview)); + gtk_container_add (GTK_CONTAINER (widget), GTK_WIDGET (prefs->sig_preview)); + + mail_config_signature_register_client ((MailConfigSignatureClient) sig_event_client, prefs); +} + + +GtkWidget * +em_composer_prefs_new (void) +{ + EMComposerPrefs *new; + + new = (EMComposerPrefs *) g_object_new (em_composer_prefs_get_type (), NULL); + em_composer_prefs_construct (new); + + return (GtkWidget *) new; +} + + +void +em_composer_prefs_apply (EMComposerPrefs *prefs) +{ + GtkWidget *menu, *item; + char *string; + int val; + + /* General tab */ + + /* Default Behavior */ + gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/composer/send_html", + gtk_toggle_button_get_active (prefs->send_html), NULL); + + gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/prompts/empty_subject", + gtk_toggle_button_get_active (prefs->prompt_empty_subject), NULL); + + gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/prompts/only_bcc", + gtk_toggle_button_get_active (prefs->prompt_bcc_only), NULL); + + gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/composer/inline_spelling", + gtk_toggle_button_get_active (prefs->spell_check), NULL); + + gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/composer/magic_smileys", + gtk_toggle_button_get_active (prefs->auto_smileys), NULL); + + menu = gtk_option_menu_get_menu (prefs->charset); + if (!(string = e_charset_picker_get_charset (menu))) + string = g_strdup (e_iconv_locale_charset ()); + + gconf_client_set_string (prefs->gconf, "/apps/evolution/mail/composer/charset", string, NULL); + g_free (string); + + /* Spell Checking */ + spell_apply (prefs); + + /* Forwards and Replies */ + menu = gtk_option_menu_get_menu (prefs->forward_style); + item = gtk_menu_get_active (GTK_MENU (menu)); + val = GPOINTER_TO_INT (g_object_get_data ((GObject *) item, "style")); + gconf_client_set_int (prefs->gconf, "/apps/evolution/mail/format/forward_style", val, NULL); + + menu = gtk_option_menu_get_menu (prefs->reply_style); + item = gtk_menu_get_active (GTK_MENU (menu)); + val = GPOINTER_TO_INT (g_object_get_data ((GObject *) item, "style")); + gconf_client_set_int (prefs->gconf, "/apps/evolution/mail/format/reply_style", val, NULL); + + /* Keyboard Shortcuts */ + /* FIXME: implement me */ + + /* Signatures */ + /* FIXME: implement me */ + + gconf_client_suggest_sync (prefs->gconf, NULL); +} diff --git a/mail/em-composer-prefs.h b/mail/em-composer-prefs.h new file mode 100644 index 0000000000..0e4ad636c4 --- /dev/null +++ b/mail/em-composer-prefs.h @@ -0,0 +1,130 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: Jeffrey Stedfast + * + * Copyright 2002-2003 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 __EM_COMPOSER_PREFS_H__ +#define __EM_COMPOSER_PREFS_H__ + +#ifdef __cplusplus +extern "C" { +#pragma } +#endif /* __cplusplus */ + +#include +#include +#include + +#include +#include +#include + +#include "mail-signature-editor.h" + +#include "evolution-config-control.h" + +#include +#include "Spell.h" + +#define EM_COMPOSER_PREFS_TYPE (em_composer_prefs_get_type ()) +#define EM_COMPOSER_PREFS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EM_COMPOSER_PREFS_TYPE, EMComposerPrefs)) +#define EM_COMPOSER_PREFS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EM_COMPOSER_PREFS_TYPE, EMComposerPrefsClass)) +#define EM_IS_COMPOSER_PREFS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EM_COMPOSER_PREFS_TYPE)) +#define EM_IS_COMPOSER_PREFS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EM_COMPOSER_PREFS_TYPE)) + +typedef struct _EMComposerPrefs EMComposerPrefs; +typedef struct _EMComposerPrefsClass EMComposerPrefsClass; + +struct _EMComposerPrefs { + GtkVBox parent_object; + + EvolutionConfigControl *control; + + GConfClient *gconf; + + GladeXML *gui; + + /* General tab */ + + /* Default Behavior */ + GtkToggleButton *send_html; + GtkToggleButton *auto_smileys; + GtkToggleButton *prompt_empty_subject; + GtkToggleButton *prompt_bcc_only; + GtkOptionMenu *charset; + + GtkToggleButton *spell_check; + GnomeColorPicker *colour; + GtkTreeView *language; + CORBA_sequence_GNOME_Spell_Language *language_seq; + gboolean spell_active; + char *language_str; + char *language_str_orig; + GdkColor spell_error_color; + GdkColor spell_error_color_orig; + GdkPixmap *mark_pixmap; + GdkBitmap *mark_bitmap; + GdkPixbuf *enabled_pixbuf; + GtkWidget *spell_able_button; + + /* Forwards and Replies */ + GtkOptionMenu *forward_style; + GtkOptionMenu *reply_style; + + /* Keyboard Shortcuts */ + GtkOptionMenu *shortcuts_type; + + /* Signatures */ + GtkTreeView *sig_list; + GtkButton *sig_add; + GtkButton *sig_edit; + GtkButton *sig_delete; + GtkHTML *sig_preview; + gboolean sig_switch; + int sig_row; + GladeXML *sig_script_gui; + GtkWidget *sig_script_dialog; +}; + +struct _EMComposerPrefsClass { + GtkVBoxClass parent_class; + + /* signals */ + +}; + + +GType em_composer_prefs_get_type (void); + +GtkWidget *em_composer_prefs_new (void); + +void em_composer_prefs_apply (EMComposerPrefs *prefs); + +MailConfigSignature *em_composer_prefs_new_signature (GtkWindow *parent, gboolean html, const char *script); + +/* needed by global config */ +#define EM_COMPOSER_PREFS_CONTROL_ID "OAFIID:GNOME_Evolution_Mail_ComposerPrefs_ConfigControl" + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __EM_COMPOSER_PREFS_H__ */ diff --git a/mail/em-mailer-prefs.c b/mail/em-mailer-prefs.c new file mode 100644 index 0000000000..b391af1655 --- /dev/null +++ b/mail/em-mailer-prefs.c @@ -0,0 +1,474 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: Jeffrey Stedfast + * + * Copyright 2002-2003 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. + * + */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +#include "em-mailer-prefs.h" + +#include +#include +#include "widgets/misc/e-charset-picker.h" +#include + +#include "mail-config.h" + + +static void em_mailer_prefs_class_init (EMMailerPrefsClass *class); +static void em_mailer_prefs_init (EMMailerPrefs *dialog); +static void em_mailer_prefs_finalise (GObject *obj); + +static GtkVBoxClass *parent_class = NULL; + + +GtkType +em_mailer_prefs_get_type (void) +{ + static GType type = 0; + + if (!type) { + GTypeInfo type_info = { + sizeof (EMMailerPrefsClass), + NULL, NULL, + (GClassInitFunc) em_mailer_prefs_class_init, + NULL, NULL, + sizeof (EMMailerPrefs), + 0, + (GInstanceInitFunc) em_mailer_prefs_init, + }; + + type = g_type_register_static (gtk_vbox_get_type (), "EMMailerPrefs", &type_info, 0); + } + + return type; +} + +static void +em_mailer_prefs_class_init (EMMailerPrefsClass *klass) +{ + GObjectClass *object_class; + + object_class = (GObjectClass *) klass; + parent_class = g_type_class_ref (gtk_vbox_get_type ()); + + object_class->finalize = em_mailer_prefs_finalise; +} + +static void +em_mailer_prefs_init (EMMailerPrefs *preferences) +{ + preferences->gconf = mail_config_get_gconf_client (); +} + +static void +em_mailer_prefs_finalise (GObject *obj) +{ + EMMailerPrefs *prefs = (EMMailerPrefs *) obj; + + g_object_unref (prefs->gui); + + ((GObjectClass *)(parent_class))->finalize (obj); +} + + +static void +colorpicker_set_color (GnomeColorPicker *color, const char *str) +{ + GdkColor colour; + guint32 rgb; + + gdk_color_parse (str, &colour); + rgb = ((colour.red & 0xff00) << 8) | (colour.green & 0xff00) | ((colour.blue & 0xff00) >> 8); + + gnome_color_picker_set_i8 (color, (rgb & 0xff0000) >> 16, (rgb & 0xff00) >> 8, rgb & 0xff, 0xff); +} + +static guint32 +colorpicker_get_color (GnomeColorPicker *color) +{ + guint8 r, g, b, a; + guint32 rgb = 0; + + gnome_color_picker_get_i8 (color, &r, &g, &b, &a); + + rgb = r; + rgb <<= 8; + rgb |= g; + rgb <<= 8; + rgb |= b; + + return rgb; +} + +static void +settings_changed (GtkWidget *widget, gpointer user_data) +{ + EMMailerPrefs *prefs = (EMMailerPrefs *) user_data; + + if (prefs->control) + evolution_config_control_changed (prefs->control); +} + +static void +font_share_changed (GtkWidget *w, gpointer user_data) +{ + EMMailerPrefs *prefs = (EMMailerPrefs *) user_data; + gboolean use_custom; + + use_custom = !gtk_toggle_button_get_active (prefs->font_share); + + gtk_widget_set_sensitive (GTK_WIDGET (prefs->font_fixed), use_custom); + gtk_widget_set_sensitive (GTK_WIDGET (prefs->font_variable), use_custom); + + if (prefs->control) + evolution_config_control_changed (prefs->control); +} + +static void +font_changed (GnomeFontPicker *fontpicker, gchar *arg1, gpointer user_data) +{ + EMMailerPrefs *prefs = (EMMailerPrefs *) user_data; + + if (prefs->control) + evolution_config_control_changed (prefs->control); +} + +static void +color_set (GtkWidget *widget, guint r, guint g, guint b, guint a, gpointer user_data) +{ + EMMailerPrefs *prefs = (EMMailerPrefs *) user_data; + + if (prefs->control) + evolution_config_control_changed (prefs->control); +} + +static void +restore_labels_clicked (GtkWidget *widget, gpointer user_data) +{ + EMMailerPrefs *prefs = (EMMailerPrefs *) user_data; + int i; + + for (i = 0; i < 5; i++) { + gtk_entry_set_text (prefs->labels[i].name, _(label_defaults[i].name)); + colorpicker_set_color (prefs->labels[i].color, label_defaults[i].colour); + } +} + +static void +menu_changed (GtkWidget *widget, gpointer user_data) +{ + EMMailerPrefs *prefs = (EMMailerPrefs *) user_data; + + if (prefs->control) + evolution_config_control_changed (prefs->control); +} + +static void +option_menu_connect (GtkOptionMenu *omenu, gpointer user_data) +{ + GtkWidget *menu, *item; + GList *items; + + menu = gtk_option_menu_get_menu (omenu); + + items = GTK_MENU_SHELL (menu)->children; + while (items) { + item = items->data; + g_signal_connect (item, "activate", G_CALLBACK (menu_changed), user_data); + items = items->next; + } +} + +static void +em_mailer_prefs_construct (EMMailerPrefs *prefs) +{ + GtkWidget *toplevel, *menu; + GSList *list; + GladeXML *gui; + gboolean bool; + char *font; + int i, val; + char *buf; + + gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", "preferences_tab", NULL); + prefs->gui = gui; + + /* get our toplevel widget */ + toplevel = glade_xml_get_widget (gui, "toplevel"); + + /* reparent */ + gtk_widget_ref (toplevel); + gtk_container_remove (GTK_CONTAINER (toplevel->parent), toplevel); + gtk_container_add (GTK_CONTAINER (prefs), toplevel); + gtk_widget_unref (toplevel); + + /* General tab */ + + /* Message Display */ + prefs->timeout_toggle = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkMarkTimeout")); + bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/display/mark_seen", NULL); + gtk_toggle_button_set_active (prefs->timeout_toggle, bool); + g_signal_connect (prefs->timeout_toggle, "toggled", G_CALLBACK (settings_changed), prefs); + + prefs->timeout = GTK_SPIN_BUTTON (glade_xml_get_widget (gui, "spinMarkTimeout")); + val = gconf_client_get_int (prefs->gconf, "/apps/evolution/mail/display/mark_seen_timeout", NULL); + gtk_spin_button_set_value (prefs->timeout, (1.0 * val) / 1000.0); + g_signal_connect (prefs->timeout, "value-changed", G_CALLBACK (settings_changed), prefs); + + prefs->charset = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuCharset")); + buf = gconf_client_get_string (prefs->gconf, "/apps/evolution/mail/display/charset", NULL); + menu = e_charset_picker_new (buf && *buf ? buf : e_iconv_locale_charset ()); + gtk_option_menu_set_menu (prefs->charset, GTK_WIDGET (menu)); + option_menu_connect (prefs->charset, prefs); + g_free (buf); + + prefs->citation_highlight = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkHighlightCitations")); + bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/display/mark_citations", NULL); + gtk_toggle_button_set_active (prefs->citation_highlight, bool); + g_signal_connect (prefs->citation_highlight, "toggled", G_CALLBACK (settings_changed), prefs); + + prefs->citation_color = GNOME_COLOR_PICKER (glade_xml_get_widget (gui, "colorpickerHighlightCitations")); + buf = gconf_client_get_string (prefs->gconf, "/apps/evolution/mail/display/citation_colour", NULL); + colorpicker_set_color (prefs->citation_color, buf ? buf : "#737373"); + g_signal_connect (prefs->citation_color, "color-set", G_CALLBACK (color_set), prefs); + g_free (buf); + + /* Deleting Mail */ + prefs->empty_trash = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkEmptyTrashOnExit")); + bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/trash/empty_on_exit", NULL); + gtk_toggle_button_set_active (prefs->empty_trash, bool); + g_signal_connect (prefs->empty_trash, "toggled", G_CALLBACK (settings_changed), prefs); + + prefs->confirm_expunge = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkConfirmExpunge")); + bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/prompts/expunge", NULL); + gtk_toggle_button_set_active (prefs->confirm_expunge, bool); + g_signal_connect (prefs->confirm_expunge, "toggled", G_CALLBACK (settings_changed), prefs); + + /* New Mail Notification */ + val = gconf_client_get_int (prefs->gconf, "/apps/evolution/mail/notify/type", NULL); + prefs->notify_not = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radNotifyNot")); + gtk_toggle_button_set_active (prefs->notify_not, val == MAIL_CONFIG_NOTIFY_NOT); + g_signal_connect (prefs->notify_not, "toggled", G_CALLBACK (settings_changed), prefs); + + prefs->notify_beep = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radNotifyBeep")); + gtk_toggle_button_set_active (prefs->notify_beep, val == MAIL_CONFIG_NOTIFY_BEEP); + g_signal_connect (prefs->notify_beep, "toggled", G_CALLBACK (settings_changed), prefs); + + prefs->notify_play_sound = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radNotifyPlaySound")); + gtk_toggle_button_set_active (prefs->notify_play_sound, val == MAIL_CONFIG_NOTIFY_PLAY_SOUND); + g_signal_connect (prefs->notify_play_sound, "toggled", G_CALLBACK (settings_changed), prefs); + + prefs->notify_sound_file = GNOME_FILE_ENTRY (glade_xml_get_widget (gui, "fileNotifyPlaySound")); + buf = gconf_client_get_string (prefs->gconf, "/apps/evolution/mail/notify/sound", NULL); + gtk_entry_set_text (GTK_ENTRY (gnome_file_entry_gtk_entry (prefs->notify_sound_file)), buf ? buf : ""); + g_signal_connect (gnome_file_entry_gtk_entry (prefs->notify_sound_file), "changed", + G_CALLBACK (settings_changed), prefs); + g_free (buf); + + /* Mail Fonts */ + font = gconf_client_get_string (prefs->gconf, "/apps/evolution/mail/display/fonts/monospace", NULL); + prefs->font_fixed = GNOME_FONT_PICKER (glade_xml_get_widget (gui, "radFontFixed")); + gnome_font_picker_set_font_name (prefs->font_fixed, font); + g_signal_connect (prefs->font_fixed, "font-set", G_CALLBACK (font_changed), prefs); + + font = gconf_client_get_string (prefs->gconf, "/apps/evolution/mail/display/fonts/variable", NULL); + prefs->font_variable = GNOME_FONT_PICKER (glade_xml_get_widget (gui, "radFontVariable")); + gnome_font_picker_set_font_name (prefs->font_variable, font); + g_signal_connect (prefs->font_variable, "font-set", G_CALLBACK (font_changed), prefs); + + bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/display/fonts/use_custom", NULL); + prefs->font_share = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radFontUseSame")); + gtk_toggle_button_set_active (prefs->font_share, !bool); + g_signal_connect (prefs->font_share, "toggled", G_CALLBACK (font_share_changed), prefs); + font_share_changed (GTK_WIDGET (prefs->font_share), prefs); + + /* HTML Mail tab */ + + /* Loading Images */ + + val = gconf_client_get_int (prefs->gconf, "/apps/evolution/mail/display/load_http_images", NULL); + prefs->images_never = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radImagesNever")); + gtk_toggle_button_set_active (prefs->images_never, val == MAIL_CONFIG_HTTP_NEVER); + g_signal_connect (prefs->images_never, "toggled", G_CALLBACK (settings_changed), prefs); + + prefs->images_sometimes = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radImagesSometimes")); + gtk_toggle_button_set_active (prefs->images_sometimes, val == MAIL_CONFIG_HTTP_SOMETIMES); + g_signal_connect (prefs->images_sometimes, "toggled", G_CALLBACK (settings_changed), prefs); + + prefs->images_always = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radImagesAlways")); + gtk_toggle_button_set_active (prefs->images_always, val == MAIL_CONFIG_HTTP_ALWAYS); + g_signal_connect (prefs->images_always, "toggled", G_CALLBACK (settings_changed), prefs); + + prefs->show_animated = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkShowAnimatedImages")); + bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/display/animate_images", NULL); + gtk_toggle_button_set_active (prefs->show_animated, bool); + g_signal_connect (prefs->show_animated, "toggled", G_CALLBACK (settings_changed), prefs); + + prefs->prompt_unwanted_html = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkPromptWantHTML")); + bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/prompts/unwanted_html", NULL); + gtk_toggle_button_set_active (prefs->prompt_unwanted_html, bool); + g_signal_connect (prefs->prompt_unwanted_html, "toggled", G_CALLBACK (settings_changed), prefs); + + i = 0; + list = mail_config_get_labels (); + while (list != NULL && i < 5) { + MailConfigLabel *label; + char *widget_name; + + label = list->data; + + widget_name = g_strdup_printf ("txtLabel%d", i); + prefs->labels[i].name = GTK_ENTRY (glade_xml_get_widget (gui, widget_name)); + g_free (widget_name); + + widget_name = g_strdup_printf ("colorLabel%d", i); + prefs->labels[i].color = GNOME_COLOR_PICKER (glade_xml_get_widget (gui, widget_name)); + g_free (widget_name); + + gtk_entry_set_text (prefs->labels[i].name, label->name); + g_signal_connect (prefs->labels[i].name, "changed", G_CALLBACK (settings_changed), prefs); + + colorpicker_set_color (prefs->labels[i].color, label->colour); + g_signal_connect (prefs->labels[i].color, "color_set", G_CALLBACK (color_set), prefs); + + i++; + list = list->next; + } + + prefs->restore_labels = GTK_BUTTON (glade_xml_get_widget (gui, "cmdRestoreLabels")); + g_signal_connect (prefs->restore_labels, "clicked", G_CALLBACK (restore_labels_clicked), prefs); +} + + +GtkWidget * +em_mailer_prefs_new (void) +{ + EMMailerPrefs *new; + + new = (EMMailerPrefs *) g_object_new (em_mailer_prefs_get_type (), NULL); + em_mailer_prefs_construct (new); + + return (GtkWidget *) new; +} + + +void +em_mailer_prefs_apply (EMMailerPrefs *prefs) +{ + GtkWidget *entry, *menu; + char *string, buf[20]; + const char *cstring; + GSList *list, *l, *n; + guint32 rgb; + int i, val; + + /* General tab */ + + /* Message Display */ + gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/display/mark_seen", + gtk_toggle_button_get_active (prefs->timeout_toggle), NULL); + + val = (int) (gtk_spin_button_get_value (prefs->timeout) * 1000.0); + gconf_client_set_int (prefs->gconf, "/apps/evolution/mail/display/mark_seen_timeout", val, NULL); + + menu = gtk_option_menu_get_menu (prefs->charset); + if (!(string = e_charset_picker_get_charset (menu))) + string = g_strdup (e_iconv_locale_charset ()); + + gconf_client_set_string (prefs->gconf, "/apps/evolution/mail/display/charset", string, NULL); + g_free (string); + + gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/display/mark_citations", + gtk_toggle_button_get_active (prefs->citation_highlight), NULL); + + rgb = colorpicker_get_color (prefs->citation_color); + sprintf (buf,"#%06x", rgb & 0xffffff); + gconf_client_set_string (prefs->gconf, "/apps/evolution/mail/display/citation_colour", buf, NULL); + + /* Deleting Mail */ + gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/trash/empty_on_exit", + gtk_toggle_button_get_active (prefs->empty_trash), NULL); + + gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/prompts/expunge", + gtk_toggle_button_get_active (prefs->confirm_expunge), NULL); + + /* New Mail Notification */ + if (gtk_toggle_button_get_active (prefs->notify_not)) + val = MAIL_CONFIG_NOTIFY_NOT; + else if (gtk_toggle_button_get_active (prefs->notify_beep)) + val = MAIL_CONFIG_NOTIFY_BEEP; + else + val = MAIL_CONFIG_NOTIFY_PLAY_SOUND; + + gconf_client_set_int (prefs->gconf, "/apps/evolution/mail/notify/type", val, NULL); + + entry = gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (prefs->notify_sound_file)); + cstring = gtk_entry_get_text (GTK_ENTRY (entry)); + gconf_client_set_string (prefs->gconf, "/apps/evolution/mail/notify/sound", cstring, NULL); + + /* HTML Mail */ + if (gtk_toggle_button_get_active (prefs->images_always)) + val = MAIL_CONFIG_HTTP_ALWAYS; + else if (gtk_toggle_button_get_active (prefs->images_sometimes)) + val = MAIL_CONFIG_HTTP_SOMETIMES; + else + val = MAIL_CONFIG_HTTP_NEVER; + + gconf_client_set_int (prefs->gconf, "/apps/evolution/mail/display/load_http_images", val, NULL); + + gconf_client_set_string (prefs->gconf, "/apps/evolution/mail/display/fonts/variable", + gnome_font_picker_get_font_name (prefs->font_variable), NULL); + gconf_client_set_string (prefs->gconf, "/apps/evolution/mail/display/fonts/monospace", + gnome_font_picker_get_font_name (prefs->font_fixed), NULL); + gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/display/fonts/use_custom", + !gtk_toggle_button_get_active (prefs->font_share), NULL); + gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/display/animate_images", + gtk_toggle_button_get_active (prefs->show_animated), NULL); + + gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/prompts/unwanted_html", + gtk_toggle_button_get_active (prefs->prompt_unwanted_html), NULL); + + /* Labels and Colours */ + list = NULL; + for (i = 4; i >= 0; i--) { + cstring = gtk_entry_get_text (prefs->labels[i].name); + rgb = colorpicker_get_color (prefs->labels[i].color); + string = g_strdup_printf ("%s:#%06x", cstring, rgb & 0xffffff); + list = g_slist_prepend (list, string); + } + + gconf_client_set_list (prefs->gconf, "/apps/evolution/mail/labels", GCONF_VALUE_STRING, list, NULL); + + l = list; + while (l != NULL) { + n = l->next; + g_free (l->data); + g_slist_free_1 (l); + l = n; + } + + gconf_client_suggest_sync (prefs->gconf, NULL); +} diff --git a/mail/em-mailer-prefs.h b/mail/em-mailer-prefs.h new file mode 100644 index 0000000000..5f547a77a6 --- /dev/null +++ b/mail/em-mailer-prefs.h @@ -0,0 +1,124 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: Jeffrey Stedfast + * + * Copyright 2002-2003 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 __EM_MAILER_PREFS_H__ +#define __EM_MAILER_PREFS_H__ + +#ifdef __cplusplus +extern "C" { +#pragma } +#endif /* __cplusplus */ + +#include +#include +#include +#include +#include +#include + +#include "evolution-config-control.h" + +#include + +#define EM_MAILER_PREFS_TYPE (em_mailer_prefs_get_type ()) +#define EM_MAILER_PREFS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EM_MAILER_PREFS_TYPE, EMMailerPrefs)) +#define EM_MAILER_PREFS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EM_MAILER_PREFS_TYPE, EMMailerPrefsClass)) +#define EM_IS_MAILER_PREFS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EM_MAILER_PREFS_TYPE)) +#define EM_IS_MAILER_PREFS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EM_MAILER_PREFS_TYPE)) + +typedef struct _EMMailerPrefs EMMailerPrefs; +typedef struct _EMMailerPrefsClass EMMailerPrefsClass; + +struct _EMMailerPrefs { + GtkVBox parent_object; + + GNOME_Evolution_Shell shell; + + EvolutionConfigControl *control; + + GladeXML *gui; + GConfClient *gconf; + + /* General tab */ + + /* Message Display */ + GtkToggleButton *timeout_toggle; + GtkSpinButton *timeout; + GtkOptionMenu *charset; + GtkToggleButton *citation_highlight; + GnomeColorPicker *citation_color; + + /* Deleting Mail */ + GtkToggleButton *empty_trash; + GtkToggleButton *confirm_expunge; + + /* New Mail Notification */ + GtkToggleButton *notify_not; + GtkToggleButton *notify_beep; + GtkToggleButton *notify_play_sound; + GnomeFileEntry *notify_sound_file; + + /* HTML Mail tab */ + GnomeFontPicker *font_variable; + GnomeFontPicker *font_fixed; + GtkToggleButton *font_share; + + /* Loading Images */ + GtkToggleButton *images_always; + GtkToggleButton *images_sometimes; + GtkToggleButton *images_never; + + GtkToggleButton *show_animated; + GtkToggleButton *autodetect_links; + GtkToggleButton *prompt_unwanted_html; + + /* Labels and Colours tab */ + struct { + GtkEntry *name; + GnomeColorPicker *color; + } labels[5]; + GtkButton *restore_labels; +}; + +struct _EMMailerPrefsClass { + GtkVBoxClass parent_class; + + /* signals */ + +}; + + +GtkType em_mailer_prefs_get_type (void); + +GtkWidget *em_mailer_prefs_new (void); + +void em_mailer_prefs_apply (EMMailerPrefs *prefs); + +/* needed by global config */ +#define EM_MAILER_PREFS_CONTROL_ID "OAFIID:GNOME_Evolution_Mail_Preferences_ConfigControl" + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __EM_MAILER_PREFS_H__ */ diff --git a/mail/mail-account-editor.c b/mail/mail-account-editor.c index b4cdbc7cef..d8f6c4df40 100644 --- a/mail/mail-account-editor.c +++ b/mail/mail-account-editor.c @@ -4,7 +4,7 @@ * Jeffrey Stedfast * Dan Winship * - * Copyright 2001 Ximian, Inc. (www.ximian.com) + * Copyright 2001-2003 Ximian, Inc. (www.ximian.com) * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public @@ -132,7 +132,7 @@ editor_response_cb (GtkWidget *widget, int button, gpointer user_data) } static void -construct (MailAccountEditor *editor, EAccount *account, MailAccountsTab *dialog) +construct (MailAccountEditor *editor, EAccount *account, EMAccountPrefs *dialog) { EAccountService *source = account->source; @@ -162,7 +162,7 @@ construct (MailAccountEditor *editor, EAccount *account, MailAccountsTab *dialog } MailAccountEditor * -mail_account_editor_new (EAccount *account, GtkWindow *parent, MailAccountsTab *dialog) +mail_account_editor_new (EAccount *account, GtkWindow *parent, EMAccountPrefs *dialog) { MailAccountEditor *new; diff --git a/mail/mail-account-editor.h b/mail/mail-account-editor.h index 2ee67f67cf..ff66a47703 100644 --- a/mail/mail-account-editor.h +++ b/mail/mail-account-editor.h @@ -2,7 +2,7 @@ /* * Authors: Jeffrey Stedfast * - * Copyright 2001 Ximian, Inc. (www.ximian.com) + * Copyright 2001-2003 Ximian, Inc. (www.ximian.com) * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public @@ -32,7 +32,7 @@ extern "C" { #include #include "mail-account-gui.h" -#include "mail-accounts.h" +#include "em-account-prefs.h" #define MAIL_ACCOUNT_EDITOR_TYPE (mail_account_editor_get_type ()) #define MAIL_ACCOUNT_EDITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MAIL_ACCOUNT_EDITOR_TYPE, MailAccountEditor)) @@ -58,7 +58,7 @@ typedef struct { GtkType mail_account_editor_get_type (void); -MailAccountEditor *mail_account_editor_new (EAccount *account, GtkWindow *parent, MailAccountsTab *dialog); +MailAccountEditor *mail_account_editor_new (EAccount *account, GtkWindow *parent, EMAccountPrefs *dialog); #ifdef __cplusplus } diff --git a/mail/mail-account-gui.c b/mail/mail-account-gui.c index 6e6ce85d2c..263051585f 100644 --- a/mail/mail-account-gui.c +++ b/mail/mail-account-gui.c @@ -42,7 +42,7 @@ #include "mail-send-recv.h" #include "mail-signature-editor.h" #include "mail-component.h" -#include "mail-composer-prefs.h" +#include "em-composer-prefs.h" #include "mail-config.h" #include "mail-ops.h" #include "mail-mt.h" @@ -1308,7 +1308,7 @@ sig_add_new_signature (GtkWidget *w, MailAccountGui *gui) parent = gtk_widget_get_toplevel (w); parent = GTK_WIDGET_TOPLEVEL (parent) ? parent : NULL; - gui->def_signature = mail_composer_prefs_new_signature ((GtkWindow *) parent, send_html, NULL); + gui->def_signature = em_composer_prefs_new_signature ((GtkWindow *) parent, send_html, NULL); gui->auto_signature = FALSE; gtk_option_menu_set_history (GTK_OPTION_MENU (gui->sig_option_menu), sig_gui_get_index (gui)); @@ -1407,7 +1407,7 @@ prepare_signatures (MailAccountGui *gui) } MailAccountGui * -mail_account_gui_new (EAccount *account, MailAccountsTab *dialog) +mail_account_gui_new (EAccount *account, EMAccountPrefs *dialog) { MailAccountGui *gui; GtkWidget *button; diff --git a/mail/mail-account-gui.h b/mail/mail-account-gui.h index d003885bd4..b2fd033491 100644 --- a/mail/mail-account-gui.h +++ b/mail/mail-account-gui.h @@ -4,7 +4,7 @@ * Jeffrey Stedfast * Dan Winship * - * Copyright 2001 Ximian, Inc. (www.ximian.com) + * Copyright 2001-2003 Ximian, Inc. (www.ximian.com) * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public @@ -36,7 +36,7 @@ extern "C" { #include #include "mail-config.h" -#include "mail-accounts.h" +#include "em-account-prefs.h" typedef struct { GtkOptionMenu *type; @@ -59,7 +59,7 @@ typedef struct { typedef struct { EAccount *account; - MailAccountsTab *dialog; + EMAccountPrefs *dialog; GladeXML *xml; /* identity */ @@ -114,7 +114,7 @@ typedef struct { } MailAccountGui; -MailAccountGui *mail_account_gui_new (EAccount *account, MailAccountsTab *dialog); +MailAccountGui *mail_account_gui_new (EAccount *account, EMAccountPrefs *dialog); void mail_account_gui_setup (MailAccountGui *gui, GtkWidget *top); gboolean mail_account_gui_save (MailAccountGui *gui); void mail_account_gui_destroy (MailAccountGui *gui); diff --git a/mail/mail-accounts.c b/mail/mail-accounts.c deleted file mode 100644 index b17652bb66..0000000000 --- a/mail/mail-accounts.c +++ /dev/null @@ -1,580 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: Jeffrey Stedfast - * - * Copyright 2002 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. - * - */ - - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "mail-accounts.h" - -#include - -#include -#include - -#include "mail.h" -#include "mail-component.h" -#include "mail-config.h" -#include "mail-config-druid.h" -#include "mail-account-editor.h" -#include "mail-ops.h" -#include "mail-send-recv.h" - -#include "art/mark.xpm" - - -static void mail_accounts_tab_class_init (MailAccountsTabClass *class); -static void mail_accounts_tab_init (MailAccountsTab *prefs); -static void mail_accounts_tab_finalise (GObject *obj); -static void mail_accounts_tab_destroy (GtkObject *object); - -static void mail_accounts_load (MailAccountsTab *tab); - -static GdkPixbuf *disabled_pixbuf = NULL; -static GdkPixbuf *enabled_pixbuf = NULL; - -static GtkVBoxClass *parent_class = NULL; - - -#define PREFS_WINDOW(prefs) GTK_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (prefs), GTK_TYPE_WINDOW)) - - -GType -mail_accounts_tab_get_type (void) -{ - static GType type = 0; - - if (!type) { - GTypeInfo type_info = { - sizeof (MailAccountsTabClass), - NULL, NULL, - (GClassInitFunc) mail_accounts_tab_class_init, - NULL, NULL, - sizeof (MailAccountsTab), - 0, - (GInstanceInitFunc) mail_accounts_tab_init, - }; - - type = g_type_register_static (gtk_vbox_get_type (), "MailAccountsTab", &type_info, 0); - } - - return type; -} - -static void -mail_accounts_tab_class_init (MailAccountsTabClass *klass) -{ - GtkObjectClass *gtk_object_class = (GtkObjectClass *) klass; - GObjectClass *object_class = (GObjectClass *) klass; - - parent_class = g_type_class_ref (gtk_vbox_get_type ()); - - gtk_object_class->destroy = mail_accounts_tab_destroy; - - object_class->finalize = mail_accounts_tab_finalise; - - /* setup static data */ - disabled_pixbuf = NULL; - enabled_pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) mark_xpm); -} - -static void -mail_accounts_tab_init (MailAccountsTab *prefs) -{ - prefs->druid = NULL; - prefs->editor = NULL; - - gdk_pixbuf_render_pixmap_and_mask (enabled_pixbuf, &prefs->mark_pixmap, &prefs->mark_bitmap, 128); -} - -static void -mail_accounts_tab_destroy (GtkObject *obj) -{ - MailAccountsTab *prefs = (MailAccountsTab *) obj; - - prefs->destroyed = TRUE; - - GTK_OBJECT_CLASS (parent_class)->destroy (obj); -} - -static void -mail_accounts_tab_finalise (GObject *obj) -{ - MailAccountsTab *prefs = (MailAccountsTab *) obj; - - g_object_unref (prefs->gui); - gdk_pixmap_unref (prefs->mark_pixmap); - g_object_unref (prefs->mark_bitmap); - - G_OBJECT_CLASS (parent_class)->finalize (obj); -} - -static void -account_add_finished (MailAccountsTab *prefs, GObject *deadbeef) -{ - /* Either Cancel or Finished was clicked in the druid so reload the accounts */ - prefs->druid = NULL; - - if (!prefs->destroyed) - mail_accounts_load (prefs); - - g_object_unref (prefs); -} - -static void -account_add_clicked (GtkButton *button, gpointer user_data) -{ - MailAccountsTab *prefs = (MailAccountsTab *) user_data; - GtkWidget *parent; - - if (prefs->druid == NULL) { - prefs->druid = (GtkWidget *) mail_config_druid_new (); - - parent = gtk_widget_get_toplevel ((GtkWidget *) prefs); - if (GTK_WIDGET_TOPLEVEL (parent)) - gtk_window_set_transient_for ((GtkWindow *) prefs->druid, (GtkWindow *) parent); - - g_object_weak_ref ((GObject *) prefs->druid, - (GWeakNotify) account_add_finished, prefs); - - gtk_widget_show (prefs->druid); - g_object_ref (prefs); - } else { - gdk_window_raise (prefs->druid->window); - } -} - -static void -account_edit_finished (MailAccountsTab *prefs, GObject *deadbeef) -{ - prefs->editor = NULL; - - if (!prefs->destroyed) - mail_accounts_load (prefs); - - g_object_unref (prefs); -} - -static void -account_edit_clicked (GtkButton *button, gpointer user_data) -{ - MailAccountsTab *prefs = (MailAccountsTab *) user_data; - - if (prefs->editor == NULL) { - GtkTreeSelection *selection; - EAccount *account = NULL; - GtkTreeModel *model; - GtkTreeIter iter; - - selection = gtk_tree_view_get_selection (prefs->table); - if (gtk_tree_selection_get_selected (selection, &model, &iter)) - gtk_tree_model_get (model, &iter, 3, &account, -1); - - if (account) { - GtkWidget *parent; - - parent = gtk_widget_get_toplevel ((GtkWidget *) prefs); - parent = GTK_WIDGET_TOPLEVEL (parent) ? parent : NULL; - - prefs->editor = (GtkWidget *) mail_account_editor_new (account, (GtkWindow *) parent, prefs); - - g_object_weak_ref ((GObject *) prefs->editor, (GWeakNotify) account_edit_finished, prefs); - gtk_widget_show (prefs->editor); - g_object_ref (prefs); - } - } else { - gdk_window_raise (prefs->editor->window); - } -} - -static void -account_delete_clicked (GtkButton *button, gpointer user_data) -{ - MailAccountsTab *prefs = user_data; - GtkTreeSelection *selection; - EAccount *account = NULL; - EAccountList *accounts; - GtkTreeModel *model; - GtkWidget *confirm; - GtkTreeIter iter; - int ans; - - selection = gtk_tree_view_get_selection (prefs->table); - if (gtk_tree_selection_get_selected (selection, &model, &iter)) - gtk_tree_model_get (model, &iter, 3, &account, -1); - - /* make sure we have a valid account selected and that we aren't editing anything... */ - if (account == NULL || prefs->editor != NULL) - return; - - confirm = gtk_message_dialog_new (PREFS_WINDOW (prefs), - GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, - _("Are you sure you want to delete this account?")); - - button = (GtkButton *) gtk_button_new_from_stock (GTK_STOCK_YES); - gtk_button_set_label (button, _("Delete")); - gtk_dialog_add_action_widget ((GtkDialog *) confirm, (GtkWidget *) button, GTK_RESPONSE_YES); - gtk_widget_show ((GtkWidget *) button); - - button = (GtkButton *) gtk_button_new_from_stock (GTK_STOCK_NO); - gtk_button_set_label (button, _("Don't delete")); - gtk_dialog_add_action_widget ((GtkDialog *) confirm, (GtkWidget *) button, GTK_RESPONSE_NO); - gtk_widget_show ((GtkWidget *) button); - - ans = gtk_dialog_run ((GtkDialog *) confirm); - gtk_widget_destroy (confirm); - - if (ans == GTK_RESPONSE_YES) { - int len; - - /* remove it from the folder-tree in the shell */ - if (account->enabled && account->source && account->source->url) - mail_component_remove_storage_by_uri (mail_component_peek (), account->source->url); - - /* remove it from the config file */ - mail_config_remove_account (account); - accounts = mail_config_get_accounts (); - - mail_config_write (); - - mail_autoreceive_setup (); - - gtk_list_store_remove ((GtkListStore *) model, &iter); - - len = e_list_length ((EList *) accounts); - if (len > 0) { - gtk_tree_selection_select_iter (selection, &iter); - } else { - gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_edit), FALSE); - gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_delete), FALSE); - gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_default), FALSE); - gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_able), FALSE); - } - } -} - -static void -account_default_clicked (GtkButton *button, gpointer user_data) -{ - MailAccountsTab *prefs = user_data; - GtkTreeSelection *selection; - EAccount *account = NULL; - GtkTreeModel *model; - GtkTreeIter iter; - - selection = gtk_tree_view_get_selection (prefs->table); - if (gtk_tree_selection_get_selected (selection, &model, &iter)) - gtk_tree_model_get (model, &iter, 3, &account, -1); - - if (account) { - mail_config_set_default_account (account); - - mail_config_write (); - - mail_accounts_load (prefs); - } -} - -static void -account_able_clicked (GtkButton *button, gpointer user_data) -{ - MailComponent *component = mail_component_peek (); - MailAccountsTab *prefs = user_data; - GtkTreeSelection *selection; - EAccount *account = NULL; - GtkTreeModel *model; - GtkTreeIter iter; - - selection = gtk_tree_view_get_selection (prefs->table); - if (gtk_tree_selection_get_selected (selection, &model, &iter)) { - gtk_tree_model_get (model, &iter, 3, &account, -1); - account->enabled = !account->enabled; - gtk_list_store_set ((GtkListStore *) model, &iter, 0, account->enabled, -1); - - gtk_button_set_label (prefs->mail_able, account->enabled ? _("Disable") : _("Enable")); - } - - if (account) { - /* if the account got disabled, remove it from the - folder-tree, otherwise add it to the folder-tree */ - if (account->source->url) { - if (account->enabled) - mail_component_load_storage_by_uri (component, - account->source->url, - account->name); - else - mail_component_remove_storage_by_uri (component, account->source->url); - } - - mail_autoreceive_setup (); - - mail_config_write (); - } -} - -static void -account_able_toggled (GtkCellRendererToggle *renderer, char *arg1, gpointer user_data) -{ - MailAccountsTab *prefs = user_data; - GtkTreeSelection *selection; - EAccount *account = NULL; - GtkTreeModel *model; - GtkTreePath *path; - GtkTreeIter iter; - - path = gtk_tree_path_new_from_string (arg1); - model = gtk_tree_view_get_model (prefs->table); - selection = gtk_tree_view_get_selection (prefs->table); - - if (gtk_tree_model_get_iter (model, &iter, path)) { - gtk_tree_model_get (model, &iter, 3, &account, -1); - account->enabled = !account->enabled; - gtk_list_store_set ((GtkListStore *) model, &iter, 0, account->enabled, -1); - - if (gtk_tree_selection_iter_is_selected (selection, &iter)) - gtk_button_set_label (prefs->mail_able, account->enabled ? _("Disable") : _("Enable")); - } - - gtk_tree_path_free (path); - - if (account) { - MailComponent *component = mail_component_peek (); - - /* if the account got disabled, remove it from the - folder-tree, otherwise add it to the folder-tree */ - if (account->source->url) { - if (account->enabled) - mail_component_load_storage_by_uri (component, account->source->url, account->name); - else - mail_component_remove_storage_by_uri (component, account->source->url); - } - - mail_autoreceive_setup (); - mail_config_write (); - } -} - -static void -account_double_click (GtkTreeView *treeview, GtkTreePath *path, - GtkTreeViewColumn *column, MailAccountsTab *prefs) -{ - account_edit_clicked (NULL, prefs); -} - -static void -account_cursor_change (GtkTreeSelection *selection, MailAccountsTab *prefs) -{ - EAccount *account = NULL; - GtkTreeModel *model; - GtkTreeIter iter; - int state; - - state = gtk_tree_selection_get_selected (selection, &model, &iter); - if (state) { - gtk_tree_model_get (model, &iter, 3, &account, -1); - if (account->source && account->enabled) - gtk_button_set_label (prefs->mail_able, _("Disable")); - else - gtk_button_set_label (prefs->mail_able, _("Enable")); - } else { - gtk_widget_grab_focus (GTK_WIDGET (prefs->mail_add)); - } - - gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_edit), state); - gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_delete), state); - gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_default), state); - gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_able), state); -} - -static void -mail_accounts_load (MailAccountsTab *prefs) -{ - EAccount *default_account; - EAccountList *accounts; - GtkListStore *model; - GtkTreeIter iter; - char *name, *val; - EIterator *node; - int row = 0; - - model = (GtkListStore *) gtk_tree_view_get_model (prefs->table); - gtk_list_store_clear (model); - - default_account = mail_config_get_default_account (); - - accounts = mail_config_get_accounts (); - node = e_list_get_iterator ((EList *) accounts); - while (e_iterator_is_valid (node)) { - EAccount *account; - CamelURL *url; - - account = (EAccount *) e_iterator_get (node); - - url = account->source && account->source->url ? camel_url_new (account->source->url, NULL) : NULL; - - gtk_list_store_append (model, &iter); - if (account == default_account) { - /* translators: default account indicator */ - name = val = g_strdup_printf ("%s %s", account->name, _("[Default]")); - } else { - val = account->name; - name = NULL; - } - - gtk_list_store_set (model, &iter, - 0, account->enabled, - 1, val, - 2, url && url->protocol ? url->protocol : (char *) _("None"), - 3, account, - -1); - g_free (name); - - if (url) - camel_url_free (url); - - row++; - - e_iterator_next (node); - } - - g_object_unref (node); -} - - - -GtkWidget *mail_accounts_treeview_new (char *widget_name, char *string1, char *string2, - int int1, int int2); - -GtkWidget * -mail_accounts_treeview_new (char *widget_name, char *string1, char *string2, int int1, int int2) -{ - GtkWidget *table, *scrolled; - GtkTreeSelection *selection; - GtkCellRenderer *renderer; - GtkListStore *model; - - scrolled = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled), GTK_SHADOW_IN); - - renderer = gtk_cell_renderer_toggle_new (); - g_object_set ((GObject *) renderer, "activatable", TRUE, NULL); - - model = gtk_list_store_new (4, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); - table = gtk_tree_view_new_with_model ((GtkTreeModel *) model); - gtk_tree_view_insert_column_with_attributes ((GtkTreeView *) table, -1, _("Enabled"), - renderer, "active", 0, NULL); - - g_object_set_data ((GObject *) scrolled, "renderer", renderer); - - renderer = gtk_cell_renderer_text_new (); - gtk_tree_view_insert_column_with_attributes ((GtkTreeView *) table, -1, _("Account name"), - renderer, "text", 1, NULL); - gtk_tree_view_insert_column_with_attributes ((GtkTreeView *)table, -1, _("Protocol"), - renderer, "text", 2, NULL); - selection = gtk_tree_view_get_selection ((GtkTreeView *) table); - gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); - gtk_tree_view_set_headers_visible ((GtkTreeView *) table, TRUE); - - /* FIXME: column auto-resize? */ - /* Is this needed? - gtk_tree_view_column_set_alignment (gtk_tree_view_get_column (prefs->table, 0), 1.0);*/ - - gtk_container_add (GTK_CONTAINER (scrolled), table); - - g_object_set_data ((GObject *) scrolled, "table", table); - - gtk_widget_show (scrolled); - gtk_widget_show (table); - - return scrolled; -} - -static void -mail_accounts_tab_construct (MailAccountsTab *prefs) -{ - GtkWidget *toplevel, *widget; - GtkCellRenderer *renderer; - GladeXML *gui; - - gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", "accounts_tab", NULL); - prefs->gui = gui; - - /* get our toplevel widget */ - toplevel = glade_xml_get_widget (gui, "toplevel"); - - /* reparent */ - gtk_widget_ref (toplevel); - gtk_container_remove (GTK_CONTAINER (toplevel->parent), toplevel); - gtk_container_add (GTK_CONTAINER (prefs), toplevel); - gtk_widget_unref (toplevel); - - widget = glade_xml_get_widget (gui, "etableMailAccounts"); - - prefs->table = (GtkTreeView *) g_object_get_data ((GObject *) widget, "table"); - g_signal_connect (gtk_tree_view_get_selection (prefs->table), - "changed", G_CALLBACK (account_cursor_change), prefs); - g_signal_connect (prefs->table, "row-activated", G_CALLBACK (account_double_click), prefs); - - renderer = g_object_get_data ((GObject *) widget, "renderer"); - g_signal_connect (renderer, "toggled", G_CALLBACK (account_able_toggled), prefs); - - mail_accounts_load (prefs); - - prefs->mail_add = GTK_BUTTON (glade_xml_get_widget (gui, "cmdAccountAdd")); - g_signal_connect (prefs->mail_add, "clicked", G_CALLBACK (account_add_clicked), prefs); - - prefs->mail_edit = GTK_BUTTON (glade_xml_get_widget (gui, "cmdAccountEdit")); - g_signal_connect (prefs->mail_edit, "clicked", G_CALLBACK (account_edit_clicked), prefs); - - prefs->mail_delete = GTK_BUTTON (glade_xml_get_widget (gui, "cmdAccountDelete")); - g_signal_connect (prefs->mail_delete, "clicked", G_CALLBACK (account_delete_clicked), prefs); - - prefs->mail_default = GTK_BUTTON (glade_xml_get_widget (gui, "cmdAccountDefault")); - g_signal_connect (prefs->mail_default, "clicked", G_CALLBACK (account_default_clicked), prefs); - - prefs->mail_able = GTK_BUTTON (glade_xml_get_widget (gui, "cmdAccountAble")); - g_signal_connect (prefs->mail_able, "clicked", G_CALLBACK (account_able_clicked), prefs); -} - - -GtkWidget * -mail_accounts_tab_new (GNOME_Evolution_Shell shell) -{ - MailAccountsTab *new; - - new = (MailAccountsTab *) g_object_new (mail_accounts_tab_get_type (), NULL); - mail_accounts_tab_construct (new); - new->shell = shell; - - return (GtkWidget *) new; -} - - -void -mail_accounts_tab_apply (MailAccountsTab *prefs) -{ - /* nothing to do here... */ -} diff --git a/mail/mail-accounts.h b/mail/mail-accounts.h deleted file mode 100644 index 0c046fa428..0000000000 --- a/mail/mail-accounts.h +++ /dev/null @@ -1,99 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: Jeffrey Stedfast - * - * Copyright 2002 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_ACCOUNTS_TAB_H__ -#define __MAIL_ACCOUNTS_TAB_H__ - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif - -#include -#include -#include -#include -#include - -#include - -#include "evolution-config-control.h" - -#include - - -#define MAIL_ACCOUNTS_TAB_TYPE (mail_accounts_tab_get_type ()) -#define MAIL_ACCOUNTS_TAB(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MAIL_ACCOUNTS_TAB_TYPE, MailAccountsTab)) -#define MAIL_ACCOUNTS_TAB_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), MAIL_ACCOUNTS_TAB_TYPE, MailAccountsTabClass)) -#define IS_MAIL_ACCOUNTS_TAB(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MAIL_ACCOUNTS_TAB_TYPE)) -#define IS_MAIL_ACCOUNTS_TAB_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MAIL_ACCOUNTS_TAB_TYPE)) - -typedef struct _MailAccountsTab MailAccountsTab; -typedef struct _MailAccountsTabClass MailAccountsTabClass; - -struct _MailAccountsTab { - GtkVBox parent_object; - - GNOME_Evolution_Shell shell; - - GladeXML *gui; - - GtkWidget *druid; - GtkWidget *editor; - - GdkPixmap *mark_pixmap; - GdkBitmap *mark_bitmap; - - GtkTreeView *table; - - GtkButton *mail_add; - GtkButton *mail_edit; - GtkButton *mail_delete; - GtkButton *mail_default; - GtkButton *mail_able; - - guint destroyed : 1; -}; - -struct _MailAccountsTabClass { - GtkVBoxClass parent_class; - - /* signals */ - -}; - - -GtkType mail_accounts_tab_get_type (void); - -GtkWidget *mail_accounts_tab_new (GNOME_Evolution_Shell shell); - -void mail_accounts_tab_apply (MailAccountsTab *accounts); - -/* needed by global config */ -#define MAIL_ACCOUNTS_CONTROL_ID "OAFIID:GNOME_Evolution_Mail_Accounts_ConfigControl" - -#ifdef __cplusplus -} -#endif - -#endif /* __MAIL_ACCOUNTS_TAB_H__ */ diff --git a/mail/mail-component-factory.c b/mail/mail-component-factory.c index 00087b7439..d941e8edbc 100644 --- a/mail/mail-component-factory.c +++ b/mail/mail-component-factory.c @@ -20,16 +20,22 @@ * Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + #include "em-utils.h" #include "evolution-composer.h" -#include "mail-accounts.h" #include "mail-component.h" -#include "mail-composer-prefs.h" +#include "em-account-prefs.h" +#include "em-composer-prefs.h" +#include "em-mailer-prefs.h" + #include "mail-config-druid.h" #include "mail-config-factory.h" #include "mail-config.h" #include "mail-mt.h" -#include "mail-preferences.h" #include #include @@ -67,9 +73,9 @@ factory (BonoboGenericFactory *factory, return (BonoboObject *)g_object_new (evolution_mail_config_get_type (), NULL); } else if (strcmp(component_id, WIZARD_ID) == 0) { return evolution_mail_config_wizard_new(); - } else if (strcmp (component_id, MAIL_ACCOUNTS_CONTROL_ID) == 0 - || strcmp (component_id, MAIL_PREFERENCES_CONTROL_ID) == 0 - || strcmp (component_id, MAIL_COMPOSER_PREFS_CONTROL_ID) == 0) { + } else if (strcmp (component_id, EM_ACCOUNT_PREFS_CONTROL_ID) == 0 + || strcmp (component_id, EM_MAILER_PREFS_CONTROL_ID) == 0 + || strcmp (component_id, EM_COMPOSER_PREFS_CONTROL_ID) == 0) { return mail_config_control_factory_cb (factory, component_id, CORBA_OBJECT_NIL); } else if (strcmp(component_id, COMPOSER_ID) == 0) { /* FIXME: how to remove need for callbacks, probably make the composer more tightly integrated with mail */ diff --git a/mail/mail-component.h b/mail/mail-component.h index 3e832752df..0a31fdc815 100644 --- a/mail/mail-component.h +++ b/mail/mail-component.h @@ -26,15 +26,14 @@ #ifndef _MAIL_COMPONENT_H_ #define _MAIL_COMPONENT_H_ +#include +#include #include -#include +#include "shell/e-storage-set.h" -#include "e-storage-set.h" #include "Evolution.h" -#include "filter/rule-context.h" - #define MAIL_TYPE_COMPONENT (mail_component_get_type ()) #define MAIL_COMPONENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAIL_TYPE_COMPONENT, MailComponent)) diff --git a/mail/mail-composer-prefs.c b/mail/mail-composer-prefs.c deleted file mode 100644 index 06e16c4e48..0000000000 --- a/mail/mail-composer-prefs.c +++ /dev/null @@ -1,1010 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: Jeffrey Stedfast - * - * Copyright 2002 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. - * - */ - - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "mail-composer-prefs.h" -#include "composer/e-msg-composer.h" - -#include - -#include -#include - -#include -#include -#include -#include - -#include "widgets/misc/e-charset-picker.h" - -#include "mail-config.h" - -#include "art/mark.xpm" - - -#define d(x) - -static void mail_composer_prefs_class_init (MailComposerPrefsClass *class); -static void mail_composer_prefs_init (MailComposerPrefs *dialog); -static void mail_composer_prefs_destroy (GtkObject *obj); -static void mail_composer_prefs_finalise (GObject *obj); - -static void sig_event_client (MailConfigSigEvent event, MailConfigSignature *sig, MailComposerPrefs *prefs); - -static GtkVBoxClass *parent_class = NULL; - - -GType -mail_composer_prefs_get_type (void) -{ - static GType type = 0; - - if (!type) { - static const GTypeInfo info = { - sizeof (MailComposerPrefsClass), - NULL, NULL, - (GClassInitFunc) mail_composer_prefs_class_init, - NULL, NULL, - sizeof (MailComposerPrefs), - 0, - (GInstanceInitFunc) mail_composer_prefs_init, - }; - - type = g_type_register_static (gtk_vbox_get_type (), "MailComposerPrefs", &info, 0); - } - - return type; -} - -static void -mail_composer_prefs_class_init (MailComposerPrefsClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - GtkObjectClass *object_class = GTK_OBJECT_CLASS (klass); - - parent_class = g_type_class_ref (gtk_vbox_get_type ()); - - object_class->destroy = mail_composer_prefs_destroy; - gobject_class->finalize = mail_composer_prefs_finalise; -} - -static void -mail_composer_prefs_init (MailComposerPrefs *composer_prefs) -{ - composer_prefs->enabled_pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) mark_xpm); - gdk_pixbuf_render_pixmap_and_mask (composer_prefs->enabled_pixbuf, - &composer_prefs->mark_pixmap, &composer_prefs->mark_bitmap, 128); -} - -static void -mail_composer_prefs_finalise (GObject *obj) -{ - MailComposerPrefs *prefs = (MailComposerPrefs *) obj; - - g_object_unref (prefs->gui); - g_object_unref (prefs->enabled_pixbuf); - gdk_pixmap_unref (prefs->mark_pixmap); - g_object_unref (prefs->mark_bitmap); - - G_OBJECT_CLASS (parent_class)->finalize (obj); -} - -static void -mail_composer_prefs_destroy (GtkObject *obj) -{ - MailComposerPrefs *prefs = (MailComposerPrefs *) obj; - - mail_config_signature_unregister_client ((MailConfigSignatureClient) sig_event_client, prefs); - - GTK_OBJECT_CLASS (parent_class)->destroy (obj); -} - -static void -attach_style_info (GtkWidget *item, gpointer user_data) -{ - int *style = user_data; - - g_object_set_data ((GObject *) item, "style", GINT_TO_POINTER (*style)); - - (*style)++; -} - -static void -toggle_button_toggled (GtkWidget *widget, gpointer user_data) -{ - MailComposerPrefs *prefs = (MailComposerPrefs *) user_data; - - if (prefs->control) - evolution_config_control_changed (prefs->control); -} - -static void -menu_changed (GtkWidget *widget, gpointer user_data) -{ - MailComposerPrefs *prefs = (MailComposerPrefs *) user_data; - - if (prefs->control) - evolution_config_control_changed (prefs->control); -} - -static void -option_menu_connect (GtkOptionMenu *omenu, gpointer user_data) -{ - GtkWidget *menu, *item; - GList *items; - - menu = gtk_option_menu_get_menu (omenu); - - items = GTK_MENU_SHELL (menu)->children; - while (items) { - item = items->data; - g_signal_connect (item, "activate", G_CALLBACK (menu_changed), user_data); - items = items->next; - } -} - -static void -sig_load_preview (MailComposerPrefs *prefs, MailConfigSignature *sig) -{ - char *str; - - if (!sig) { - gtk_html_load_from_string (GTK_HTML (prefs->sig_preview), " ", 1); - return; - } - - if (sig->script) - str = mail_config_signature_run_script (sig->script); - else - str = e_msg_composer_get_sig_file_content (sig->filename, sig->html); - if (!str) - str = g_strdup (""); - - /* printf ("HTML: %s\n", str); */ - if (sig->html) { - gtk_html_load_from_string (GTK_HTML (prefs->sig_preview), str, strlen (str)); - } else { - GtkHTMLStream *stream; - int len; - - len = strlen (str); - stream = gtk_html_begin_content (GTK_HTML (prefs->sig_preview), "text/html; charset=utf-8"); - gtk_html_write (GTK_HTML (prefs->sig_preview), stream, "
", 5);
-		if (len)
-			gtk_html_write (GTK_HTML (prefs->sig_preview), stream, str, len);
-		gtk_html_write (GTK_HTML (prefs->sig_preview), stream, "
", 6); - gtk_html_end (GTK_HTML (prefs->sig_preview), stream, GTK_HTML_STREAM_OK); - } - - g_free (str); -} - -static void -sig_edit_cb (GtkWidget *widget, MailComposerPrefs *prefs) -{ - GtkTreeSelection *selection; - MailConfigSignature *sig; - GtkTreeModel *model; - GtkWidget *parent; - GtkTreeIter iter; - - selection = gtk_tree_view_get_selection (prefs->sig_list); - if (!gtk_tree_selection_get_selected (selection, &model, &iter)) - return; - - gtk_tree_model_get (model, &iter, 1, &sig, -1); - - if (sig->script == NULL) { - /* normal signature */ - if (!sig->filename || *sig->filename == '\0') { - g_free (sig->filename); - sig->filename = g_strdup (_("Unnamed")); - } - - parent = gtk_widget_get_toplevel ((GtkWidget *) prefs); - parent = GTK_WIDGET_TOPLEVEL (parent) ? parent : NULL; - - mail_signature_editor (sig, (GtkWindow *) parent, FALSE); - } else { - /* signature script */ - GtkWidget *entry; - - entry = glade_xml_get_widget (prefs->sig_script_gui, "fileentry_add_script_script"); - gtk_entry_set_text (GTK_ENTRY (entry), sig->name); - - entry = glade_xml_get_widget (prefs->sig_script_gui, "entry_add_script_name"); - gtk_entry_set_text (GTK_ENTRY (entry), sig->name); - - g_object_set_data ((GObject *) entry, "script", sig); - - gtk_widget_show (prefs->sig_script_dialog); - gdk_window_raise (prefs->sig_script_dialog->window); - } -} - -MailConfigSignature * -mail_composer_prefs_new_signature (GtkWindow *parent, gboolean html, const char *script) -{ - MailConfigSignature *sig; - - sig = mail_config_signature_new (html, script); - mail_signature_editor (sig, parent, TRUE); - - return sig; -} - -static void -sig_delete_cb (GtkWidget *widget, MailComposerPrefs *prefs) -{ - MailConfigSignature *sig; - GtkTreeModel *model; - GtkTreeSelection *selection; - GtkTreeIter iter; - - selection = gtk_tree_view_get_selection (prefs->sig_list); - if (gtk_tree_selection_get_selected (selection, &model, &iter)) { - gtk_tree_model_get (model, &iter, 1, &sig, -1); - gtk_list_store_remove ((GtkListStore *) model, &iter); - mail_config_signature_delete (sig); - } -} - -static void -sig_add_cb (GtkWidget *widget, MailComposerPrefs *prefs) -{ - GConfClient *gconf; - gboolean send_html; - GtkWidget *parent; - - gconf = mail_config_get_gconf_client (); - send_html = gconf_client_get_bool (gconf, "/apps/evolution/mail/composer/send_html", NULL); - - parent = gtk_widget_get_toplevel ((GtkWidget *) prefs); - parent = GTK_WIDGET_TOPLEVEL (parent) ? parent : NULL; - - mail_composer_prefs_new_signature ((GtkWindow *) parent, send_html, NULL); -} - -static void -sig_add_script_response (GtkWidget *widget, int button, MailComposerPrefs *prefs) -{ - const char *script, *name; - GtkWidget *dialog; - GtkWidget *entry; - - if (button == GTK_RESPONSE_ACCEPT) { - entry = glade_xml_get_widget (prefs->sig_script_gui, "fileentry_add_script_script"); - script = gtk_entry_get_text (GTK_ENTRY (gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (entry)))); - - entry = glade_xml_get_widget (prefs->sig_script_gui, "entry_add_script_name"); - name = gtk_entry_get_text (GTK_ENTRY (entry)); - if (script && *script) { - struct stat st; - - if (!stat (script, &st) && S_ISREG (st.st_mode) && access (script, X_OK) == 0) { - MailConfigSignature *sig; - GtkWidget *parent; - - parent = gtk_widget_get_toplevel ((GtkWidget *) prefs); - parent = GTK_WIDGET_TOPLEVEL (parent) ? parent : NULL; - - if ((sig = g_object_get_data ((GObject *) entry, "script"))) { - /* we're just editing an existing signature script */ - mail_config_signature_set_name (sig, name); - } else { - sig = mail_composer_prefs_new_signature ((GtkWindow *) parent, TRUE, script); - mail_config_signature_set_name (sig, name); - mail_config_signature_add (sig); - } - - gtk_widget_hide (prefs->sig_script_dialog); - - return; - } - } - - dialog = gtk_message_dialog_new (GTK_WINDOW (prefs->sig_script_dialog), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, - "%s", _("You must specify a valid script name.")); - - gtk_dialog_run ((GtkDialog *) dialog); - gtk_widget_destroy (dialog); - } - - gtk_widget_hide (widget); -} - -static void -sig_add_script_cb (GtkWidget *widget, MailComposerPrefs *prefs) -{ - GtkWidget *entry; - - entry = glade_xml_get_widget (prefs->sig_script_gui, "entry_add_script_name"); - gtk_entry_set_text (GTK_ENTRY (entry), _("Unnamed")); - - g_object_set_data ((GObject *) entry, "script", NULL); - - gtk_widget_show (prefs->sig_script_dialog); - gdk_window_raise (prefs->sig_script_dialog->window); -} - -static void -sig_selection_changed (GtkTreeSelection *selection, MailComposerPrefs *prefs) -{ - MailConfigSignature *sig; - GtkTreeModel *model; - GtkTreeIter iter; - int state; - - state = gtk_tree_selection_get_selected (selection, &model, &iter); - if (state) { - gtk_tree_model_get (model, &iter, 1, &sig, -1); - sig_load_preview (prefs, sig); - } - - gtk_widget_set_sensitive ((GtkWidget *) prefs->sig_delete, state); - gtk_widget_set_sensitive ((GtkWidget *) prefs->sig_edit, state); -} - -static void -sig_fill_clist (GtkTreeView *clist) -{ - GSList *l; - GtkListStore *model; - GtkTreeIter iter; - - model = (GtkListStore *) gtk_tree_view_get_model (clist); - gtk_list_store_clear (model); - - for (l = mail_config_get_signature_list (); l; l = l->next) { - MailConfigSignature *sig = l->data; - char *name = NULL, *val; - - gtk_list_store_append (model, &iter); - - if (sig->script) - name = val = g_strconcat (sig->name, " ", _("[script]"), NULL); - else - val = sig->name; - gtk_list_store_set (model, &iter, 0, val, 1, sig, -1); - g_free (name); - } -} - -static void -url_requested (GtkHTML *html, const char *url, GtkHTMLStream *handle) -{ - GtkHTMLStreamStatus status; - char buf[128]; - ssize_t size; - int fd; - - if (!strncmp (url, "file:", 5)) - url += 5; - - fd = open (url, O_RDONLY); - status = GTK_HTML_STREAM_OK; - if (fd != -1) { - while ((size = read (fd, buf, sizeof (buf)))) { - if (size == -1) { - status = GTK_HTML_STREAM_ERROR; - break; - } else - gtk_html_write (html, handle, buf, size); - } - } else - status = GTK_HTML_STREAM_ERROR; - - gtk_html_end (html, handle, status); -} - -static void -sig_event_client (MailConfigSigEvent event, MailConfigSignature *sig, MailComposerPrefs *prefs) -{ - MailConfigSignature *current; - GtkTreeSelection *selection; - GtkTreeModel *model; - GtkTreeIter iter; - char path[16]; - - switch (event) { - case MAIL_CONFIG_SIG_EVENT_ADDED: - d(printf ("signature ADDED\n")); - - model = gtk_tree_view_get_model (prefs->sig_list); - gtk_list_store_append ((GtkListStore *) model, &iter); - gtk_list_store_set ((GtkListStore *) model, &iter, 0, sig->name, 1, sig, -1); - break; - case MAIL_CONFIG_SIG_EVENT_NAME_CHANGED: - d(printf ("signature NAME CHANGED\n")); - - /* this is one bizarro interface */ - model = gtk_tree_view_get_model (prefs->sig_list); - sprintf (path, "%d", sig->id); - if (gtk_tree_model_get_iter_from_string (model, &iter, path)) { - char *val, *name = NULL; - - if (sig->script) - name = val = g_strconcat (sig->name, " ", _("[script]"), NULL); - else - val = sig->name; - - gtk_list_store_set ((GtkListStore *) model, &iter, 0, val, -1); - g_free (name); - } - break; - case MAIL_CONFIG_SIG_EVENT_CONTENT_CHANGED: - d(printf ("signature CONTENT CHANGED\n")); - selection = gtk_tree_view_get_selection (prefs->sig_list); - if (gtk_tree_selection_get_selected (selection, &model, &iter)) { - gtk_tree_model_get (model, &iter, 1, ¤t, -1); - if (sig == current) - sig_load_preview (prefs, sig); - } - break; - default: - ; - } -} - -/* - * - * Spell checking cut'n'pasted from gnome-spell/capplet/main.c - * - */ - -#include "Spell.h" - -#define GNOME_SPELL_GCONF_DIR "/GNOME/Spell" -#define SPELL_API_VERSION "0.3" - -static void -spell_set_ui (MailComposerPrefs *prefs) -{ - GtkListStore *model; - GtkTreeIter iter; - GHashTable *present; - gboolean go; - char **strv = NULL; - int i; - - prefs->spell_active = FALSE; - - /* setup the language list */ - present = g_hash_table_new (g_str_hash, g_str_equal); - if (prefs->language_str && (strv = g_strsplit (prefs->language_str, " ", 0))) { - for (i = 0; strv[i]; i++) - g_hash_table_insert (present, strv[i], strv[i]); - } - - model = (GtkListStore *) gtk_tree_view_get_model (prefs->language); - for (go = gtk_tree_model_get_iter_first ((GtkTreeModel *) model, &iter); go; - go = gtk_tree_model_iter_next ((GtkTreeModel *) model, &iter)) { - char *abbr; - - gtk_tree_model_get ((GtkTreeModel *) model, &iter, 2, &abbr, -1); - gtk_list_store_set (model, &iter, 0, g_hash_table_lookup (present, abbr) != NULL, -1); - } - - g_hash_table_destroy (present); - if (strv != NULL) - g_strfreev (strv); - - gnome_color_picker_set_i16 (GNOME_COLOR_PICKER (prefs->colour), - prefs->spell_error_color.red, - prefs->spell_error_color.green, - prefs->spell_error_color.blue, 0xffff); - - prefs->spell_active = TRUE; -} - -static gchar * -spell_get_language_str (MailComposerPrefs *prefs) -{ - GString *str = g_string_new (""); - GtkListStore *model; - GtkTreeIter iter; - gboolean go; - char *rv; - - model = (GtkListStore *) gtk_tree_view_get_model (prefs->language); - for (go = gtk_tree_model_get_iter_first ((GtkTreeModel *) model, &iter); - go; - go = gtk_tree_model_iter_next ((GtkTreeModel *) model, &iter)) { - char *abbr; - gboolean state; - - gtk_tree_model_get ((GtkTreeModel *) model, &iter, 0, &state, 2, &abbr, -1); - if (state) { - if (str->len) - g_string_append_c (str, ' '); - g_string_append (str, abbr); - } - } - - rv = str->str; - g_string_free (str, FALSE); - - return rv; -} - -static void -spell_get_ui (MailComposerPrefs *prefs) -{ - gnome_color_picker_get_i16 (GNOME_COLOR_PICKER (prefs->colour), - &prefs->spell_error_color.red, - &prefs->spell_error_color.green, - &prefs->spell_error_color.blue, NULL); - g_free (prefs->language_str); - prefs->language_str = spell_get_language_str (prefs); -} - -#define GET(t,x,prop,f,c) \ - val = gconf_client_get_without_default (prefs->gconf, GNOME_SPELL_GCONF_DIR x, NULL); \ - if (val) { f; prop = c (gconf_value_get_ ## t (val)); \ - gconf_value_free (val); } - -static void -spell_save_orig (MailComposerPrefs *prefs) -{ - g_free (prefs->language_str_orig); - prefs->language_str_orig = g_strdup (prefs->language_str ? prefs->language_str : ""); - prefs->spell_error_color_orig = prefs->spell_error_color; -} - -/* static void -spell_load_orig (MailComposerPrefs *prefs) -{ - g_free (prefs->language_str); - prefs->language_str = g_strdup (prefs->language_str_orig); - prefs->spell_error_color = prefs->spell_error_color_orig; -} */ - -static void -spell_load_values (MailComposerPrefs *prefs) -{ - GConfValue *val; - char *def_lang; - - def_lang = g_strdup (e_iconv_locale_language ()); - g_free (prefs->language_str); - prefs->language_str = g_strdup (def_lang); - prefs->spell_error_color.red = 0xffff; - prefs->spell_error_color.green = 0; - prefs->spell_error_color.blue = 0; - - GET (int, "/spell_error_color_red", prefs->spell_error_color.red, (void)0, (int)); - GET (int, "/spell_error_color_green", prefs->spell_error_color.green, (void)0, (int)); - GET (int, "/spell_error_color_blue", prefs->spell_error_color.blue, (void)0, (int)); - GET (string, "/language", prefs->language_str, g_free (prefs->language_str), g_strdup); - - if (prefs->language_str == NULL) - prefs->language_str = g_strdup (def_lang); - - spell_save_orig (prefs); - - g_free (def_lang); -} - -#define SET(t,x,prop) \ - gconf_client_set_ ## t (prefs->gconf, GNOME_SPELL_GCONF_DIR x, prop, NULL); - -#define STR_EQUAL(str1, str2) ((str1 == NULL && str2 == NULL) || (str1 && str2 && !strcmp (str1, str2))) - -static void -spell_save_values (MailComposerPrefs *prefs, gboolean force) -{ - if (force || !gdk_color_equal (&prefs->spell_error_color, &prefs->spell_error_color_orig)) { - SET (int, "/spell_error_color_red", prefs->spell_error_color.red); - SET (int, "/spell_error_color_green", prefs->spell_error_color.green); - SET (int, "/spell_error_color_blue", prefs->spell_error_color.blue); - } - - if (force || !STR_EQUAL (prefs->language_str, prefs->language_str_orig)) { - SET (string, "/language", prefs->language_str ? prefs->language_str : ""); - } - - gconf_client_suggest_sync (prefs->gconf, NULL); -} - -static void -spell_apply (MailComposerPrefs *prefs) -{ - spell_get_ui (prefs); - spell_save_values (prefs, FALSE); -} - -/* static void -spell_revert (MailComposerPrefs *prefs) -{ - spell_load_orig (prefs); - spell_set_ui (prefs); - spell_save_values (prefs, TRUE); -} */ - -static void -spell_changed (gpointer user_data) -{ - MailComposerPrefs *prefs = (MailComposerPrefs *) user_data; - - if (prefs->control) - evolution_config_control_changed (prefs->control); -} - -static void -spell_color_set (GtkWidget *widget, guint r, guint g, guint b, guint a, gpointer user_data) -{ - spell_changed (user_data); -} - -static void -spell_language_selection_changed (GtkTreeSelection *selection, MailComposerPrefs *prefs) -{ - GtkTreeIter iter; - GtkTreeModel *model; - gboolean state = FALSE; - - if (gtk_tree_selection_get_selected (selection, &model, &iter)) { - gtk_tree_model_get ((GtkTreeModel *) model, &iter, 0, &state, -1); - gtk_button_set_label ((GtkButton *) prefs->spell_able_button, state ? _("Disable") : _("Enable")); - state = TRUE; - } - gtk_widget_set_sensitive (prefs->spell_able_button, state); -} - -static void -spell_language_enable (GtkWidget *widget, MailComposerPrefs *prefs) -{ - GtkTreeIter iter; - GtkTreeModel *model; - GtkTreeSelection *selection; - gboolean state; - - selection = gtk_tree_view_get_selection (prefs->language); - if (gtk_tree_selection_get_selected (selection, &model, &iter)) { - gtk_tree_model_get (model, &iter, 0, &state, -1); - gtk_list_store_set ((GtkListStore *) model, &iter, 0, !state, -1); - gtk_button_set_label ((GtkButton *) prefs->spell_able_button, state ? _("Enable") : _("Disable")); - spell_changed (prefs); - } -} - -static gboolean -spell_language_button_press (GtkTreeView *tv, GdkEventButton *event, MailComposerPrefs *prefs) -{ - GtkTreePath *path = NULL; - GtkTreeViewColumn *column = NULL; - gtk_tree_view_get_path_at_pos (tv, event->x, event->y, &path, &column, NULL, NULL); - - /* FIXME: This routine should just be a "toggled" event handler on the checkbox cell renderer which - has "activatable" set. */ - - if (path != NULL && column != NULL && !strcmp (gtk_tree_view_column_get_title (column), _("Enabled"))) { - GtkTreeIter iter; - GtkTreeModel *model; - gboolean enabled; - - model = gtk_tree_view_get_model (tv); - gtk_tree_model_get_iter (model, &iter, path); - gtk_tree_model_get (model, &iter, 0, &enabled, -1); - gtk_list_store_set ((GtkListStore *) model, &iter, 0, !enabled, -1); - gtk_button_set_label ((GtkButton *) prefs->spell_able_button, enabled ? _("Enable") : _("Disable")); - spell_changed (prefs); - } - - return FALSE; -} - -static void -spell_setup (MailComposerPrefs *prefs) -{ - GtkListStore *model; - GtkTreeIter iter; - int i; - - model = (GtkListStore *) gtk_tree_view_get_model (prefs->language); - - if (prefs->language_seq) { - for (i = 0; i < prefs->language_seq->_length; i++) { - gtk_list_store_append (model, &iter); - gtk_list_store_set (model, &iter, - 1, _(prefs->language_seq->_buffer[i].name), - 2, prefs->language_seq->_buffer[i].abbreviation, - -1); - } - } - - spell_load_values (prefs); - spell_set_ui (prefs); - - glade_xml_signal_connect_data (prefs->gui, "spellColorSet", G_CALLBACK (spell_color_set), prefs); - glade_xml_signal_connect_data (prefs->gui, "spellLanguageEnable", GTK_SIGNAL_FUNC (spell_language_enable), prefs); - - g_signal_connect (prefs->language, "button_press_event", G_CALLBACK (spell_language_button_press), prefs); -} - -static gboolean -spell_setup_check_options (MailComposerPrefs *prefs) -{ - GNOME_Spell_Dictionary dict; - CORBA_Environment ev; - char *dictionary_id; - - dictionary_id = "OAFIID:GNOME_Spell_Dictionary:" SPELL_API_VERSION; - dict = bonobo_activation_activate_from_id (dictionary_id, 0, NULL, NULL); - if (dict == CORBA_OBJECT_NIL) { - g_warning ("Cannot activate %s", dictionary_id); - - return FALSE; - } - - CORBA_exception_init (&ev); - prefs->language_seq = GNOME_Spell_Dictionary_getLanguages (dict, &ev); - if (ev._major != CORBA_NO_EXCEPTION) - prefs->language_seq = NULL; - CORBA_exception_free (&ev); - - if (prefs->language_seq == NULL) - return FALSE; - - gconf_client_add_dir (prefs->gconf, GNOME_SPELL_GCONF_DIR, GCONF_CLIENT_PRELOAD_NONE, NULL); - - spell_setup (prefs); - - return TRUE; -} - -/* - * End of Spell checking - */ - -static void -mail_composer_prefs_construct (MailComposerPrefs *prefs) -{ - GtkWidget *toplevel, *widget, *menu, *info_pixmap; - GtkDialog *dialog; - GladeXML *gui; - GtkListStore *model; - GtkTreeSelection *selection; - gboolean bool; - int style; - char *buf; - - prefs->gconf = mail_config_get_gconf_client (); - - gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", "composer_tab", NULL); - prefs->gui = gui; - prefs->sig_script_gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", "vbox_add_script_signature", NULL); - - /* get our toplevel widget */ - toplevel = glade_xml_get_widget (gui, "toplevel"); - - /* reparent */ - gtk_widget_ref (toplevel); - gtk_container_remove (GTK_CONTAINER (toplevel->parent), toplevel); - gtk_container_add (GTK_CONTAINER (prefs), toplevel); - gtk_widget_unref (toplevel); - - /* General tab */ - - /* Default Behavior */ - prefs->send_html = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkSendHTML")); - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/composer/send_html", NULL); - gtk_toggle_button_set_active (prefs->send_html, bool); - g_signal_connect (prefs->send_html, "toggled", G_CALLBACK (toggle_button_toggled), prefs); - - prefs->prompt_empty_subject = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkPromptEmptySubject")); - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/prompts/empty_subject", NULL); - gtk_toggle_button_set_active (prefs->prompt_empty_subject, bool); - g_signal_connect (prefs->prompt_empty_subject, "toggled", G_CALLBACK (toggle_button_toggled), prefs); - - prefs->prompt_bcc_only = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkPromptBccOnly")); - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/prompts/only_bcc", NULL); - gtk_toggle_button_set_active (prefs->prompt_bcc_only, bool); - g_signal_connect (prefs->prompt_bcc_only, "toggled", G_CALLBACK (toggle_button_toggled), prefs); - - prefs->auto_smileys = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkAutoSmileys")); - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/composer/magic_smileys", NULL); - gtk_toggle_button_set_active (prefs->auto_smileys, bool); - g_signal_connect (prefs->auto_smileys, "toggled", G_CALLBACK (toggle_button_toggled), prefs); - - prefs->spell_check = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkEnableSpellChecking")); - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/composer/inline_spelling", NULL); - gtk_toggle_button_set_active (prefs->spell_check, bool); - g_signal_connect (prefs->spell_check, "toggled", G_CALLBACK (toggle_button_toggled), prefs); - - prefs->charset = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuCharset")); - buf = gconf_client_get_string (prefs->gconf, "/apps/evolution/mail/composer/charset", NULL); - menu = e_charset_picker_new (buf && *buf ? buf : e_iconv_locale_charset ()); - gtk_option_menu_set_menu (prefs->charset, GTK_WIDGET (menu)); - option_menu_connect (prefs->charset, prefs); - g_free (buf); - - /* Spell Checking: GNOME Spell part */ - prefs->colour = GNOME_COLOR_PICKER (glade_xml_get_widget (gui, "colorpickerSpellCheckColor")); - prefs->language = GTK_TREE_VIEW (glade_xml_get_widget (gui, "clistSpellCheckLanguage")); - model = gtk_list_store_new (3, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_POINTER); - gtk_tree_view_set_model (prefs->language, (GtkTreeModel *) model); - gtk_tree_view_insert_column_with_attributes (prefs->language, -1, _("Enabled"), - gtk_cell_renderer_toggle_new (), - "active", 0, - NULL); - gtk_tree_view_insert_column_with_attributes (prefs->language, -1, _("Language(s)"), - gtk_cell_renderer_text_new (), - "text", 1, - NULL); - selection = gtk_tree_view_get_selection (prefs->language); - gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); - g_signal_connect (selection, "changed", G_CALLBACK (spell_language_selection_changed), prefs); -#if 0 - gtk_clist_set_column_justification (prefs->language, 0, GTK_JUSTIFY_RIGHT); - gtk_clist_set_column_auto_resize (prefs->language, 0, TRUE); -#endif - - prefs->spell_able_button = glade_xml_get_widget (gui, "buttonSpellCheckEnable"); - info_pixmap = glade_xml_get_widget (gui, "pixmapSpellInfo"); - gtk_image_set_from_file (GTK_IMAGE (info_pixmap), EVOLUTION_IMAGES "/info-bulb.png"); - if (!spell_setup_check_options (prefs)) { - gtk_widget_hide (GTK_WIDGET (prefs->colour)); - gtk_widget_hide (GTK_WIDGET (prefs->language)); - } - - /* Forwards and Replies */ - prefs->forward_style = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuForwardStyle")); - style = gconf_client_get_int (prefs->gconf, "/apps/evolution/mail/format/forward_style", NULL); - gtk_option_menu_set_history (prefs->forward_style, style); - style = 0; - gtk_container_foreach (GTK_CONTAINER (gtk_option_menu_get_menu (prefs->forward_style)), - attach_style_info, &style); - option_menu_connect (prefs->forward_style, prefs); - - prefs->reply_style = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuReplyStyle")); - style = gconf_client_get_int (prefs->gconf, "/apps/evolution/mail/format/reply_style", NULL); - gtk_option_menu_set_history (prefs->reply_style, style); - style = 0; - gtk_container_foreach (GTK_CONTAINER (gtk_option_menu_get_menu (prefs->reply_style)), - attach_style_info, &style); - option_menu_connect (prefs->reply_style, prefs); - - /* Signatures */ - dialog = (GtkDialog *) gtk_dialog_new (); - prefs->sig_script_dialog = (GtkWidget *) dialog; - gtk_dialog_add_buttons (dialog, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, - GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); - gtk_window_set_title ((GtkWindow *) dialog, _("Add script signature")); - g_signal_connect (dialog, "response", G_CALLBACK (sig_add_script_response), prefs); - widget = glade_xml_get_widget (prefs->sig_script_gui, "vbox_add_script_signature"); - gtk_box_pack_start_defaults ((GtkBox *) dialog->vbox, widget); - - prefs->sig_add = GTK_BUTTON (glade_xml_get_widget (gui, "cmdSignatureAdd")); - g_signal_connect (prefs->sig_add, "clicked", G_CALLBACK (sig_add_cb), prefs); - - glade_xml_signal_connect_data (gui, "cmdSignatureAddScriptClicked", - G_CALLBACK (sig_add_script_cb), prefs); - - prefs->sig_edit = GTK_BUTTON (glade_xml_get_widget (gui, "cmdSignatureEdit")); - g_signal_connect (prefs->sig_edit, "clicked", G_CALLBACK (sig_edit_cb), prefs); - - prefs->sig_delete = GTK_BUTTON (glade_xml_get_widget (gui, "cmdSignatureDelete")); - g_signal_connect (prefs->sig_delete, "clicked", G_CALLBACK (sig_delete_cb), prefs); - - prefs->sig_list = GTK_TREE_VIEW (glade_xml_get_widget (gui, "clistSignatures")); - model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_POINTER); - gtk_tree_view_set_model (prefs->sig_list, (GtkTreeModel *)model); - gtk_tree_view_insert_column_with_attributes (prefs->sig_list, -1, _("Signature(s)"), - gtk_cell_renderer_text_new (), - "text", 0, - NULL); - selection = gtk_tree_view_get_selection (prefs->sig_list); - gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); - g_signal_connect (selection, "changed", G_CALLBACK (sig_selection_changed), prefs); - - sig_fill_clist (prefs->sig_list); - if (mail_config_get_signature_list () == NULL) { - gtk_widget_set_sensitive ((GtkWidget *) prefs->sig_delete, FALSE); - gtk_widget_set_sensitive ((GtkWidget *) prefs->sig_edit, FALSE); - } - - /* preview GtkHTML widget */ - widget = glade_xml_get_widget (gui, "scrolled-sig"); - prefs->sig_preview = (GtkHTML *) gtk_html_new (); - g_signal_connect (prefs->sig_preview, "url_requested", G_CALLBACK (url_requested), NULL); - gtk_widget_show (GTK_WIDGET (prefs->sig_preview)); - gtk_container_add (GTK_CONTAINER (widget), GTK_WIDGET (prefs->sig_preview)); - - mail_config_signature_register_client ((MailConfigSignatureClient) sig_event_client, prefs); -} - - -GtkWidget * -mail_composer_prefs_new (void) -{ - MailComposerPrefs *new; - - new = (MailComposerPrefs *) g_object_new (mail_composer_prefs_get_type (), NULL); - mail_composer_prefs_construct (new); - - return (GtkWidget *) new; -} - - -void -mail_composer_prefs_apply (MailComposerPrefs *prefs) -{ - GtkWidget *menu, *item; - char *string; - int val; - - /* General tab */ - - /* Default Behavior */ - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/composer/send_html", - gtk_toggle_button_get_active (prefs->send_html), NULL); - - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/prompts/empty_subject", - gtk_toggle_button_get_active (prefs->prompt_empty_subject), NULL); - - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/prompts/only_bcc", - gtk_toggle_button_get_active (prefs->prompt_bcc_only), NULL); - - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/composer/inline_spelling", - gtk_toggle_button_get_active (prefs->spell_check), NULL); - - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/composer/magic_smileys", - gtk_toggle_button_get_active (prefs->auto_smileys), NULL); - - menu = gtk_option_menu_get_menu (prefs->charset); - if (!(string = e_charset_picker_get_charset (menu))) - string = g_strdup (e_iconv_locale_charset ()); - - gconf_client_set_string (prefs->gconf, "/apps/evolution/mail/composer/charset", string, NULL); - g_free (string); - - /* Spell Checking */ - spell_apply (prefs); - - /* Forwards and Replies */ - menu = gtk_option_menu_get_menu (prefs->forward_style); - item = gtk_menu_get_active (GTK_MENU (menu)); - val = GPOINTER_TO_INT (g_object_get_data ((GObject *) item, "style")); - gconf_client_set_int (prefs->gconf, "/apps/evolution/mail/format/forward_style", val, NULL); - - menu = gtk_option_menu_get_menu (prefs->reply_style); - item = gtk_menu_get_active (GTK_MENU (menu)); - val = GPOINTER_TO_INT (g_object_get_data ((GObject *) item, "style")); - gconf_client_set_int (prefs->gconf, "/apps/evolution/mail/format/reply_style", val, NULL); - - /* Keyboard Shortcuts */ - /* FIXME: implement me */ - - /* Signatures */ - /* FIXME: implement me */ - - gconf_client_suggest_sync (prefs->gconf, NULL); -} diff --git a/mail/mail-composer-prefs.h b/mail/mail-composer-prefs.h deleted file mode 100644 index 6c181c3d8a..0000000000 --- a/mail/mail-composer-prefs.h +++ /dev/null @@ -1,130 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: Jeffrey Stedfast - * - * Copyright 2002 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_COMPOSER_PREFS_H__ -#define __MAIL_COMPOSER_PREFS_H__ - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif - -#include -#include -#include - -#include -#include -#include - -#include "mail-signature-editor.h" - -#include "evolution-config-control.h" - -#include -#include "Spell.h" - -#define MAIL_COMPOSER_PREFS_TYPE (mail_composer_prefs_get_type ()) -#define MAIL_COMPOSER_PREFS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MAIL_COMPOSER_PREFS_TYPE, MailComposerPrefs)) -#define MAIL_COMPOSER_PREFS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), MAIL_COMPOSER_PREFS_TYPE, MailComposerPrefsClass)) -#define IS_MAIL_COMPOSER_PREFS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MAIL_COMPOSER_PREFS_TYPE)) -#define IS_MAIL_COMPOSER_PREFS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MAIL_COMPOSER_PREFS_TYPE)) - -typedef struct _MailComposerPrefs MailComposerPrefs; -typedef struct _MailComposerPrefsClass MailComposerPrefsClass; - -struct _MailComposerPrefs { - GtkVBox parent_object; - - EvolutionConfigControl *control; - - GConfClient *gconf; - - GladeXML *gui; - - /* General tab */ - - /* Default Behavior */ - GtkToggleButton *send_html; - GtkToggleButton *auto_smileys; - GtkToggleButton *prompt_empty_subject; - GtkToggleButton *prompt_bcc_only; - GtkOptionMenu *charset; - - GtkToggleButton *spell_check; - GnomeColorPicker *colour; - GtkTreeView *language; - CORBA_sequence_GNOME_Spell_Language *language_seq; - gboolean spell_active; - char *language_str; - char *language_str_orig; - GdkColor spell_error_color; - GdkColor spell_error_color_orig; - GdkPixmap *mark_pixmap; - GdkBitmap *mark_bitmap; - GdkPixbuf *enabled_pixbuf; - GtkWidget *spell_able_button; - - /* Forwards and Replies */ - GtkOptionMenu *forward_style; - GtkOptionMenu *reply_style; - - /* Keyboard Shortcuts */ - GtkOptionMenu *shortcuts_type; - - /* Signatures */ - GtkTreeView *sig_list; - GtkButton *sig_add; - GtkButton *sig_edit; - GtkButton *sig_delete; - GtkHTML *sig_preview; - gboolean sig_switch; - int sig_row; - GladeXML *sig_script_gui; - GtkWidget *sig_script_dialog; -}; - -struct _MailComposerPrefsClass { - GtkVBoxClass parent_class; - - /* signals */ - -}; - - -GType mail_composer_prefs_get_type (void); - -GtkWidget *mail_composer_prefs_new (void); - -void mail_composer_prefs_apply (MailComposerPrefs *prefs); - -MailConfigSignature *mail_composer_prefs_new_signature (GtkWindow *parent, gboolean html, const char *script); - -/* needed by global config */ -#define MAIL_COMPOSER_PREFS_CONTROL_ID "OAFIID:GNOME_Evolution_Mail_ComposerPrefs_ConfigControl" - -#ifdef __cplusplus -} -#endif - -#endif /* __MAIL_COMPOSER_PREFS_H__ */ diff --git a/mail/mail-config-factory.c b/mail/mail-config-factory.c index 50fddb9be9..e2c205de94 100644 --- a/mail/mail-config-factory.c +++ b/mail/mail-config-factory.c @@ -27,9 +27,10 @@ #include -#include "mail-accounts.h" -#include "mail-preferences.h" -#include "mail-composer-prefs.h" +#include "em-account-prefs.h" +#include "em-composer-prefs.h" +#include "em-mailer-prefs.h" + #include "mail-config-factory.h" #define CONFIG_CONTROL_FACTORY_ID "OAFIID:GNOME_Evolution_Mail_ConfigControlFactory" @@ -67,16 +68,15 @@ mail_config_control_factory_cb (BonoboGenericFactory *factory, const char *compo data = g_new (struct _config_data, 1); - /* TODO: should use ascii_str*cmp? */ - if (!strcmp (component_id, MAIL_ACCOUNTS_CONTROL_ID)) { - prefs = mail_accounts_tab_new (shell); - data->apply = (ApplyFunc) mail_accounts_tab_apply; - } else if (!strcmp (component_id, MAIL_PREFERENCES_CONTROL_ID)) { - prefs = mail_preferences_new (); - data->apply = (ApplyFunc) mail_preferences_apply; - } else if (!strcmp (component_id, MAIL_COMPOSER_PREFS_CONTROL_ID)) { - prefs = mail_composer_prefs_new (); - data->apply = (ApplyFunc) mail_composer_prefs_apply; + if (!strcmp (component_id, EM_ACCOUNT_PREFS_CONTROL_ID)) { + prefs = em_account_prefs_new (shell); + data->apply = (ApplyFunc) em_account_prefs_apply; + } else if (!strcmp (component_id, EM_MAILER_PREFS_CONTROL_ID)) { + prefs = em_mailer_prefs_new (); + data->apply = (ApplyFunc) em_mailer_prefs_apply; + } else if (!strcmp (component_id, EM_COMPOSER_PREFS_CONTROL_ID)) { + prefs = em_composer_prefs_new (); + data->apply = (ApplyFunc) em_composer_prefs_apply; } else { g_assert_not_reached (); } @@ -88,12 +88,12 @@ mail_config_control_factory_cb (BonoboGenericFactory *factory, const char *compo control = evolution_config_control_new (prefs); - if (!strcmp (component_id, MAIL_ACCOUNTS_CONTROL_ID)) { + if (!strcmp (component_id, EM_ACCOUNT_PREFS_CONTROL_ID)) { /* nothing to do here... */ - } else if (!strcmp (component_id, MAIL_PREFERENCES_CONTROL_ID)) { - MAIL_PREFERENCES (prefs)->control = control; - } else if (!strcmp (component_id, MAIL_COMPOSER_PREFS_CONTROL_ID)) { - MAIL_COMPOSER_PREFS (prefs)->control = control; + } else if (!strcmp (component_id, EM_MAILER_PREFS_CONTROL_ID)) { + EM_MAILER_PREFS (prefs)->control = control; + } else if (!strcmp (component_id, EM_COMPOSER_PREFS_CONTROL_ID)) { + EM_COMPOSER_PREFS (prefs)->control = control; } else { g_assert_not_reached (); } diff --git a/mail/mail-config-factory.h b/mail/mail-config-factory.h index 1a8993aacd..e726a51976 100644 --- a/mail/mail-config-factory.h +++ b/mail/mail-config-factory.h @@ -2,7 +2,7 @@ /* * Authors: Jeffrey Stedfast * - * Copyright 2002 Ximian, Inc. (www.ximian.com) + * Copyright 2002-2003 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,7 +27,7 @@ #ifdef __cplusplus extern "C" { #pragma } -#endif +#endif /* __cplusplus */ #include #include "evolution-config-control.h" @@ -40,6 +40,6 @@ BonoboObject *mail_config_control_factory_cb (BonoboGenericFactory *factory, con #ifdef __cplusplus } -#endif +#endif /* __cplusplus */ #endif /* __MAIL_CONFIG_FACTORY_H__ */ diff --git a/mail/mail-preferences.c b/mail/mail-preferences.c deleted file mode 100644 index 43f3a438f7..0000000000 --- a/mail/mail-preferences.c +++ /dev/null @@ -1,474 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: Jeffrey Stedfast - * - * Copyright 2002 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. - * - */ - - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "mail-preferences.h" - -#include -#include -#include "widgets/misc/e-charset-picker.h" -#include - -#include "mail-config.h" - - -static void mail_preferences_class_init (MailPreferencesClass *class); -static void mail_preferences_init (MailPreferences *dialog); -static void mail_preferences_finalise (GObject *obj); - -static GtkVBoxClass *parent_class = NULL; - - -GtkType -mail_preferences_get_type (void) -{ - static GType type = 0; - - if (!type) { - GTypeInfo type_info = { - sizeof (MailPreferencesClass), - NULL, NULL, - (GClassInitFunc) mail_preferences_class_init, - NULL, NULL, - sizeof (MailPreferences), - 0, - (GInstanceInitFunc) mail_preferences_init, - }; - - type = g_type_register_static (gtk_vbox_get_type (), "MailPreferences", &type_info, 0); - } - - return type; -} - -static void -mail_preferences_class_init (MailPreferencesClass *klass) -{ - GObjectClass *object_class; - - object_class = (GObjectClass *) klass; - parent_class = g_type_class_ref (gtk_vbox_get_type ()); - - object_class->finalize = mail_preferences_finalise; -} - -static void -mail_preferences_init (MailPreferences *preferences) -{ - preferences->gconf = mail_config_get_gconf_client (); -} - -static void -mail_preferences_finalise (GObject *obj) -{ - MailPreferences *prefs = (MailPreferences *) obj; - - g_object_unref (prefs->gui); - - ((GObjectClass *)(parent_class))->finalize (obj); -} - - -static void -colorpicker_set_color (GnomeColorPicker *color, const char *str) -{ - GdkColor colour; - guint32 rgb; - - gdk_color_parse (str, &colour); - rgb = ((colour.red & 0xff00) << 8) | (colour.green & 0xff00) | ((colour.blue & 0xff00) >> 8); - - gnome_color_picker_set_i8 (color, (rgb & 0xff0000) >> 16, (rgb & 0xff00) >> 8, rgb & 0xff, 0xff); -} - -static guint32 -colorpicker_get_color (GnomeColorPicker *color) -{ - guint8 r, g, b, a; - guint32 rgb = 0; - - gnome_color_picker_get_i8 (color, &r, &g, &b, &a); - - rgb = r; - rgb <<= 8; - rgb |= g; - rgb <<= 8; - rgb |= b; - - return rgb; -} - -static void -settings_changed (GtkWidget *widget, gpointer user_data) -{ - MailPreferences *prefs = (MailPreferences *) user_data; - - if (prefs->control) - evolution_config_control_changed (prefs->control); -} - -static void -font_share_changed (GtkWidget *w, gpointer user_data) -{ - MailPreferences *prefs = (MailPreferences *) user_data; - gboolean use_custom; - - use_custom = !gtk_toggle_button_get_active (prefs->font_share); - - gtk_widget_set_sensitive (GTK_WIDGET (prefs->font_fixed), use_custom); - gtk_widget_set_sensitive (GTK_WIDGET (prefs->font_variable), use_custom); - - if (prefs->control) - evolution_config_control_changed (prefs->control); -} - -static void -font_changed (GnomeFontPicker *fontpicker, gchar *arg1, gpointer user_data) -{ - MailPreferences *prefs = (MailPreferences *) user_data; - - if (prefs->control) - evolution_config_control_changed (prefs->control); -} - -static void -color_set (GtkWidget *widget, guint r, guint g, guint b, guint a, gpointer user_data) -{ - MailPreferences *prefs = (MailPreferences *) user_data; - - if (prefs->control) - evolution_config_control_changed (prefs->control); -} - -static void -restore_labels_clicked (GtkWidget *widget, gpointer user_data) -{ - MailPreferences *prefs = (MailPreferences *) user_data; - int i; - - for (i = 0; i < 5; i++) { - gtk_entry_set_text (prefs->labels[i].name, _(label_defaults[i].name)); - colorpicker_set_color (prefs->labels[i].color, label_defaults[i].colour); - } -} - -static void -menu_changed (GtkWidget *widget, gpointer user_data) -{ - MailPreferences *prefs = (MailPreferences *) user_data; - - if (prefs->control) - evolution_config_control_changed (prefs->control); -} - -static void -option_menu_connect (GtkOptionMenu *omenu, gpointer user_data) -{ - GtkWidget *menu, *item; - GList *items; - - menu = gtk_option_menu_get_menu (omenu); - - items = GTK_MENU_SHELL (menu)->children; - while (items) { - item = items->data; - g_signal_connect (item, "activate", G_CALLBACK (menu_changed), user_data); - items = items->next; - } -} - -static void -mail_preferences_construct (MailPreferences *prefs) -{ - GtkWidget *toplevel, *menu; - GSList *list; - GladeXML *gui; - gboolean bool; - char *font; - int i, val; - char *buf; - - gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", "preferences_tab", NULL); - prefs->gui = gui; - - /* get our toplevel widget */ - toplevel = glade_xml_get_widget (gui, "toplevel"); - - /* reparent */ - gtk_widget_ref (toplevel); - gtk_container_remove (GTK_CONTAINER (toplevel->parent), toplevel); - gtk_container_add (GTK_CONTAINER (prefs), toplevel); - gtk_widget_unref (toplevel); - - /* General tab */ - - /* Message Display */ - prefs->timeout_toggle = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkMarkTimeout")); - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/display/mark_seen", NULL); - gtk_toggle_button_set_active (prefs->timeout_toggle, bool); - g_signal_connect (prefs->timeout_toggle, "toggled", G_CALLBACK (settings_changed), prefs); - - prefs->timeout = GTK_SPIN_BUTTON (glade_xml_get_widget (gui, "spinMarkTimeout")); - val = gconf_client_get_int (prefs->gconf, "/apps/evolution/mail/display/mark_seen_timeout", NULL); - gtk_spin_button_set_value (prefs->timeout, (1.0 * val) / 1000.0); - g_signal_connect (prefs->timeout, "value-changed", G_CALLBACK (settings_changed), prefs); - - prefs->charset = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuCharset")); - buf = gconf_client_get_string (prefs->gconf, "/apps/evolution/mail/display/charset", NULL); - menu = e_charset_picker_new (buf && *buf ? buf : e_iconv_locale_charset ()); - gtk_option_menu_set_menu (prefs->charset, GTK_WIDGET (menu)); - option_menu_connect (prefs->charset, prefs); - g_free (buf); - - prefs->citation_highlight = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkHighlightCitations")); - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/display/mark_citations", NULL); - gtk_toggle_button_set_active (prefs->citation_highlight, bool); - g_signal_connect (prefs->citation_highlight, "toggled", G_CALLBACK (settings_changed), prefs); - - prefs->citation_color = GNOME_COLOR_PICKER (glade_xml_get_widget (gui, "colorpickerHighlightCitations")); - buf = gconf_client_get_string (prefs->gconf, "/apps/evolution/mail/display/citation_colour", NULL); - colorpicker_set_color (prefs->citation_color, buf ? buf : "#737373"); - g_signal_connect (prefs->citation_color, "color-set", G_CALLBACK (color_set), prefs); - g_free (buf); - - /* Deleting Mail */ - prefs->empty_trash = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkEmptyTrashOnExit")); - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/trash/empty_on_exit", NULL); - gtk_toggle_button_set_active (prefs->empty_trash, bool); - g_signal_connect (prefs->empty_trash, "toggled", G_CALLBACK (settings_changed), prefs); - - prefs->confirm_expunge = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkConfirmExpunge")); - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/prompts/expunge", NULL); - gtk_toggle_button_set_active (prefs->confirm_expunge, bool); - g_signal_connect (prefs->confirm_expunge, "toggled", G_CALLBACK (settings_changed), prefs); - - /* New Mail Notification */ - val = gconf_client_get_int (prefs->gconf, "/apps/evolution/mail/notify/type", NULL); - prefs->notify_not = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radNotifyNot")); - gtk_toggle_button_set_active (prefs->notify_not, val == MAIL_CONFIG_NOTIFY_NOT); - g_signal_connect (prefs->notify_not, "toggled", G_CALLBACK (settings_changed), prefs); - - prefs->notify_beep = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radNotifyBeep")); - gtk_toggle_button_set_active (prefs->notify_beep, val == MAIL_CONFIG_NOTIFY_BEEP); - g_signal_connect (prefs->notify_beep, "toggled", G_CALLBACK (settings_changed), prefs); - - prefs->notify_play_sound = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radNotifyPlaySound")); - gtk_toggle_button_set_active (prefs->notify_play_sound, val == MAIL_CONFIG_NOTIFY_PLAY_SOUND); - g_signal_connect (prefs->notify_play_sound, "toggled", G_CALLBACK (settings_changed), prefs); - - prefs->notify_sound_file = GNOME_FILE_ENTRY (glade_xml_get_widget (gui, "fileNotifyPlaySound")); - buf = gconf_client_get_string (prefs->gconf, "/apps/evolution/mail/notify/sound", NULL); - gtk_entry_set_text (GTK_ENTRY (gnome_file_entry_gtk_entry (prefs->notify_sound_file)), buf ? buf : ""); - g_signal_connect (gnome_file_entry_gtk_entry (prefs->notify_sound_file), "changed", - G_CALLBACK (settings_changed), prefs); - g_free (buf); - - /* Mail Fonts */ - font = gconf_client_get_string (prefs->gconf, "/apps/evolution/mail/display/fonts/monospace", NULL); - prefs->font_fixed = GNOME_FONT_PICKER (glade_xml_get_widget (gui, "radFontFixed")); - gnome_font_picker_set_font_name (prefs->font_fixed, font); - g_signal_connect (prefs->font_fixed, "font-set", G_CALLBACK (font_changed), prefs); - - font = gconf_client_get_string (prefs->gconf, "/apps/evolution/mail/display/fonts/variable", NULL); - prefs->font_variable = GNOME_FONT_PICKER (glade_xml_get_widget (gui, "radFontVariable")); - gnome_font_picker_set_font_name (prefs->font_variable, font); - g_signal_connect (prefs->font_variable, "font-set", G_CALLBACK (font_changed), prefs); - - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/display/fonts/use_custom", NULL); - prefs->font_share = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radFontUseSame")); - gtk_toggle_button_set_active (prefs->font_share, !bool); - g_signal_connect (prefs->font_share, "toggled", G_CALLBACK (font_share_changed), prefs); - font_share_changed (GTK_WIDGET (prefs->font_share), prefs); - - /* HTML Mail tab */ - - /* Loading Images */ - - val = gconf_client_get_int (prefs->gconf, "/apps/evolution/mail/display/load_http_images", NULL); - prefs->images_never = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radImagesNever")); - gtk_toggle_button_set_active (prefs->images_never, val == MAIL_CONFIG_HTTP_NEVER); - g_signal_connect (prefs->images_never, "toggled", G_CALLBACK (settings_changed), prefs); - - prefs->images_sometimes = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radImagesSometimes")); - gtk_toggle_button_set_active (prefs->images_sometimes, val == MAIL_CONFIG_HTTP_SOMETIMES); - g_signal_connect (prefs->images_sometimes, "toggled", G_CALLBACK (settings_changed), prefs); - - prefs->images_always = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radImagesAlways")); - gtk_toggle_button_set_active (prefs->images_always, val == MAIL_CONFIG_HTTP_ALWAYS); - g_signal_connect (prefs->images_always, "toggled", G_CALLBACK (settings_changed), prefs); - - prefs->show_animated = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkShowAnimatedImages")); - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/display/animate_images", NULL); - gtk_toggle_button_set_active (prefs->show_animated, bool); - g_signal_connect (prefs->show_animated, "toggled", G_CALLBACK (settings_changed), prefs); - - prefs->prompt_unwanted_html = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkPromptWantHTML")); - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/prompts/unwanted_html", NULL); - gtk_toggle_button_set_active (prefs->prompt_unwanted_html, bool); - g_signal_connect (prefs->prompt_unwanted_html, "toggled", G_CALLBACK (settings_changed), prefs); - - i = 0; - list = mail_config_get_labels (); - while (list != NULL && i < 5) { - MailConfigLabel *label; - char *widget_name; - - label = list->data; - - widget_name = g_strdup_printf ("txtLabel%d", i); - prefs->labels[i].name = GTK_ENTRY (glade_xml_get_widget (gui, widget_name)); - g_free (widget_name); - - widget_name = g_strdup_printf ("colorLabel%d", i); - prefs->labels[i].color = GNOME_COLOR_PICKER (glade_xml_get_widget (gui, widget_name)); - g_free (widget_name); - - gtk_entry_set_text (prefs->labels[i].name, label->name); - g_signal_connect (prefs->labels[i].name, "changed", G_CALLBACK (settings_changed), prefs); - - colorpicker_set_color (prefs->labels[i].color, label->colour); - g_signal_connect (prefs->labels[i].color, "color_set", G_CALLBACK (color_set), prefs); - - i++; - list = list->next; - } - - prefs->restore_labels = GTK_BUTTON (glade_xml_get_widget (gui, "cmdRestoreLabels")); - g_signal_connect (prefs->restore_labels, "clicked", G_CALLBACK (restore_labels_clicked), prefs); -} - - -GtkWidget * -mail_preferences_new (void) -{ - MailPreferences *new; - - new = (MailPreferences *) g_object_new (mail_preferences_get_type (), NULL); - mail_preferences_construct (new); - - return (GtkWidget *) new; -} - - -void -mail_preferences_apply (MailPreferences *prefs) -{ - GtkWidget *entry, *menu; - char *string, buf[20]; - const char *cstring; - GSList *list, *l; - guint32 rgb; - int i, val; - - /* General tab */ - - /* Message Display */ - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/display/mark_seen", - gtk_toggle_button_get_active (prefs->timeout_toggle), NULL); - - val = (int) (gtk_spin_button_get_value (prefs->timeout) * 1000.0); - gconf_client_set_int (prefs->gconf, "/apps/evolution/mail/display/mark_seen_timeout", val, NULL); - - menu = gtk_option_menu_get_menu (prefs->charset); - if (!(string = e_charset_picker_get_charset (menu))) - string = g_strdup (e_iconv_locale_charset ()); - - gconf_client_set_string (prefs->gconf, "/apps/evolution/mail/display/charset", string, NULL); - g_free (string); - - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/display/mark_citations", - gtk_toggle_button_get_active (prefs->citation_highlight), NULL); - - rgb = colorpicker_get_color (prefs->citation_color); - sprintf (buf,"#%06x", rgb & 0xffffff); - gconf_client_set_string (prefs->gconf, "/apps/evolution/mail/display/citation_colour", buf, NULL); - - /* Deleting Mail */ - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/trash/empty_on_exit", - gtk_toggle_button_get_active (prefs->empty_trash), NULL); - - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/prompts/expunge", - gtk_toggle_button_get_active (prefs->confirm_expunge), NULL); - - /* New Mail Notification */ - if (gtk_toggle_button_get_active (prefs->notify_not)) - val = MAIL_CONFIG_NOTIFY_NOT; - else if (gtk_toggle_button_get_active (prefs->notify_beep)) - val = MAIL_CONFIG_NOTIFY_BEEP; - else - val = MAIL_CONFIG_NOTIFY_PLAY_SOUND; - - gconf_client_set_int (prefs->gconf, "/apps/evolution/mail/notify/type", val, NULL); - - entry = gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (prefs->notify_sound_file)); - cstring = gtk_entry_get_text (GTK_ENTRY (entry)); - gconf_client_set_string (prefs->gconf, "/apps/evolution/mail/notify/sound", cstring, NULL); - - /* HTML Mail */ - if (gtk_toggle_button_get_active (prefs->images_always)) - val = MAIL_CONFIG_HTTP_ALWAYS; - else if (gtk_toggle_button_get_active (prefs->images_sometimes)) - val = MAIL_CONFIG_HTTP_SOMETIMES; - else - val = MAIL_CONFIG_HTTP_NEVER; - - gconf_client_set_int (prefs->gconf, "/apps/evolution/mail/display/load_http_images", val, NULL); - - gconf_client_set_string (prefs->gconf, "/apps/evolution/mail/display/fonts/variable", - gnome_font_picker_get_font_name (prefs->font_variable), NULL); - gconf_client_set_string (prefs->gconf, "/apps/evolution/mail/display/fonts/monospace", - gnome_font_picker_get_font_name (prefs->font_fixed), NULL); - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/display/fonts/use_custom", - !gtk_toggle_button_get_active (prefs->font_share), NULL); - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/display/animate_images", - gtk_toggle_button_get_active (prefs->show_animated), NULL); - - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/prompts/unwanted_html", - gtk_toggle_button_get_active (prefs->prompt_unwanted_html), NULL); - - - /* Labels and Colours */ - list = NULL; - for (i = 4; i >= 0; i--) { - cstring = gtk_entry_get_text (prefs->labels[i].name); - rgb = colorpicker_get_color (prefs->labels[i].color); - string = g_strdup_printf ("%s:#%06x", cstring, rgb & 0xffffff); - list = g_slist_prepend (list, string); - } - - gconf_client_set_list (prefs->gconf, "/apps/evolution/mail/labels", GCONF_VALUE_STRING, list, NULL); - - l = list; - while (l != NULL) { - g_free (l->data); - l = l->next; - } - g_slist_free (list); - - gconf_client_suggest_sync (prefs->gconf, NULL); -} diff --git a/mail/mail-preferences.h b/mail/mail-preferences.h deleted file mode 100644 index bca18a316b..0000000000 --- a/mail/mail-preferences.h +++ /dev/null @@ -1,124 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: Jeffrey Stedfast - * - * Copyright 2002 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_PREFERENCES_H__ -#define __MAIL_PREFERENCES_H__ - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif - -#include -#include -#include -#include -#include -#include - -#include "evolution-config-control.h" - -#include - -#define MAIL_PREFERENCES_TYPE (mail_preferences_get_type ()) -#define MAIL_PREFERENCES(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MAIL_PREFERENCES_TYPE, MailPreferences)) -#define MAIL_PREFERENCES_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), MAIL_PREFERENCES_TYPE, MailPreferencesClass)) -#define IS_MAIL_PREFERENCES(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MAIL_PREFERENCES_TYPE)) -#define IS_MAIL_PREFERENCES_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MAIL_PREFERENCES_TYPE)) - -typedef struct _MailPreferences MailPreferences; -typedef struct _MailPreferencesClass MailPreferencesClass; - -struct _MailPreferences { - GtkVBox parent_object; - - GNOME_Evolution_Shell shell; - - EvolutionConfigControl *control; - - GladeXML *gui; - GConfClient *gconf; - - /* General tab */ - - /* Message Display */ - GtkToggleButton *timeout_toggle; - GtkSpinButton *timeout; - GtkOptionMenu *charset; - GtkToggleButton *citation_highlight; - GnomeColorPicker *citation_color; - - /* Deleting Mail */ - GtkToggleButton *empty_trash; - GtkToggleButton *confirm_expunge; - - /* New Mail Notification */ - GtkToggleButton *notify_not; - GtkToggleButton *notify_beep; - GtkToggleButton *notify_play_sound; - GnomeFileEntry *notify_sound_file; - - /* HTML Mail tab */ - GnomeFontPicker *font_variable; - GnomeFontPicker *font_fixed; - GtkToggleButton *font_share; - - /* Loading Images */ - GtkToggleButton *images_always; - GtkToggleButton *images_sometimes; - GtkToggleButton *images_never; - - GtkToggleButton *show_animated; - GtkToggleButton *autodetect_links; - GtkToggleButton *prompt_unwanted_html; - - /* Labels and Colours tab */ - struct { - GtkEntry *name; - GnomeColorPicker *color; - } labels[5]; - GtkButton *restore_labels; -}; - -struct _MailPreferencesClass { - GtkVBoxClass parent_class; - - /* signals */ - -}; - - -GtkType mail_preferences_get_type (void); - -GtkWidget *mail_preferences_new (void); - -void mail_preferences_apply (MailPreferences *prefs); - -/* needed by global config */ -#define MAIL_PREFERENCES_CONTROL_ID "OAFIID:GNOME_Evolution_Mail_Preferences_ConfigControl" - -#ifdef __cplusplus -} -#endif - -#endif /* __MAIL_PREFERENCES_H__ */ diff --git a/mail/mail.h b/mail/mail.h index 86ca868f5f..16ad3e0136 100644 --- a/mail/mail.h +++ b/mail/mail.h @@ -24,10 +24,7 @@ #include #include #include -#include "mail-accounts.h" -#include "mail-account-editor.h" #include "mail-config.h" -#include "mail-config-druid.h" #include "mail-session.h" #include "mail-types.h" -- cgit v1.2.3