aboutsummaryrefslogtreecommitdiffstats
path: root/mail/em-account-editor.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/em-account-editor.c')
-rw-r--r--mail/em-account-editor.c804
1 files changed, 544 insertions, 260 deletions
diff --git a/mail/em-account-editor.c b/mail/em-account-editor.c
index 0c7e978a2f..af4be14a69 100644
--- a/mail/em-account-editor.c
+++ b/mail/em-account-editor.c
@@ -26,7 +26,7 @@
work before merge can occur:
verify behaviour.
- work out what to do with the startup druid.
+ work out what to do with the startup assistant.
also need to work out:
how to remove unecessary items from a service url once
@@ -48,24 +48,22 @@
#include <glade/glade.h>
-#include <libgnomeui/gnome-druid.h>
-#include <libgnomeui/gnome-druid-page-standard.h>
-
-#include <libedataserver/e-account-list.h>
-#include <e-util/e-signature-list.h>
-
+#include "shell/e-shell.h"
#include "e-util/e-error.h"
+#include "e-util/e-account-utils.h"
+#include "e-util/e-signature-list.h"
+#include "e-util/e-signature-utils.h"
#include "e-util/e-util-private.h"
+#include "widgets/misc/e-signature-editor.h"
+#include "e-mail-local.h"
+#include "e-mail-store.h"
#include "em-config.h"
#include "em-folder-selection-button.h"
#include "em-account-editor.h"
#include "mail-session.h"
#include "mail-send-recv.h"
-#include "mail-signature-editor.h"
-#include "mail-component.h"
#include "em-utils.h"
-#include "em-composer-prefs.h"
#include "mail-config.h"
#include "mail-ops.h"
#include "mail-mt.h"
@@ -74,6 +72,10 @@
#include "smime/gui/e-cert-selector.h"
#endif
+#define EM_ACCOUNT_EDITOR_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE \
+ ((obj), EM_TYPE_ACCOUNT_EDITOR, EMAccountEditorPrivate))
+
#define d(x)
/* econfig item for the extra config hings */
@@ -128,6 +130,10 @@ typedef struct _EMAccountEditorService {
} EMAccountEditorService;
struct _EMAccountEditorPrivate {
+
+ EAccount *modified_account;
+ EAccount *original_account;
+
struct _EMConfig *config;
GList *providers;
@@ -181,60 +187,194 @@ struct _EMAccountEditorPrivate {
const gchar *widgets_name[5];
gint widgets_index;
- /* for druid page preparation */
+ /* for assistant page preparation */
guint identity_set:1;
guint receive_set:1;
guint send_set:1;
guint management_set:1;
};
+enum {
+ PROP_0,
+ PROP_MODIFIED_ACCOUNT,
+ PROP_ORIGINAL_ACCOUNT,
+ PROP_SHELL
+};
+
static void emae_refresh_authtype (EMAccountEditor *emae, EMAccountEditorService *service);
-static void em_account_editor_construct (EMAccountEditor *emae, EAccount *account, em_account_editor_t type, const gchar *id);
+static void em_account_editor_construct (EMAccountEditor *emae, EMAccountEditorType type, const gchar *id);
static void emae_account_folder_changed (EMFolderSelectionButton *folder, EMAccountEditor *emae);
-static GtkVBoxClass *emae_parent;
+
+static gpointer parent_class;
static void
-emae_init (GObject *o)
+emae_set_original_account (EMAccountEditor *emae,
+ EAccount *original_account)
{
- EMAccountEditor *emae = (EMAccountEditor *)o;
+ EAccount *modified_account;
- emae->priv = g_malloc0(sizeof (*emae->priv));
+ g_return_if_fail (emae->priv->original_account == NULL);
- emae->priv->source.emae = emae;
- emae->priv->transport.emae = emae;
+ /* Editing an existing account. */
+ if (original_account != NULL) {
+ gchar *xml;
+
+ xml = e_account_to_xml (original_account);
+ modified_account = e_account_new_from_xml (xml);
+ g_free (xml);
+
+ g_object_ref (original_account);
+ if (emae->type != EMAE_PAGES)
+ emae->do_signature = TRUE;
+
+ /* Creating a new account. */
+ } else {
+ modified_account = e_account_new ();
+ modified_account->enabled = TRUE;
+
+ e_account_set_string (
+ modified_account, E_ACCOUNT_DRAFTS_FOLDER_URI,
+ e_mail_local_get_folder_uri (E_MAIL_FOLDER_DRAFTS));
+
+ e_account_set_string (
+ modified_account, E_ACCOUNT_SENT_FOLDER_URI,
+ e_mail_local_get_folder_uri (E_MAIL_FOLDER_SENT));
+ }
+
+ emae->priv->original_account = original_account;
+ emae->priv->modified_account = modified_account;
}
static void
-emae_finalise (GObject *o)
+emae_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
- EMAccountEditor *emae = (EMAccountEditor *)o;
- EMAccountEditorPrivate *p = emae->priv;
+ switch (property_id) {
+ case PROP_ORIGINAL_ACCOUNT:
+ emae_set_original_account (
+ EM_ACCOUNT_EDITOR (object),
+ g_value_get_object (value));
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+emae_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ switch (property_id) {
+ case PROP_MODIFIED_ACCOUNT:
+ g_value_set_object (
+ value,
+ em_account_editor_get_modified_account (
+ EM_ACCOUNT_EDITOR (object)));
+ return;
+
+ case PROP_ORIGINAL_ACCOUNT:
+ g_value_set_object (
+ value,
+ em_account_editor_get_original_account (
+ EM_ACCOUNT_EDITOR (object)));
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+emae_dispose (GObject *object)
+{
+ EMAccountEditorPrivate *priv;
+
+ priv = EM_ACCOUNT_EDITOR_GET_PRIVATE (object);
+
+ if (priv->modified_account != NULL) {
+ g_object_unref (priv->modified_account);
+ priv->modified_account = NULL;
+ }
+
+ if (priv->original_account != NULL) {
+ g_object_unref (priv->original_account);
+ priv->original_account = NULL;
+ }
+
+ /* Chain up to parent's dispose() method. */
+ G_OBJECT_CLASS (parent_class)->dispose (object);
+}
- if (p->sig_added_id) {
- ESignatureList *signatures = mail_config_get_signatures ();
+static void
+emae_finalize (GObject *object)
+{
+ EMAccountEditor *emae = EM_ACCOUNT_EDITOR (object);
+ EMAccountEditorPrivate *priv = emae->priv;
+
+ if (priv->sig_added_id) {
+ ESignatureList *signatures;
- g_signal_handler_disconnect (signatures, p->sig_added_id);
- g_signal_handler_disconnect (signatures, p->sig_removed_id);
- g_signal_handler_disconnect (signatures, p->sig_changed_id);
+ signatures = e_get_signature_list ();
+ g_signal_handler_disconnect (signatures, priv->sig_added_id);
+ g_signal_handler_disconnect (signatures, priv->sig_removed_id);
+ g_signal_handler_disconnect (signatures, priv->sig_changed_id);
}
- g_list_free (p->source.authtypes);
- g_list_free (p->transport.authtypes);
+ g_list_free (priv->source.authtypes);
+ g_list_free (priv->transport.authtypes);
- g_list_free (p->providers);
- g_free (p);
+ g_list_free (priv->providers);
- g_object_unref (emae->account);
- if (emae->original)
- g_object_unref (emae->original);
+ /* Chain up to parent's finalize() method. */
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
- ((GObjectClass *)emae_parent)->finalize (o);
+static void
+emae_class_init (GObjectClass *class)
+{
+ GObjectClass *object_class;
+
+ parent_class = g_type_class_peek_parent (class);
+ g_type_class_add_private (class, sizeof (EMAccountEditorPrivate));
+
+ object_class = G_OBJECT_CLASS (class);
+ object_class->set_property = emae_set_property;
+ object_class->get_property = emae_get_property;
+ object_class->dispose = emae_dispose;
+ object_class->finalize = emae_finalize;
+
+ g_object_class_install_property (
+ object_class,
+ PROP_MODIFIED_ACCOUNT,
+ g_param_spec_object (
+ "modified-account",
+ "Modified Account",
+ NULL,
+ E_TYPE_ACCOUNT,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_ORIGINAL_ACCOUNT,
+ g_param_spec_object (
+ "original-account",
+ "Original Account",
+ NULL,
+ E_TYPE_ACCOUNT,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
}
static void
-emae_class_init (GObjectClass *klass)
+emae_init (EMAccountEditor *emae)
{
- klass->finalize = emae_finalise;
+ emae->priv = EM_ACCOUNT_EDITOR_GET_PRIVATE (emae);
+
+ emae->priv->source.emae = emae;
+ emae->priv->transport.emae = emae;
}
GType
@@ -242,17 +382,22 @@ em_account_editor_get_type (void)
{
static GType type = 0;
- if (type == 0) {
- static const GTypeInfo info = {
+ if (G_UNLIKELY (type == 0)) {
+ static const GTypeInfo type_info = {
sizeof (EMAccountEditorClass),
- NULL, NULL,
- (GClassInitFunc)emae_class_init,
- NULL, NULL,
- sizeof (EMAccountEditor), 0,
- (GInstanceInitFunc)emae_init
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) emae_class_init,
+ (GClassFinalizeFunc) NULL,
+ NULL, /* class_data */
+ sizeof (EMAccountEditor),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) emae_init,
+ NULL /* value_table */
};
- emae_parent = g_type_class_ref (G_TYPE_OBJECT);
- type = g_type_register_static (G_TYPE_OBJECT, "EMAccountEditor", &info, 0);
+
+ type = g_type_register_static (
+ G_TYPE_OBJECT, "EMAccountEditor", &type_info, 0);
}
return type;
@@ -269,11 +414,18 @@ em_account_editor_get_type (void)
*
* Return value:
**/
-EMAccountEditor *em_account_editor_new (EAccount *account, em_account_editor_t type, const gchar *id)
+EMAccountEditor *
+em_account_editor_new (EAccount *account,
+ EMAccountEditorType type,
+ const gchar *id)
{
- EMAccountEditor *emae = g_object_new (em_account_editor_get_type (), NULL);
+ EMAccountEditor *emae;
- em_account_editor_construct (emae, account, type, id);
+ emae = g_object_new (
+ EM_TYPE_ACCOUNT_EDITOR,
+ "original-account", account, NULL);
+
+ em_account_editor_construct (emae, type, id);
return emae;
}
@@ -289,15 +441,40 @@ EMAccountEditor *em_account_editor_new (EAccount *account, em_account_editor_t t
*
* Return value:
**/
-EMAccountEditor *em_account_editor_new_for_pages (EAccount *account, em_account_editor_t type, gchar *id, GtkWidget **pages)
+EMAccountEditor *
+em_account_editor_new_for_pages (EAccount *account,
+ EMAccountEditorType type,
+ const gchar *id,
+ GtkWidget **pages)
{
- EMAccountEditor *emae = g_object_new (em_account_editor_get_type (), NULL);
+ EMAccountEditor *emae;
+
+ emae = g_object_new (
+ EM_TYPE_ACCOUNT_EDITOR,
+ "original-account", account, NULL);
+
emae->pages = pages;
- em_account_editor_construct (emae, account, type, id);
+ em_account_editor_construct (emae, type, id);
return emae;
}
+EAccount *
+em_account_editor_get_modified_account (EMAccountEditor *emae)
+{
+ g_return_val_if_fail (EM_IS_ACCOUNT_EDITOR (emae), NULL);
+
+ return emae->priv->modified_account;
+}
+
+EAccount *
+em_account_editor_get_original_account (EMAccountEditor *emae)
+{
+ g_return_val_if_fail (EM_IS_ACCOUNT_EDITOR (emae), NULL);
+
+ return emae->priv->original_account;
+}
+
/* ********************************************************************** */
static struct {
@@ -337,10 +514,12 @@ is_email (const gchar *address)
static CamelURL *
emae_account_url (EMAccountEditor *emae, gint urlid)
{
+ EAccount *account;
CamelURL *url = NULL;
const gchar *uri;
- uri = e_account_get_string (emae->account, urlid);
+ account = em_account_editor_get_modified_account (emae);
+ uri = e_account_get_string (account, urlid);
if (uri && uri[0])
url = camel_url_new (uri, NULL);
@@ -469,11 +648,11 @@ default_folders_clicked (GtkButton *button, gpointer user_data)
EMAccountEditor *emae = user_data;
const gchar *uri;
- uri = mail_component_get_folder_uri (NULL, MAIL_COMPONENT_FOLDER_DRAFTS);
+ uri = e_mail_local_get_folder_uri (E_MAIL_FOLDER_DRAFTS);
em_folder_selection_button_set_selection ((EMFolderSelectionButton *)emae->priv->drafts_folder_button, uri);
emae_account_folder_changed ((EMFolderSelectionButton *)emae->priv->drafts_folder_button, emae);
- uri = mail_component_get_folder_uri (NULL, MAIL_COMPONENT_FOLDER_SENT);
+ uri = e_mail_local_get_folder_uri (E_MAIL_FOLDER_SENT);
em_folder_selection_button_set_selection ((EMFolderSelectionButton *)emae->priv->sent_folder_button, uri);
emae_account_folder_changed ((EMFolderSelectionButton *)emae->priv->sent_folder_button, emae);
}
@@ -484,7 +663,8 @@ GtkWidget *em_account_editor_folder_selector_button_new (gchar *widget_name, gch
GtkWidget *
em_account_editor_folder_selector_button_new (gchar *widget_name, gchar *string1, gchar *string2, gint int1, gint int2)
{
- return (GtkWidget *)em_folder_selection_button_new (string1 ? string1 : _("Select Folder"), NULL);
+ return (GtkWidget *)em_folder_selection_button_new (
+ string1 ? string1 : _("Select Folder"), NULL);
}
GtkWidget *em_account_editor_dropdown_new (gchar *widget_name, gchar *string1, gchar *string2, gint int1, gint int2);
@@ -492,7 +672,7 @@ GtkWidget *em_account_editor_dropdown_new (gchar *widget_name, gchar *string1, g
GtkWidget *
em_account_editor_dropdown_new (gchar *widget_name, gchar *string1, gchar *string2, gint int1, gint int2)
{
- return (GtkWidget *)gtk_combo_box_new ();
+ return gtk_combo_box_new ();
}
GtkWidget *em_account_editor_ssl_selector_new (gchar *widget_name, gchar *string1, gchar *string2, gint int1, gint int2);
@@ -670,34 +850,53 @@ emae_signature_changed (ESignatureList *signatures, ESignature *sig, EMAccountEd
static void
emae_signaturetype_changed (GtkComboBox *dropdown, EMAccountEditor *emae)
{
+ EAccount *account;
gint id = gtk_combo_box_get_active (dropdown);
GtkTreeModel *model;
GtkTreeIter iter;
gchar *uid = NULL;
+ account = em_account_editor_get_modified_account (emae);
+
if (id != -1) {
model = gtk_combo_box_get_model (dropdown);
if (gtk_tree_model_iter_nth_child (model, &iter, NULL, id))
gtk_tree_model_get (model, &iter, 1, &uid, -1);
}
- e_account_set_string (emae->account, E_ACCOUNT_ID_SIGNATURE, uid);
+ e_account_set_string (account, E_ACCOUNT_ID_SIGNATURE, uid);
g_free (uid);
}
static void
-emae_signature_new (GtkWidget *w, EMAccountEditor *emae)
+emae_signature_new (GtkWidget *widget, EMAccountEditor *emae)
{
- /* TODO: why is this in composer prefs? apart from it being somewhere to put it? */
- em_composer_prefs_new_signature ((GtkWindow *)gtk_widget_get_toplevel (w),
- gconf_client_get_bool (mail_config_get_gconf_client (),
- "/apps/evolution/mail/composer/send_html", NULL));
+ EShell *shell;
+ EShellSettings *shell_settings;
+ GtkWidget *editor;
+ gboolean html_mode;
+ gpointer parent;
+
+ shell = e_shell_get_default ();
+ shell_settings = e_shell_get_shell_settings (shell);
+
+ parent = gtk_widget_get_toplevel (widget);
+ parent = GTK_WIDGET_TOPLEVEL (parent) ? parent : NULL;
+
+ html_mode = e_shell_settings_get_boolean (
+ shell_settings, "composer-format-html");
+
+ editor = e_signature_editor_new ();
+ gtkhtml_editor_set_html_mode (GTKHTML_EDITOR (editor), html_mode);
+ gtk_window_set_transient_for (GTK_WINDOW (editor), parent);
+ gtk_widget_show (editor);
}
static GtkWidget *
emae_setup_signatures (EMAccountEditor *emae, GladeXML *xml)
{
EMAccountEditorPrivate *p = emae->priv;
+ EAccount *account;
GtkComboBox *dropdown = (GtkComboBox *)glade_xml_get_widget (xml, "signature_dropdown");
GtkCellRenderer *cell = gtk_cell_renderer_text_new ();
GtkListStore *store;
@@ -705,9 +904,12 @@ emae_setup_signatures (EMAccountEditor *emae, GladeXML *xml)
GtkTreeIter iter;
ESignatureList *signatures;
EIterator *it;
- const gchar *current = e_account_get_string (emae->account, E_ACCOUNT_ID_SIGNATURE);
+ const gchar *current;
GtkWidget *button;
+ account = em_account_editor_get_modified_account (emae);
+ current = e_account_get_string (account, E_ACCOUNT_ID_SIGNATURE);
+
emae->priv->signatures_dropdown = dropdown;
gtk_widget_show ((GtkWidget *)dropdown);
@@ -716,7 +918,7 @@ emae_setup_signatures (EMAccountEditor *emae, GladeXML *xml)
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter, 0, _("None"), 1, NULL, -1);
- signatures = mail_config_get_signatures ();
+ signatures = e_get_signature_list ();
if (p->sig_added_id == 0) {
p->sig_added_id = g_signal_connect (signatures, "signature-added", G_CALLBACK(emae_signature_added), emae);
@@ -753,7 +955,7 @@ emae_setup_signatures (EMAccountEditor *emae, GladeXML *xml)
gtk_combo_box_set_active (dropdown, active);
g_signal_connect (dropdown, "changed", G_CALLBACK(emae_signaturetype_changed), emae);
- gtk_widget_set_sensitive ((GtkWidget *)dropdown, e_account_writable (emae->account, E_ACCOUNT_ID_SIGNATURE));
+ gtk_widget_set_sensitive ((GtkWidget *)dropdown, e_account_writable (account, E_ACCOUNT_ID_SIGNATURE));
button = glade_xml_get_widget (xml, "sigAddNew");
g_signal_connect (button, "clicked", G_CALLBACK(emae_signature_new), emae);
@@ -767,29 +969,32 @@ emae_setup_signatures (EMAccountEditor *emae, GladeXML *xml)
static void
emae_receipt_policy_changed (GtkComboBox *dropdown, EMAccountEditor *emae)
{
+ EAccount *account;
gint id = gtk_combo_box_get_active (dropdown);
GtkTreeModel *model;
GtkTreeIter iter;
EAccountReceiptPolicy policy;
+ account = em_account_editor_get_modified_account (emae);
+
if (id != -1) {
model = gtk_combo_box_get_model (dropdown);
if (gtk_tree_model_iter_nth_child (model, &iter, NULL, id)) {
gtk_tree_model_get (model, &iter, 1, &policy, -1);
- e_account_set_int (emae->account, E_ACCOUNT_RECEIPT_POLICY, policy);
+ e_account_set_int (account, E_ACCOUNT_RECEIPT_POLICY, policy);
}
}
-
}
static GtkWidget *
emae_setup_receipt_policy (EMAccountEditor *emae, GladeXML *xml)
{
+ EAccount *account;
GtkComboBox *dropdown = (GtkComboBox *)glade_xml_get_widget (xml, "receipt_policy_dropdown");
GtkListStore *store;
gint i = 0, active = 0;
GtkTreeIter iter;
- EAccountReceiptPolicy current = emae->account->receipt_policy;
+ EAccountReceiptPolicy current;
static struct {
EAccountReceiptPolicy policy;
const gchar *label;
@@ -799,6 +1004,9 @@ emae_setup_receipt_policy (EMAccountEditor *emae, GladeXML *xml)
{ E_ACCOUNT_RECEIPT_ASK, N_("Ask for each message") }
};
+ account = em_account_editor_get_modified_account (emae);
+ current = account->receipt_policy;
+
gtk_widget_show ((GtkWidget *)dropdown);
store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
@@ -817,7 +1025,7 @@ emae_setup_receipt_policy (EMAccountEditor *emae, GladeXML *xml)
gtk_combo_box_set_active (dropdown, active);
g_signal_connect (dropdown, "changed", G_CALLBACK(emae_receipt_policy_changed), emae);
- gtk_widget_set_sensitive ((GtkWidget *)dropdown, e_account_writable (emae->account, E_ACCOUNT_RECEIPT_POLICY));
+ gtk_widget_set_sensitive ((GtkWidget *)dropdown, e_account_writable (account, E_ACCOUNT_RECEIPT_POLICY));
return (GtkWidget *)dropdown;
}
@@ -825,24 +1033,32 @@ emae_setup_receipt_policy (EMAccountEditor *emae, GladeXML *xml)
static void
emae_account_entry_changed (GtkEntry *entry, EMAccountEditor *emae)
{
- gint item = GPOINTER_TO_INT(g_object_get_data ((GObject *)entry, "account-item"));
+ EAccount *account;
+ const gchar *text;
+ gpointer data;
- e_account_set_string (emae->account, item, gtk_entry_get_text (entry));
+ account = em_account_editor_get_modified_account (emae);
+ data = g_object_get_data (G_OBJECT (entry), "account-item");
+ text = gtk_entry_get_text (entry);
+
+ e_account_set_string (account, GPOINTER_TO_INT (data), text);
}
static GtkEntry *
emae_account_entry (EMAccountEditor *emae, const gchar *name, gint item, GladeXML *xml)
{
+ EAccount *account;
GtkEntry *entry;
const gchar *text;
+ account = em_account_editor_get_modified_account (emae);
entry = (GtkEntry *)glade_xml_get_widget (xml, name);
- text = e_account_get_string (emae->account, item);
+ text = e_account_get_string (account, item);
if (text)
gtk_entry_set_text (entry, text);
g_object_set_data ((GObject *)entry, "account-item", GINT_TO_POINTER(item));
g_signal_connect (entry, "changed", G_CALLBACK(emae_account_entry_changed), emae);
- gtk_widget_set_sensitive ((GtkWidget *)entry, e_account_writable (emae->account, item));
+ gtk_widget_set_sensitive ((GtkWidget *)entry, e_account_writable (account, item));
return entry;
}
@@ -850,18 +1066,39 @@ emae_account_entry (EMAccountEditor *emae, const gchar *name, gint item, GladeXM
static void
emae_account_toggle_changed (GtkToggleButton *toggle, EMAccountEditor *emae)
{
- gint item = GPOINTER_TO_INT(g_object_get_data ((GObject *)toggle, "account-item"));
+ EAccount *account;
+ gboolean active;
+ gpointer data;
+
+ account = em_account_editor_get_modified_account (emae);
+ data = g_object_get_data (G_OBJECT (toggle), "account-item");
+ active = gtk_toggle_button_get_active (toggle);
- e_account_set_bool (emae->account, item, gtk_toggle_button_get_active (toggle));
+ e_account_set_bool (account, GPOINTER_TO_INT (data), active);
}
static void
emae_account_toggle_widget (EMAccountEditor *emae, GtkToggleButton *toggle, gint item)
{
- gtk_toggle_button_set_active (toggle, e_account_get_bool (emae->account, item));
- g_object_set_data ((GObject *)toggle, "account-item", GINT_TO_POINTER(item));
- g_signal_connect (toggle, "toggled", G_CALLBACK(emae_account_toggle_changed), emae);
- gtk_widget_set_sensitive ((GtkWidget *)toggle, e_account_writable (emae->account, item));
+ EAccount *account;
+ gboolean active;
+ gboolean writable;
+
+ account = em_account_editor_get_modified_account (emae);
+
+ active = e_account_get_bool (account, item);
+ gtk_toggle_button_set_active (toggle, active);
+
+ writable = e_account_writable (account, item);
+ gtk_widget_set_sensitive (GTK_WIDGET (toggle), writable);
+
+ g_object_set_data (
+ G_OBJECT (toggle), "account-item",
+ GINT_TO_POINTER (item));
+
+ g_signal_connect (
+ toggle, "toggled",
+ G_CALLBACK (emae_account_toggle_changed), emae);
}
static GtkToggleButton *
@@ -878,18 +1115,39 @@ emae_account_toggle (EMAccountEditor *emae, const gchar *name, gint item, GladeX
static void
emae_account_spinint_changed (GtkSpinButton *spin, EMAccountEditor *emae)
{
- gint item = GPOINTER_TO_INT(g_object_get_data ((GObject *)spin, "account-item"));
+ EAccount *account;
+ gpointer data;
+ gint value;
+
+ account = em_account_editor_get_modified_account (emae);
+ data = g_object_get_data (G_OBJECT (spin), "account-item");
+ value = gtk_spin_button_get_value (spin);
- e_account_set_int (emae->account, item, gtk_spin_button_get_value (spin));
+ e_account_set_int (account, GPOINTER_TO_INT (data), value);
}
static void
emae_account_spinint_widget (EMAccountEditor *emae, GtkSpinButton *spin, gint item)
{
- gtk_spin_button_set_value (spin, e_account_get_int (emae->account, item));
- g_object_set_data ((GObject *)spin, "account-item", GINT_TO_POINTER(item));
- g_signal_connect (spin, "value_changed", G_CALLBACK(emae_account_spinint_changed), emae);
- gtk_widget_set_sensitive ((GtkWidget *)spin, e_account_writable (emae->account, item));
+ EAccount *account;
+ gboolean writable;
+ gint v_int;
+
+ account = em_account_editor_get_modified_account (emae);
+
+ v_int = e_account_get_int (account, item);
+ gtk_spin_button_set_value (spin, v_int);
+
+ writable = e_account_writable (account, item);
+ gtk_widget_set_sensitive (GTK_WIDGET (spin), writable);
+
+ g_object_set_data (
+ G_OBJECT (spin), "account-item",
+ GINT_TO_POINTER (item));
+
+ g_signal_connect (
+ spin, "value-changed",
+ G_CALLBACK(emae_account_spinint_changed), emae);
}
#if 0
@@ -908,26 +1166,37 @@ emae_account_spinint (EMAccountEditor *emae, const gchar *name, gint item)
static void
emae_account_folder_changed (EMFolderSelectionButton *folder, EMAccountEditor *emae)
{
- gint item = GPOINTER_TO_INT(g_object_get_data ((GObject *)folder, "account-item"));
+ EAccount *account;
+ gpointer data;
+ const gchar *selection;
+
+ account = em_account_editor_get_modified_account (emae);
+ data = g_object_get_data (G_OBJECT (folder), "account-item");
+ selection = em_folder_selection_button_get_selection (folder);
- e_account_set_string (emae->account, item, em_folder_selection_button_get_selection (folder));
+ e_account_set_string (account, GPOINTER_TO_INT (data), selection);
}
static EMFolderSelectionButton *
emae_account_folder (EMAccountEditor *emae, const gchar *name, gint item, gint deffolder, GladeXML *xml)
{
+ EAccount *account;
EMFolderSelectionButton *folder;
const gchar *uri;
+ account = em_account_editor_get_modified_account (emae);
folder = (EMFolderSelectionButton *)glade_xml_get_widget (xml, name);
- uri = e_account_get_string (emae->account, item);
+ uri = e_account_get_string (account, item);
if (uri) {
gchar *tmp = em_uri_to_camel (uri);
em_folder_selection_button_set_selection (folder, tmp);
g_free (tmp);
} else {
- em_folder_selection_button_set_selection (folder, mail_component_get_folder_uri (NULL, deffolder));
+ const gchar *uri;
+
+ uri = e_mail_local_get_folder_uri (deffolder);
+ em_folder_selection_button_set_selection (folder, uri);
}
g_object_set_data ((GObject *)folder, "account-item", GINT_TO_POINTER(item));
@@ -935,7 +1204,7 @@ emae_account_folder (EMAccountEditor *emae, const gchar *name, gint item, gint d
g_signal_connect (folder, "selected", G_CALLBACK(emae_account_folder_changed), emae);
gtk_widget_show ((GtkWidget *)folder);
- gtk_widget_set_sensitive ((GtkWidget *)folder, e_account_writable (emae->account, item));
+ gtk_widget_set_sensitive ((GtkWidget *)folder, e_account_writable (account, item));
return folder;
}
@@ -1144,17 +1413,19 @@ static struct _service_info {
static void
emae_uri_changed (EMAccountEditorService *service, CamelURL *url)
{
+ EAccount *account;
gchar *uri;
+ account = em_account_editor_get_modified_account (service->emae);
uri = camel_url_to_string (url, 0);
- e_account_set_string (service->emae->account, emae_service_info[service->type].account_uri_key, uri);
+ e_account_set_string (account, emae_service_info[service->type].account_uri_key, uri);
/* small hack for providers which are store and transport - copy settings across */
if (service->type == CAMEL_PROVIDER_STORE
&& service->provider
&& CAMEL_PROVIDER_IS_STORE_AND_TRANSPORT(service->provider))
- e_account_set_string (service->emae->account, E_ACCOUNT_TRANSPORT_URL, uri);
+ e_account_set_string (account, E_ACCOUNT_TRANSPORT_URL, uri);
g_free (uri);
}
@@ -1279,10 +1550,13 @@ emae_ssl_changed (GtkComboBox *dropdown, EMAccountEditorService *service)
static void
emae_service_provider_changed (EMAccountEditorService *service)
{
+ EAccount *account;
gint i, j;
void (*show)(GtkWidget *);
CamelURL *url = emae_account_url (service->emae, emae_service_info[service->type].account_uri_key);
+ account = em_account_editor_get_modified_account (service->emae);
+
if (service->provider) {
gint enable;
GtkWidget *dwidget = NULL;
@@ -1294,14 +1568,14 @@ emae_service_provider_changed (EMAccountEditorService *service)
else
gtk_widget_show (service->frame);
- enable = e_account_writable_option (service->emae->account, service->provider->protocol, "auth");
+ enable = e_account_writable_option (account, service->provider->protocol, "auth");
gtk_widget_set_sensitive ((GtkWidget *)service->authtype, enable);
gtk_widget_set_sensitive ((GtkWidget *)service->check_supported, enable);
- enable = e_account_writable_option (service->emae->account, service->provider->protocol, "use_ssl");
+ enable = e_account_writable_option (account, service->provider->protocol, "use_ssl");
gtk_widget_set_sensitive ((GtkWidget *)service->use_ssl, enable);
- enable = e_account_writable (service->emae->account, emae_service_info[service->type].save_passwd_key);
+ enable = e_account_writable (account, emae_service_info[service->type].save_passwd_key);
gtk_widget_set_sensitive ((GtkWidget *)service->remember, enable);
for (i=0;emae_service_info[service->type].host_info[i].flag;i++) {
@@ -1411,7 +1685,7 @@ emae_provider_changed (GtkComboBox *dropdown, EMAccountEditorService *service)
static void
emae_refresh_providers (EMAccountEditor *emae, EMAccountEditorService *service)
{
- EAccount *account = emae->account;
+ EAccount *account;
GtkListStore *store;
GtkTreeIter iter;
GList *l;
@@ -1419,11 +1693,14 @@ emae_refresh_providers (EMAccountEditor *emae, EMAccountEditorService *service)
GtkComboBox *dropdown;
gint active = 0, i;
struct _service_info *info = &emae_service_info[service->type];
- const gchar *uri = e_account_get_string (account, info->account_uri_key);
- const gchar *tmp;
+ const gchar *uri;
gchar *current = NULL;
+ const gchar *tmp;
CamelURL *url;
+ account = em_account_editor_get_modified_account (emae);
+ uri = e_account_get_string (account, info->account_uri_key);
+
dropdown = service->providers;
gtk_widget_show ((GtkWidget *)dropdown);
@@ -1438,7 +1715,7 @@ emae_refresh_providers (EMAccountEditor *emae, EMAccountEditorService *service)
current[len] = 0;
}
} else {
- current = (gchar *)"imap";
+ current = (gchar *) "imap";
}
store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_POINTER);
@@ -1512,6 +1789,7 @@ emae_refresh_providers (EMAccountEditor *emae, EMAccountEditorService *service)
static void
emae_authtype_changed (GtkComboBox *dropdown, EMAccountEditorService *service)
{
+ EAccount *account;
gint id = gtk_combo_box_get_active (dropdown);
GtkTreeModel *model;
GtkTreeIter iter;
@@ -1521,6 +1799,8 @@ emae_authtype_changed (GtkComboBox *dropdown, EMAccountEditorService *service)
if (id == -1)
return;
+ account = em_account_editor_get_modified_account (service->emae);
+
url = emae_account_url (service->emae, emae_service_info[service->type].account_uri_key);
model = gtk_combo_box_get_model (dropdown);
if (gtk_tree_model_iter_nth_child (model, &iter, NULL, id)) {
@@ -1535,7 +1815,7 @@ emae_authtype_changed (GtkComboBox *dropdown, EMAccountEditorService *service)
gtk_widget_set_sensitive ((GtkWidget *)service->remember,
authtype
- ?(authtype->need_password && e_account_writable (service->emae->account, emae_service_info[service->type].save_passwd_key))
+ ?(authtype->need_password && e_account_writable (account, emae_service_info[service->type].save_passwd_key))
:FALSE);
}
@@ -1562,17 +1842,20 @@ static void emae_check_authtype (GtkWidget *w, EMAccountEditorService *service);
static void
emae_refresh_authtype (EMAccountEditor *emae, EMAccountEditorService *service)
{
- EAccount *account = emae->account;
+ EAccount *account;
GtkListStore *store;
GtkTreeIter iter;
GtkComboBox *dropdown;
gint active = 0;
gint i;
struct _service_info *info = &emae_service_info[service->type];
- const gchar *uri = e_account_get_string (account, info->account_uri_key);
+ const gchar *uri;
GList *l, *ll;
CamelURL *url = NULL;
+ account = em_account_editor_get_modified_account (emae);
+ uri = e_account_get_string (account, info->account_uri_key);
+
dropdown = service->authtype;
gtk_widget_show ((GtkWidget *)dropdown);
@@ -1656,10 +1939,13 @@ static void emae_check_authtype_response (GtkWidget *d, gint button, EMAccountEd
static void emae_check_authtype (GtkWidget *w, EMAccountEditorService *service)
{
EMAccountEditor *emae = service->emae;
+ EAccount *account;
const gchar *uri;
+ account = em_account_editor_get_modified_account (emae);
+
/* TODO: do we need to remove the auth mechanism from the uri? */
- uri = e_account_get_string (emae->account, emae_service_info[service->type].account_uri_key);
+ uri = e_account_get_string (account, emae_service_info[service->type].account_uri_key);
g_object_ref (emae);
service->check_dialog = e_error_new (emae->editor ? (GtkWindow *)gtk_widget_get_toplevel (emae->editor) : NULL,
@@ -1674,12 +1960,16 @@ static void emae_check_authtype (GtkWidget *w, EMAccountEditorService *service)
static void
emae_setup_service (EMAccountEditor *emae, EMAccountEditorService *service, GladeXML *xml)
{
+ EAccount *account;
struct _service_info *info = &emae_service_info[service->type];
CamelURL *url = emae_account_url (emae, info->account_uri_key);
- const gchar *uri = e_account_get_string (emae->account, info->account_uri_key);
+ const gchar *uri;
const gchar *tmp;
gint i;
+ account = em_account_editor_get_modified_account (emae);
+ uri = e_account_get_string (account, info->account_uri_key);
+
service->provider = uri?camel_provider_get (uri, NULL):NULL;
service->frame = glade_xml_get_widget (xml, info->frame);
service->container = glade_xml_get_widget (xml, info->container);
@@ -1768,7 +2058,7 @@ emae_setup_service (EMAccountEditor *emae, EMAccountEditorService *service, Glad
service->needs_auth = NULL;
}
- if (!e_account_writable (emae->account, info->account_uri_key))
+ if (!e_account_writable (account, info->account_uri_key))
gtk_widget_set_sensitive (service->container, FALSE);
else
gtk_widget_set_sensitive (service->container, TRUE);
@@ -1778,6 +2068,60 @@ emae_setup_service (EMAccountEditor *emae, EMAccountEditorService *service, Glad
camel_url_free (url);
}
+static GtkWidget *
+emae_create_basic_assistant_page (GtkAssistant *assistant, const gchar *page_id)
+{
+ const gchar *title = NULL, *label = NULL;
+ GtkAssistantPageType page_type = GTK_ASSISTANT_PAGE_CONTENT;
+ GtkWidget *vbox, *lbl;
+ gboolean fill_space = FALSE;
+
+ g_return_val_if_fail (page_id != NULL, NULL);
+
+ if (g_ascii_strcasecmp (page_id, "start_page") == 0) {
+ page_type = GTK_ASSISTANT_PAGE_INTRO;
+ fill_space = TRUE;
+ title = _("Mail Configuration");
+ label = _("Welcome to the Evolution Mail Configuration Assistant.\n\nClick \"Forward\" to begin.");
+ } else if (g_ascii_strcasecmp (page_id, "identity_page") == 0) {
+ title = _("Identity");
+ label = _("Please enter your name and email address below. The \"optional\" fields below do not need to be filled in, unless you wish to include this information in email you send.");
+ } else if (g_ascii_strcasecmp (page_id, "source_page") == 0) {
+ title = _("Receiving Email");
+ label = _("Please configure the following account settings.");
+ } else if (g_ascii_strcasecmp (page_id, "transport_page") == 0) {
+ title = _("Sending Email");
+ label = _("Please enter information about the way you will send mail. If you are not sure, ask your system administrator or Internet Service Provider.");
+ } else if (g_ascii_strcasecmp (page_id, "management_page") == 0) {
+ title = _("Account Management");
+ label = _("Please enter a descriptive name for this account in the space below.\nThis name will be used for display purposes only.");
+ } else if (g_ascii_strcasecmp (page_id, "finish_page") == 0) {
+ page_type = GTK_ASSISTANT_PAGE_CONFIRM;
+ fill_space = TRUE;
+ title = _("Done");
+ label = _("Congratulations, your mail configuration is complete.\n\nYou are now ready to send and receive email using Evolution.\n\nClick \"Apply\" to save your settings.");
+ } else {
+ g_return_val_if_reached (NULL);
+ }
+
+ vbox = gtk_vbox_new (FALSE, 12);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
+
+ lbl = gtk_label_new (label);
+ gtk_misc_set_alignment (GTK_MISC (lbl), 0.0, 0.5);
+ gtk_label_set_line_wrap (GTK_LABEL (lbl), TRUE);
+
+ gtk_box_pack_start (GTK_BOX (vbox), lbl, fill_space, fill_space, 0);
+
+ gtk_widget_show_all (vbox);
+
+ gtk_assistant_append_page (assistant, vbox);
+ gtk_assistant_set_page_title (assistant, vbox, title);
+ gtk_assistant_set_page_type (assistant, vbox, page_type);
+
+ return vbox;
+}
+
/* do not re-order these, the order is used by various code to look up emae->priv->identity_entries[] */
static struct {
const gchar *name;
@@ -1816,7 +2160,7 @@ emae_identity_page (EConfig *ec, EConfigItem *item, GtkWidget *parent, GtkWidget
{
EMAccountEditor *emae = data;
EMAccountEditorPrivate *gui = emae->priv;
- EAccount *account = emae->account;
+ EAccount *account;
gint i;
GtkWidget *w;
GladeXML *xml;
@@ -1825,22 +2169,24 @@ emae_identity_page (EConfig *ec, EConfigItem *item, GtkWidget *parent, GtkWidget
/*if (old)
return old;*/
+ account = em_account_editor_get_modified_account (emae);
+
gladefile = g_build_filename (EVOLUTION_GLADEDIR,
"mail-config.glade",
NULL);
xml = glade_xml_new (gladefile, item->label, NULL);
g_free (gladefile);
- /* Management & Identity fields, in the druid the management frame is relocated to the last page later on */
+ /* Management & Identity fields, in the assistant the management frame is relocated to the last page later on */
for (i=0;i<sizeof (emae_identity_entries)/sizeof (emae_identity_entries[0]);i++)
gui->identity_entries[i] = emae_account_entry (emae, emae_identity_entries[i].name, emae_identity_entries[i].item, xml);
gui->management_frame = glade_xml_get_widget (xml, "management_frame");
gui->default_account = GTK_TOGGLE_BUTTON (glade_xml_get_widget (xml, "management_default"));
- if (!mail_config_get_default_account ()
- || (account == mail_config_get_default_account ())
- || (GPOINTER_TO_INT(g_object_get_data (G_OBJECT (emae->account), "default_flagged"))) )
+ if (!e_get_default_account ()
+ || (account == e_get_default_account ())
+ || (GPOINTER_TO_INT(g_object_get_data (G_OBJECT (account), "default_flagged"))) )
gtk_toggle_button_set_active (gui->default_account, TRUE);
if (emae->do_signature) {
@@ -1857,22 +2203,12 @@ emae_identity_page (EConfig *ec, EConfigItem *item, GtkWidget *parent, GtkWidget
w = glade_xml_get_widget (xml, item->label);
if (emae->type == EMAE_PAGES) {
gtk_box_pack_start ((GtkBox *)emae->pages[0], w, TRUE, TRUE, 0);
- } else if (((EConfig *)gui->config)->type == E_CONFIG_DRUID) {
- GladeXML *druidxml;
- GtkWidget *page;
+ } else if (((EConfig *)gui->config)->type == E_CONFIG_ASSISTANT) {
+ GtkWidget *page = emae_create_basic_assistant_page (GTK_ASSISTANT (parent), "identity_page");
- gladefile = g_build_filename (EVOLUTION_GLADEDIR,
- "mail-config.glade",
- NULL);
- druidxml = glade_xml_new (gladefile, "identity_page", NULL);
- g_free (gladefile);
+ gtk_box_pack_start (GTK_BOX (page), w, TRUE, TRUE, 0);
- page = glade_xml_get_widget (druidxml, "identity_page");
-
- gtk_box_pack_start ((GtkBox*)((GnomeDruidPageStandard *)page)->vbox, w, TRUE, TRUE, 0);
w = page;
- g_object_unref (druidxml);
- gnome_druid_append_page ((GnomeDruid *)parent, (GnomeDruidPage *)page);
} else {
gtk_notebook_append_page ((GtkNotebook *)parent, w, gtk_label_new (_("Identity")));
}
@@ -1908,22 +2244,12 @@ emae_receive_page (EConfig *ec, EConfigItem *item, GtkWidget *parent, GtkWidget
w = glade_xml_get_widget (xml, item->label);
if (emae->type == EMAE_PAGES) {
gtk_box_pack_start ((GtkBox *)emae->pages[1], w, TRUE, TRUE, 0);
- } else if (((EConfig *)gui->config)->type == E_CONFIG_DRUID) {
- GladeXML *druidxml;
- GtkWidget *page;
-
- gladefile = g_build_filename (EVOLUTION_GLADEDIR,
- "mail-config.glade",
- NULL);
- druidxml = glade_xml_new (gladefile, "source_page", NULL);
- g_free (gladefile);
+ } else if (((EConfig *)gui->config)->type == E_CONFIG_ASSISTANT) {
+ GtkWidget *page = emae_create_basic_assistant_page (GTK_ASSISTANT (parent), "source_page");
- page = glade_xml_get_widget (druidxml, "source_page");
+ gtk_box_pack_start (GTK_BOX (page), w, TRUE, TRUE, 0);
- gtk_box_pack_start ((GtkBox*)((GnomeDruidPageStandard *)page)->vbox, w, TRUE, TRUE, 0);
w = page;
- g_object_unref (druidxml);
- gnome_druid_append_page ((GnomeDruid *)parent, (GnomeDruidPage *)page);
} else {
gtk_notebook_append_page ((GtkNotebook *)parent, w, gtk_label_new (_("Receiving Email")));
}
@@ -2378,22 +2704,12 @@ emae_send_page (EConfig *ec, EConfigItem *item, GtkWidget *parent, GtkWidget *ol
w = glade_xml_get_widget (xml, item->label);
if (emae->type == EMAE_PAGES) {
gtk_box_pack_start ((GtkBox *)emae->pages[2], w, TRUE, TRUE, 0);
- } else if (((EConfig *)gui->config)->type == E_CONFIG_DRUID) {
- GladeXML *druidxml;
- GtkWidget *page;
-
- gladefile = g_build_filename (EVOLUTION_GLADEDIR,
- "mail-config.glade",
- NULL);
- druidxml = glade_xml_new (gladefile, "transport_page", NULL);
- g_free (gladefile);
+ } else if (((EConfig *)gui->config)->type == E_CONFIG_ASSISTANT) {
+ GtkWidget *page = emae_create_basic_assistant_page (GTK_ASSISTANT (parent), "transport_page");
- page = glade_xml_get_widget (druidxml, "transport_page");
+ gtk_box_pack_start (GTK_BOX (page), w, TRUE, TRUE, 0);
- gtk_box_pack_start ((GtkBox*)((GnomeDruidPageStandard *)page)->vbox, w, TRUE, TRUE, 0);
w = page;
- g_object_unref (druidxml);
- gnome_druid_append_page ((GnomeDruid *)parent, (GnomeDruidPage *)page);
} else {
gtk_notebook_append_page ((GtkNotebook *)parent, w, gtk_label_new (_("Sending Email")));
}
@@ -2410,6 +2726,7 @@ emae_defaults_page (EConfig *ec, EConfigItem *item, GtkWidget *parent, GtkWidget
{
EMAccountEditor *emae = data;
EMAccountEditorPrivate *gui = emae->priv;
+ EAccount *account;
GtkWidget *w;
GladeXML *xml;
gchar *gladefile;
@@ -2417,6 +2734,8 @@ emae_defaults_page (EConfig *ec, EConfigItem *item, GtkWidget *parent, GtkWidget
/*if (old)
return old;*/
+ account = em_account_editor_get_modified_account (emae);
+
gladefile = g_build_filename (EVOLUTION_GLADEDIR,
"mail-config.glade",
NULL);
@@ -2424,8 +2743,8 @@ emae_defaults_page (EConfig *ec, EConfigItem *item, GtkWidget *parent, GtkWidget
g_free (gladefile);
/* Special folders */
- gui->drafts_folder_button = (GtkButton *)emae_account_folder (emae, "drafts_button", E_ACCOUNT_DRAFTS_FOLDER_URI, MAIL_COMPONENT_FOLDER_DRAFTS, xml);
- gui->sent_folder_button = (GtkButton *)emae_account_folder (emae, "sent_button", E_ACCOUNT_SENT_FOLDER_URI, MAIL_COMPONENT_FOLDER_SENT, xml);
+ gui->drafts_folder_button = (GtkButton *)emae_account_folder (emae, "drafts_button", E_ACCOUNT_DRAFTS_FOLDER_URI, E_MAIL_FOLDER_DRAFTS, xml);
+ gui->sent_folder_button = (GtkButton *)emae_account_folder (emae, "sent_button", E_ACCOUNT_SENT_FOLDER_URI, E_MAIL_FOLDER_SENT, xml);
/* Special Folders "Reset Defaults" button */
gui->restore_folders_button = (GtkButton *)glade_xml_get_widget (xml, "default_folders_button");
@@ -2437,18 +2756,18 @@ emae_defaults_page (EConfig *ec, EConfigItem *item, GtkWidget *parent, GtkWidget
emae_account_toggle (emae, "always_bcc", E_ACCOUNT_BCC_ALWAYS, xml);
emae_account_entry (emae, "bcc_addrs", E_ACCOUNT_BCC_ADDRS, xml);
- gtk_widget_set_sensitive ((GtkWidget *)gui->drafts_folder_button, e_account_writable (emae->account, E_ACCOUNT_DRAFTS_FOLDER_URI));
+ gtk_widget_set_sensitive ((GtkWidget *)gui->drafts_folder_button, e_account_writable (account, E_ACCOUNT_DRAFTS_FOLDER_URI));
gtk_widget_set_sensitive ( (GtkWidget *)gui->sent_folder_button,
- e_account_writable (emae->account, E_ACCOUNT_SENT_FOLDER_URI)
+ e_account_writable (account, E_ACCOUNT_SENT_FOLDER_URI)
&&
(emae->priv->source.provider ? !(emae->priv->source.provider->flags & CAMEL_PROVIDER_DISABLE_SENT_FOLDER): TRUE)
);
gtk_widget_set_sensitive ((GtkWidget *)gui->restore_folders_button,
- (e_account_writable (emae->account, E_ACCOUNT_SENT_FOLDER_URI)
+ (e_account_writable (account, E_ACCOUNT_SENT_FOLDER_URI)
&& ((emae->priv->source.provider && !( emae->priv->source.provider->flags & CAMEL_PROVIDER_DISABLE_SENT_FOLDER))
- || e_account_writable (emae->account, E_ACCOUNT_DRAFTS_FOLDER_URI))));
+ || e_account_writable (account, E_ACCOUNT_DRAFTS_FOLDER_URI))));
/* Receipt policy */
emae_setup_receipt_policy (emae, xml);
@@ -2586,59 +2905,32 @@ emae_management_page (EConfig *ec, EConfigItem *item, GtkWidget *parent, GtkWidg
GtkWidget *w;
w = gui->management_frame;
- if (((EConfig *)gui->config)->type == E_CONFIG_DRUID) {
- GladeXML *druidxml;
- GtkWidget *page;
- gchar *gladefile;
-
- gladefile = g_build_filename (EVOLUTION_GLADEDIR,
- "mail-config.glade",
- NULL);
- druidxml = glade_xml_new (gladefile, "management_page", NULL);
- g_free (gladefile);
+ if (((EConfig *)gui->config)->type == E_CONFIG_ASSISTANT) {
+ GtkWidget *page = emae_create_basic_assistant_page (GTK_ASSISTANT (parent), "management_page");
- page = glade_xml_get_widget (druidxml, "management_page");
+ gtk_widget_reparent (w, page);
- gtk_widget_reparent (w, ((GnomeDruidPageStandard *)page)->vbox);
w = page;
- g_object_unref (druidxml);
- gnome_druid_append_page ((GnomeDruid *)parent, (GnomeDruidPage *)page);
}
return w;
}
static GtkWidget *
-emae_widget_druid_glade (EConfig *ec, EConfigItem *item, GtkWidget *parent, GtkWidget *old, gpointer data)
+emae_widget_assistant_page (EConfig *ec, EConfigItem *item, GtkWidget *parent, GtkWidget *old, gpointer data)
{
- GladeXML *druidxml;
- GtkWidget *w;
- gchar *gladefile;
EMAccountEditor *emae = (EMAccountEditor *)data;
if (emae->type == EMAE_PAGES)
return NULL;
- gladefile = g_build_filename (EVOLUTION_GLADEDIR,
- "mail-config.glade",
- NULL);
- druidxml = glade_xml_new (gladefile, item->label, NULL);
- g_free (gladefile);
-
- w = glade_xml_get_widget (druidxml, item->label);
- /* i think the glade file has issues, we need to show all on at least the end page */
- gtk_widget_show_all (w);
- g_object_unref (druidxml);
-
- gnome_druid_append_page ((GnomeDruid *)parent, (GnomeDruidPage *)w);
-
- return w;
+ return emae_create_basic_assistant_page (GTK_ASSISTANT (parent), item->label);
}
-/* plugin meta-data for "org.gnome.evolution.mail.config.accountDruid" */
-static EMConfigItem emae_druid_items[] = {
- { E_CONFIG_DRUID, (gchar *) "" },
- { E_CONFIG_PAGE_START, (gchar *) "0.start", (gchar *) "start_page", emae_widget_druid_glade },
+/* plugin meta-data for "org.gnome.evolution.mail.config.accountAssistant" */
+static EMConfigItem emae_assistant_items[] = {
+ { E_CONFIG_ASSISTANT, (gchar *) "" },
+ { E_CONFIG_PAGE_START, (gchar *) "0.start", (gchar *) "start_page", emae_widget_assistant_page },
{ E_CONFIG_PAGE, (gchar *) "00.identity", (gchar *) "vboxIdentityBorder", emae_identity_page },
{ E_CONFIG_SECTION, (gchar *) "00.identity/00.name", (gchar *) "account_vbox", emae_widget_glade },
@@ -2664,10 +2956,10 @@ static EMConfigItem emae_druid_items[] = {
{ E_CONFIG_PAGE, (gchar *) "40.management", (gchar *) "management_frame", emae_management_page },
- { E_CONFIG_PAGE_FINISH, (gchar *) "999.end", (gchar *) "finish_page", emae_widget_druid_glade },
+ { E_CONFIG_PAGE_FINISH, (gchar *) "999.end", (gchar *) "finish_page", emae_widget_assistant_page },
{ 0 },
};
-static gboolean emae_druid_items_translated = FALSE;
+static gboolean emae_assistant_items_translated = FALSE;
static void
emae_free (EConfig *ec, GSList *items, gpointer data)
@@ -2696,6 +2988,7 @@ emae_free_auto (EConfig *ec, GSList *items, gpointer data)
static gboolean
emae_service_complete (EMAccountEditor *emae, EMAccountEditorService *service)
{
+ EAccount *account;
CamelURL *url;
gint ok = TRUE;
const gchar *uri;
@@ -2703,7 +2996,9 @@ emae_service_complete (EMAccountEditor *emae, EMAccountEditorService *service)
if (service->provider == NULL)
return TRUE;
- uri = e_account_get_string (emae->account, emae_service_info[service->type].account_uri_key);
+ account = em_account_editor_get_modified_account (emae);
+
+ uri = e_account_get_string (account, emae_service_info[service->type].account_uri_key);
if (uri == NULL || (url = camel_url_new (uri, NULL)) == NULL)
return FALSE;
@@ -2765,16 +3060,22 @@ static gboolean
emae_check_complete (EConfig *ec, const gchar *pageid, gpointer data)
{
EMAccountEditor *emae = data;
+ EAccount *account;
+ EAccount *original_account;
gint ok = TRUE;
const gchar *tmp;
EAccount *ea;
gboolean refresh = FALSE;
- gboolean edit = emae->original != NULL;
+ gboolean new_account;
+
+ account = em_account_editor_get_modified_account (emae);
+ original_account = em_account_editor_get_original_account (emae);
+ new_account = (original_account == NULL);
/* We use the page-check of various pages to 'prepare' or
- pre-load their values, only in the druid */
+ pre-load their values, only in the assistant */
if (pageid
- && ((EConfig *)emae->priv->config)->type == E_CONFIG_DRUID) {
+ && ((EConfig *)emae->priv->config)->type == E_CONFIG_ASSISTANT) {
if (!strcmp (pageid, "00.identity")) {
if (!emae->priv->identity_set) {
gchar *uname;
@@ -2794,12 +3095,12 @@ emae_check_complete (EConfig *ec, const gchar *pageid, gpointer data)
if (!emae->priv->receive_set) {
gchar *user, *at;
gint index;
- gchar *uri = g_strdup (e_account_get_string (emae->account, E_ACCOUNT_SOURCE_URL));
+ gchar *uri = g_strdup (e_account_get_string (account, E_ACCOUNT_SOURCE_URL));
CamelURL *url;
emae->priv->receive_set = 1;
- tmp = (gchar *)e_account_get_string (emae->account, E_ACCOUNT_ID_ADDRESS);
- at = strrchr (tmp, '@');
+ tmp = (gchar *)e_account_get_string (account, E_ACCOUNT_ID_ADDRESS);
+ at = strchr (tmp, '@');
user = g_alloca (at-tmp+1);
memcpy (user, tmp, at-tmp);
user[at-tmp] = 0;
@@ -2808,7 +3109,7 @@ emae_check_complete (EConfig *ec, const gchar *pageid, gpointer data)
index = check_servers (at);
gtk_entry_set_text (emae->priv->source.username, user);
gtk_entry_set_text (emae->priv->transport.username, user);
- if (!edit && uri && (url = camel_url_new (uri, NULL)) != NULL) {
+ if (new_account && uri && (url = camel_url_new (uri, NULL)) != NULL) {
refresh = TRUE;
camel_url_set_user (url, user);
if (index != -1) {
@@ -2817,20 +3118,16 @@ emae_check_complete (EConfig *ec, const gchar *pageid, gpointer data)
camel_url_set_host (url, mail_servers[index].recv);
gtk_entry_set_text (emae->priv->source.hostname, mail_servers[index].recv);
gtk_entry_set_text (emae->priv->transport.hostname, mail_servers[index].send);
- camel_url_set_host (url, mail_servers[index].recv);
-
} else {
camel_url_set_host (url, "");
}
- camel_url_set_user (url, user);
g_free (uri);
uri = camel_url_to_string (url, 0);
- e_account_set_string (emae->account, E_ACCOUNT_SOURCE_URL, uri);
- g_free (uri);
+ e_account_set_string (account, E_ACCOUNT_SOURCE_URL, uri);
+
camel_url_free (url);
- } else {
- g_free (uri);
}
+ g_free (uri);
}
} else if (!strcmp (pageid, "30.send")) {
@@ -2838,29 +3135,30 @@ emae_check_complete (EConfig *ec, const gchar *pageid, gpointer data)
CamelURL *url;
gchar *at, *user;
gint index;
- gchar *uri = (gchar *)e_account_get_string (emae->account, E_ACCOUNT_TRANSPORT_URL);
+ gchar *uri = (gchar *)e_account_get_string (account, E_ACCOUNT_TRANSPORT_URL);
+
emae->priv->send_set = 1;
- tmp = e_account_get_string (emae->account, E_ACCOUNT_ID_ADDRESS);
- at = strrchr (tmp, '@');
+ tmp = e_account_get_string (account, E_ACCOUNT_ID_ADDRESS);
+ at = strchr (tmp, '@');
user = g_alloca (at-tmp+1);
memcpy (user, tmp, at-tmp);
user[at-tmp] = 0;
at++;
index = check_servers (at);
- if (index != -1 && uri && (url = camel_url_new (uri, NULL)) != NULL) {
+ if (index != -1 && uri && (url = camel_url_new (uri, NULL)) != NULL) {
refresh = TRUE;
camel_url_set_protocol (url, "smtp");
camel_url_set_param (url, "use_ssl", mail_servers[index].ssl);
camel_url_set_host (url, mail_servers[index].send);
camel_url_set_user (url, user);
uri = camel_url_to_string (url, 0);
- e_account_set_string (emae->account, E_ACCOUNT_TRANSPORT_URL, uri);
+ e_account_set_string (account, E_ACCOUNT_TRANSPORT_URL, uri);
g_free (uri);
camel_url_free (url);
}
-
}
+
} else if (!strcmp (pageid, "20.receive_options")) {
if (emae->priv->source.provider
&& emae->priv->extra_provider != emae->priv->source.provider) {
@@ -2873,11 +3171,11 @@ emae_check_complete (EConfig *ec, const gchar *pageid, gpointer data)
guint i = 0, len;
emae->priv->management_set = 1;
- tmp = e_account_get_string (emae->account, E_ACCOUNT_ID_ADDRESS);
+ tmp = e_account_get_string (account, E_ACCOUNT_ID_ADDRESS);
len = strlen (tmp);
template = alloca (len + 14);
strcpy (template, tmp);
- while (mail_config_get_account_by_name (template))
+ while (e_get_account_by_name (template))
sprintf (template + len, " (%d)", i++);
gtk_entry_set_text (emae->priv->identity_entries[0], template);
@@ -2891,15 +3189,15 @@ emae_check_complete (EConfig *ec, const gchar *pageid, gpointer data)
editing multiple accounts at a time
*/
if (gtk_toggle_button_get_active (emae->priv->default_account))
- g_object_set_data (G_OBJECT (emae->account), "default_flagged", GINT_TO_POINTER(1));
+ g_object_set_data (G_OBJECT (account), "default_flagged", GINT_TO_POINTER(1));
if (pageid == NULL || !strcmp (pageid, "00.identity")) {
/* TODO: check the account name is set, and unique in the account list */
- ok = (tmp = e_account_get_string (emae->account, E_ACCOUNT_ID_NAME))
+ ok = (tmp = e_account_get_string (account, E_ACCOUNT_ID_NAME))
&& tmp[0]
- && (tmp = e_account_get_string (emae->account, E_ACCOUNT_ID_ADDRESS))
+ && (tmp = e_account_get_string (account, E_ACCOUNT_ID_ADDRESS))
&& is_email (tmp)
- && ((tmp = e_account_get_string (emae->account, E_ACCOUNT_ID_REPLY_TO)) == NULL
+ && ((tmp = e_account_get_string (account, E_ACCOUNT_ID_REPLY_TO)) == NULL
|| tmp[0] == 0
|| is_email (tmp));
if (!ok) {
@@ -2928,10 +3226,10 @@ emae_check_complete (EConfig *ec, const gchar *pageid, gpointer data)
}
if (ok && (pageid == NULL || !strcmp (pageid, "40.management"))) {
- ok = (tmp = e_account_get_string (emae->account, E_ACCOUNT_NAME))
+ ok = (tmp = e_account_get_string (account, E_ACCOUNT_NAME))
&& tmp[0]
- && ((ea = mail_config_get_account_by_name (tmp)) == NULL
- || ea == emae->original);
+ && ((ea = e_get_account_by_name (tmp)) == NULL
+ || ea == original_account);
if (!ok) {
d (printf ("management page incomplete\n"));
}
@@ -2950,40 +3248,44 @@ em_account_editor_check (EMAccountEditor *emae, const gchar *page)
static void
add_new_store (gchar *uri, CamelStore *store, gpointer user_data)
{
- MailComponent *component = mail_component_peek ();
EAccount *account = user_data;
if (store == NULL)
return;
- mail_component_add_store (component, store, account->name);
+ e_mail_store_add (store, account->name);
}
static void
emae_commit (EConfig *ec, GSList *items, gpointer data)
{
EMAccountEditor *emae = data;
- EAccountList *accounts = mail_config_get_accounts ();
+ EAccountList *accounts = e_get_account_list ();
EAccount *account;
+ EAccount *modified_account;
+ EAccount *original_account;
/* the mail-config*acconts* api needs a lot of work */
- if (emae->original) {
- d (printf ("Committing account '%s'\n", e_account_get_string (emae->account, E_ACCOUNT_NAME)));
- e_account_import (emae->original, emae->account);
- account = emae->original;
+ modified_account = em_account_editor_get_modified_account (emae);
+ original_account = em_account_editor_get_original_account (emae);
+
+ if (original_account != NULL) {
+ d (printf ("Committing account '%s'\n", e_account_get_string (modified_account, E_ACCOUNT_NAME)));
+ e_account_import (original_account, modified_account);
+ account = original_account;
e_account_list_change (accounts, account);
} else {
- d (printf ("Adding new account '%s'\n", e_account_get_string (emae->account, E_ACCOUNT_NAME)));
- e_account_list_add (accounts, emae->account);
- account = emae->account;
+ d (printf ("Adding new account '%s'\n", e_account_get_string (account, E_ACCOUNT_NAME)));
+ e_account_list_add (accounts, modified_account);
+ account = modified_account;
/* HACK: this will add the account to the folder tree.
We should just be listening to the account list directly for changed events */
if (account->enabled
&& emae->priv->source.provider
&& (emae->priv->source.provider->flags & CAMEL_PROVIDER_IS_STORAGE))
- mail_get_store (e_account_get_string (emae->account, E_ACCOUNT_SOURCE_URL), NULL, add_new_store, account);
+ mail_get_store (e_account_get_string (modified_account, E_ACCOUNT_SOURCE_URL), NULL, add_new_store, account);
}
if (gtk_toggle_button_get_active (emae->priv->default_account))
@@ -3006,9 +3308,10 @@ emae_editor_destroyed (GtkWidget *dialog, EMAccountEditor *emae)
}
static void
-em_account_editor_construct (EMAccountEditor *emae, EAccount *account, em_account_editor_t type, const gchar *id)
+em_account_editor_construct (EMAccountEditor *emae, EMAccountEditorType type, const gchar *id)
{
EMAccountEditorPrivate *gui = emae->priv;
+ EAccount *account;
gint i, index;
GSList *l;
GList *prov;
@@ -3018,26 +3321,6 @@ em_account_editor_construct (EMAccountEditor *emae, EAccount *account, em_accoun
EConfigItem *items;
emae->type = type;
- emae->original = account;
- if (emae->original) {
- gchar *xml;
-
- g_object_ref (emae->original);
- xml = e_account_to_xml (emae->original);
- emae->account = e_account_new_from_xml (xml);
- g_free (xml);
-
- if (type != EMAE_PAGES)
- emae->do_signature = TRUE;
- } else {
- /* TODO: have a get_default_account thing?? */
- emae->account = e_account_new ();
- emae->account->enabled = TRUE;
- e_account_set_string (emae->account, E_ACCOUNT_DRAFTS_FOLDER_URI,
- mail_component_get_folder_uri (NULL, MAIL_COMPONENT_FOLDER_DRAFTS));
- e_account_set_string (emae->account, E_ACCOUNT_SENT_FOLDER_URI,
- mail_component_get_folder_uri (NULL, MAIL_COMPONENT_FOLDER_SENT));
- }
/* sort the providers, remote first */
gui->providers = g_list_sort (camel_provider_list (TRUE), (GCompareFunc)provider_compare);
@@ -3053,14 +3336,14 @@ em_account_editor_construct (EMAccountEditor *emae, EAccount *account, em_accoun
emae_editor_items_translated = TRUE;
}
} else {
- ec = em_config_new (E_CONFIG_DRUID, id);
- items = emae_druid_items;
- if (!emae_druid_items_translated) {
+ ec = em_config_new (E_CONFIG_ASSISTANT, id);
+ items = emae_assistant_items;
+ if (!emae_assistant_items_translated) {
for (i=0;items[i].path;i++) {
if (items[i].label)
items[i].label = _(items[i].label);
}
- emae_druid_items_translated = TRUE;
+ emae_assistant_items_translated = TRUE;
}
}
@@ -3116,7 +3399,8 @@ em_account_editor_construct (EMAccountEditor *emae, EAccount *account, em_accoun
e_config_add_page_check ((EConfig *)ec, NULL, emae_check_complete, emae);
- target = em_config_target_new_account (ec, emae->account);
+ account = em_account_editor_get_modified_account (emae);
+ target = em_config_target_new_account (ec, account);
e_config_set_target ((EConfig *)ec, (EConfigTarget *)target);
if (type != EMAE_PAGES) {