[evolution/account-mgmt: 19/50] Adapt composer to the new ESource API.
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/account-mgmt: 19/50] Adapt composer to the new ESource API.
- Date: Fri, 23 Dec 2011 19:50:17 +0000 (UTC)
commit c6b1f3eb7c7838555c3246176e25cf0c389613b5
Author: Matthew Barnes <mbarnes redhat com>
Date: Wed Apr 13 10:31:31 2011 -0400
Adapt composer to the new ESource API.
composer/e-composer-from-header.c | 130 ++----
composer/e-composer-from-header.h | 24 +-
composer/e-composer-header-table.c | 916 +++++++++++++++++-------------------
composer/e-composer-header-table.h | 41 +--
composer/e-composer-header.c | 158 ++++---
composer/e-composer-header.h | 3 +
composer/e-composer-name-header.c | 6 +-
composer/e-composer-name-header.h | 3 +-
composer/e-composer-post-header.c | 115 +++---
composer/e-composer-post-header.h | 15 +-
composer/e-composer-private.c | 4 +-
composer/e-composer-private.h | 6 +-
composer/e-composer-text-header.c | 14 +-
composer/e-composer-text-header.h | 6 +-
composer/e-msg-composer.c | 319 ++++++++-----
composer/e-msg-composer.h | 3 +-
16 files changed, 899 insertions(+), 864 deletions(-)
---
diff --git a/composer/e-composer-from-header.c b/composer/e-composer-from-header.c
index 0b56971..aaed429 100644
--- a/composer/e-composer-from-header.c
+++ b/composer/e-composer-from-header.c
@@ -24,16 +24,7 @@
#include "e-composer-from-header.h"
-/* Convenience macro */
-#define E_COMPOSER_FROM_HEADER_GET_COMBO_BOX(header) \
- (E_ACCOUNT_COMBO_BOX (E_COMPOSER_HEADER (header)->input_widget))
-
-enum {
- REFRESHED,
- LAST_SIGNAL
-};
-
-static guint signal_ids[LAST_SIGNAL];
+#include <misc/e-mail-identity-combo-box.h>
G_DEFINE_TYPE (
EComposerFromHeader,
@@ -41,119 +32,80 @@ G_DEFINE_TYPE (
E_TYPE_COMPOSER_HEADER)
static void
-composer_from_header_changed_cb (EAccountComboBox *combo_box,
+composer_from_header_changed_cb (EMailIdentityComboBox *combo_box,
EComposerFromHeader *header)
{
g_signal_emit_by_name (header, "changed");
}
static void
-composer_from_header_refreshed_cb (EAccountComboBox *combo_box,
- EComposerFromHeader *header)
-{
- g_signal_emit (header, signal_ids[REFRESHED], 0);
-}
-
-static void
-e_composer_from_header_class_init (EComposerFromHeaderClass *class)
-{
- signal_ids[REFRESHED] = g_signal_new (
- "refreshed",
- G_TYPE_FROM_CLASS (class),
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-}
-
-static void
-e_composer_from_header_init (EComposerFromHeader *header)
+composer_from_header_constructed (GObject *object)
{
+ ESourceRegistry *registry;
+ EComposerHeader *header;
GtkWidget *widget;
- widget = g_object_ref_sink (e_account_combo_box_new ());
+ header = E_COMPOSER_HEADER (object);
+ registry = e_composer_header_get_registry (header);
+
+ widget = e_mail_identity_combo_box_new (registry);
g_signal_connect (
widget, "changed",
G_CALLBACK (composer_from_header_changed_cb), header);
- g_signal_connect (
- widget, "refreshed",
- G_CALLBACK (composer_from_header_refreshed_cb), header);
- E_COMPOSER_HEADER (header)->input_widget = widget;
-}
+ header->input_widget = g_object_ref_sink (widget);
-EComposerHeader *
-e_composer_from_header_new (const gchar *label)
-{
- return g_object_new (
- E_TYPE_COMPOSER_FROM_HEADER, "label", label,
- "button", FALSE, NULL);
+ /* Chain up to parent's constructed() method. */
+ G_OBJECT_CLASS (e_composer_from_header_parent_class)->
+ constructed (object);
}
-EAccountList *
-e_composer_from_header_get_account_list (EComposerFromHeader *header)
-{
- EAccountComboBox *combo_box;
-
- g_return_val_if_fail (E_IS_COMPOSER_FROM_HEADER (header), NULL);
-
- combo_box = E_COMPOSER_FROM_HEADER_GET_COMBO_BOX (header);
- return e_account_combo_box_get_account_list (combo_box);
-}
-
-void
-e_composer_from_header_set_account_list (EComposerFromHeader *header,
- EAccountList *account_list)
+static void
+e_composer_from_header_class_init (EComposerFromHeaderClass *class)
{
- EAccountComboBox *combo_box;
-
- g_return_if_fail (E_IS_COMPOSER_FROM_HEADER (header));
+ GObjectClass *object_class;
- combo_box = E_COMPOSER_FROM_HEADER_GET_COMBO_BOX (header);
- e_account_combo_box_set_account_list (combo_box, account_list);
+ object_class = G_OBJECT_CLASS (class);
+ object_class->constructed = composer_from_header_constructed;
}
-EAccount *
-e_composer_from_header_get_active (EComposerFromHeader *header)
+static void
+e_composer_from_header_init (EComposerFromHeader *from_header)
{
- EAccountComboBox *combo_box;
-
- g_return_val_if_fail (E_IS_COMPOSER_FROM_HEADER (header), NULL);
-
- combo_box = E_COMPOSER_FROM_HEADER_GET_COMBO_BOX (header);
- return e_account_combo_box_get_active (combo_box);
}
-gboolean
-e_composer_from_header_set_active (EComposerFromHeader *header,
- EAccount *account)
+EComposerHeader *
+e_composer_from_header_new (ESourceRegistry *registry,
+ const gchar *label)
{
- EAccountComboBox *combo_box;
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
- g_return_val_if_fail (E_IS_COMPOSER_FROM_HEADER (header), FALSE);
-
- combo_box = E_COMPOSER_FROM_HEADER_GET_COMBO_BOX (header);
- return e_account_combo_box_set_active (combo_box, account);
+ return g_object_new (
+ E_TYPE_COMPOSER_FROM_HEADER,
+ "label", label, "button", FALSE,
+ "registry", registry, NULL);
}
const gchar *
-e_composer_from_header_get_active_name (EComposerFromHeader *header)
+e_composer_from_header_get_active_id (EComposerFromHeader *header)
{
- EAccountComboBox *combo_box;
+ GtkComboBox *combo_box;
g_return_val_if_fail (E_IS_COMPOSER_FROM_HEADER (header), NULL);
- combo_box = E_COMPOSER_FROM_HEADER_GET_COMBO_BOX (header);
- return e_account_combo_box_get_active_name (combo_box);
+ combo_box = GTK_COMBO_BOX (E_COMPOSER_HEADER (header)->input_widget);
+
+ return gtk_combo_box_get_active_id (combo_box);
}
-gboolean
-e_composer_from_header_set_active_name (EComposerFromHeader *header,
- const gchar *account_name)
+void
+e_composer_from_header_set_active_id (EComposerFromHeader *header,
+ const gchar *active_id)
{
- EAccountComboBox *combo_box;
+ GtkComboBox *combo_box;
+
+ g_return_if_fail (E_IS_COMPOSER_FROM_HEADER (header));
- g_return_val_if_fail (E_IS_COMPOSER_FROM_HEADER (header), FALSE);
+ combo_box = GTK_COMBO_BOX (E_COMPOSER_HEADER (header)->input_widget);
- combo_box = E_COMPOSER_FROM_HEADER_GET_COMBO_BOX (header);
- return e_account_combo_box_set_active_name (combo_box, account_name);
+ gtk_combo_box_set_active_id (combo_box, active_id);
}
diff --git a/composer/e-composer-from-header.h b/composer/e-composer-from-header.h
index 182a751..b4116e6 100644
--- a/composer/e-composer-from-header.h
+++ b/composer/e-composer-from-header.h
@@ -21,10 +21,6 @@
#ifndef E_COMPOSER_FROM_HEADER_H
#define E_COMPOSER_FROM_HEADER_H
-#include <libedataserver/e-account.h>
-#include <libedataserver/e-account-list.h>
-
-#include <misc/e-account-combo-box.h>
#include <composer/e-composer-header.h>
/* Standard GObject macros */
@@ -60,22 +56,14 @@ struct _EComposerFromHeaderClass {
};
GType e_composer_from_header_get_type (void);
-EComposerHeader * e_composer_from_header_new (const gchar *label);
-EAccountList * e_composer_from_header_get_account_list
- (EComposerFromHeader *header);
-void e_composer_from_header_set_account_list
- (EComposerFromHeader *header,
- EAccountList *account_list);
-EAccount * e_composer_from_header_get_active
- (EComposerFromHeader *header);
-gboolean e_composer_from_header_set_active
- (EComposerFromHeader *header,
- EAccount *account);
-const gchar * e_composer_from_header_get_active_name
+EComposerHeader *
+ e_composer_from_header_new (ESourceRegistry *registry,
+ const gchar *label);
+const gchar * e_composer_from_header_get_active_id
(EComposerFromHeader *header);
-gboolean e_composer_from_header_set_active_name
+void e_composer_from_header_set_active_id
(EComposerFromHeader *header,
- const gchar *account_name);
+ const gchar *active_id);
G_END_DECLS
diff --git a/composer/e-composer-header-table.c b/composer/e-composer-header-table.c
index d0955c4..3493ccd 100644
--- a/composer/e-composer-header-table.c
+++ b/composer/e-composer-header-table.c
@@ -23,9 +23,12 @@
#include <glib/gi18n-lib.h>
#include <libedataserverui/e-name-selector.h>
+#include <libedataserver/e-source-mail-account.h>
+#include <libedataserver/e-source-mail-composition.h>
+#include <libedataserver/e-source-mail-identity.h>
#include <shell/e-shell.h>
-#include <misc/e-signature-combo-box.h>
+#include <misc/e-mail-signature-combo-box.h>
#include "e-msg-composer.h"
#include "e-composer-private.h"
@@ -44,30 +47,34 @@
"carbon copy of the message without appearing " \
"in the recipient list of the message")
+#define E_COMPOSER_HEADER_TABLE_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE \
+ ((obj), E_TYPE_COMPOSER_HEADER_TABLE, EComposerHeaderTablePrivate))
+
+struct _EComposerHeaderTablePrivate {
+ EComposerHeader *headers[E_COMPOSER_NUM_HEADERS];
+ guint gconf_bindings[E_COMPOSER_NUM_HEADERS];
+ GtkWidget *signature_label;
+ GtkWidget *signature_combo_box;
+ ENameSelector *name_selector;
+ ESourceRegistry *registry;
+ EShell *shell;
+};
+
enum {
PROP_0,
- PROP_ACCOUNT,
- PROP_ACCOUNT_LIST,
- PROP_ACCOUNT_NAME,
PROP_DESTINATIONS_BCC,
PROP_DESTINATIONS_CC,
PROP_DESTINATIONS_TO,
+ PROP_IDENTITY_UID,
PROP_POST_TO,
+ PROP_REGISTRY,
PROP_REPLY_TO,
PROP_SHELL,
- PROP_SIGNATURE,
- PROP_SIGNATURE_LIST,
+ PROP_SIGNATURE_UID,
PROP_SUBJECT
};
-struct _EComposerHeaderTablePrivate {
- EComposerHeader *headers[E_COMPOSER_NUM_HEADERS];
- GtkWidget *signature_label;
- GtkWidget *signature_combo_box;
- ENameSelector *name_selector;
- EShell *shell;
-};
-
G_DEFINE_TYPE (
EComposerHeaderTable,
e_composer_header_table,
@@ -208,13 +215,13 @@ composer_header_table_bind_widget (const gchar *property_name,
static EDestination **
composer_header_table_update_destinations (EDestination **old_destinations,
- const gchar *auto_addresses)
+ const gchar * const *auto_addresses)
{
CamelAddress *address;
CamelInternetAddress *inet_address;
EDestination **new_destinations;
EDestination *destination;
- GList *list = NULL;
+ GQueue queue = G_QUEUE_INIT;
guint length;
gint ii;
@@ -226,25 +233,29 @@ composer_header_table_update_destinations (EDestination **old_destinations,
inet_address = camel_internet_address_new ();
address = CAMEL_ADDRESS (inet_address);
- if (camel_address_decode (address, auto_addresses) != -1) {
- for (ii = 0; ii < camel_address_length (address); ii++) {
- const gchar *name, *email;
+ /* XXX Calling camel_address_decode() multiple times on the same
+ * CamelInternetAddress has a cumulative effect, which isn't
+ * well documented. */
+ for (ii = 0; auto_addresses[ii] != NULL; ii++)
+ camel_address_decode (address, auto_addresses[ii]);
- if (!camel_internet_address_get (
- inet_address, ii, &name, &email))
- continue;
+ for (ii = 0; ii < camel_address_length (address); ii++) {
+ const gchar *name, *email;
- destination = e_destination_new ();
- e_destination_set_auto_recipient (destination, TRUE);
+ if (!camel_internet_address_get (
+ inet_address, ii, &name, &email))
+ continue;
- if (name != NULL)
- e_destination_set_name (destination, name);
+ destination = e_destination_new ();
+ e_destination_set_auto_recipient (destination, TRUE);
- if (email != NULL)
- e_destination_set_email (destination, email);
+ if (name != NULL)
+ e_destination_set_name (destination, name);
- list = g_list_prepend (list, destination);
- }
+ if (email != NULL)
+ e_destination_set_email (destination, email);
+
+ g_queue_push_tail (&queue, destination);
}
g_object_unref (inet_address);
@@ -261,20 +272,19 @@ skip_auto:
continue;
destination = e_destination_copy (old_destinations[ii]);
- list = g_list_prepend (list, destination);
+ g_queue_push_tail (&queue, destination);
}
skip_custom:
- list = g_list_reverse (list);
- length = g_list_length (list);
-
+ length = g_queue_get_length (&queue);
new_destinations = g_new0 (EDestination *, length + 1);
- for (ii = 0; list != NULL; ii++) {
- new_destinations[ii] = E_DESTINATION (list->data);
- list = g_list_delete_link (list, list);
- }
+ for (ii = 0; ii < length; ii++)
+ new_destinations[ii] = g_queue_pop_head (&queue);
+
+ /* Sanity check. */
+ g_warn_if_fail (g_queue_is_empty (&queue));
return new_destinations;
}
@@ -285,7 +295,8 @@ from_header_should_be_visible (EComposerHeaderTable *table)
EShell *shell;
EComposerHeader *header;
EComposerHeaderType type;
- EAccountComboBox *combo_box;
+ GtkComboBox *combo_box;
+ GtkTreeModel *tree_model;
shell = e_composer_header_table_get_shell (table);
@@ -295,9 +306,11 @@ from_header_should_be_visible (EComposerHeaderTable *table)
type = E_COMPOSER_HEADER_FROM;
header = e_composer_header_table_get_header (table, type);
- combo_box = E_ACCOUNT_COMBO_BOX (header->input_widget);
- return (e_account_combo_box_count_displayed_accounts (combo_box) > 1);
+ combo_box = GTK_COMBO_BOX (header->input_widget);
+ tree_model = gtk_combo_box_get_model (combo_box);
+
+ return (gtk_tree_model_iter_n_children (tree_model, NULL) > 1);
}
static void
@@ -421,46 +434,129 @@ composer_header_table_setup_post_headers (EComposerHeaderTable *table)
g_object_unref (settings);
}
+static gboolean
+composer_header_table_show_post_headers (EComposerHeaderTable *table)
+{
+ ESourceRegistry *registry;
+ GList *list, *link;
+ const gchar *extension_name;
+ const gchar *target_uid;
+ gboolean show_post_headers = FALSE;
+
+ registry = e_composer_header_table_get_registry (table);
+ target_uid = e_composer_header_table_get_identity_uid (table);
+
+ extension_name = E_SOURCE_EXTENSION_MAIL_ACCOUNT;
+ list = e_source_registry_list_sources (registry, extension_name);
+
+ /* Look for a mail account referencing this mail identity.
+ * If the mail account's backend name is "nntp", show the
+ * post headers. Otherwise show the mail headers.
+ *
+ * XXX What if multiple accounts use this identity but only
+ * one is "nntp"? Maybe it should be indicated by the
+ * transport somehow?
+ */
+ for (link = list; link != NULL; link = link->next) {
+ ESource *source = E_SOURCE (link->data);
+ ESourceExtension *extension;
+ const gchar *backend_name;
+ const gchar *identity_uid;
+
+ extension = e_source_get_extension (source, extension_name);
+
+ backend_name = e_source_backend_get_backend_name (
+ E_SOURCE_BACKEND (extension));
+ identity_uid = e_source_mail_account_get_identity_uid (
+ E_SOURCE_MAIL_ACCOUNT (extension));
+
+ if (g_strcmp0 (identity_uid, target_uid) != 0)
+ continue;
+
+ if (g_strcmp0 (backend_name, "nntp") != 0)
+ continue;
+
+ show_post_headers = TRUE;
+ break;
+ }
+
+ g_list_free (list);
+
+ return show_post_headers;
+}
+
static void
composer_header_table_from_changed_cb (EComposerHeaderTable *table)
{
- EAccount *account;
+ ESource *source;
+ ESource *mail_account = NULL;
+ ESourceRegistry *registry;
EComposerHeader *header;
EComposerHeaderType type;
EComposerPostHeader *post_header;
EComposerTextHeader *text_header;
EDestination **old_destinations;
EDestination **new_destinations;
- const gchar *reply_to;
- const gchar *source_url;
- gboolean always_cc;
- gboolean always_bcc;
+ const gchar *reply_to = NULL;
+ const gchar * const *bcc = NULL;
+ const gchar * const *cc = NULL;
+ const gchar *uid;
/* Keep "Post-To" and "Reply-To" synchronized with "From" */
- account = e_composer_header_table_get_account (table);
- source_url = e_account_get_string (account, E_ACCOUNT_SOURCE_URL);
+ registry = e_composer_header_table_get_registry (table);
+ uid = e_composer_header_table_get_identity_uid (table);
+ source = e_source_registry_lookup_by_uid (registry, uid);
+
+ /* Make sure this is really a mail identity source. */
+ if (source != NULL) {
+ const gchar *extension_name;
+
+ extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY;
+ if (!e_source_has_extension (source, extension_name))
+ source = NULL;
+ }
+
+ /* Fetch the backend name of the mail identity's parent source,
+ * which should be a mail account source. If the backend name
+ * is "nntp", show the post headers instead of the mail headers.
+ *
+ * XXX We should not be checking specific backend names here,
+ * but this is a corner case and I don't want to complicate
+ * the mail identity design over this. */
+
+ if (source != NULL) {
+ ESourceMailIdentity *mi;
+ ESourceMailComposition *mc;
+ const gchar *extension_name;
+
+ extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY;
+ mi = e_source_get_extension (source, extension_name);
+
+ extension_name = E_SOURCE_EXTENSION_MAIL_COMPOSITION;
+ mc = e_source_get_extension (source, extension_name);
+
+ reply_to = e_source_mail_identity_get_reply_to (mi);
+ bcc = e_source_mail_composition_get_bcc (mc);
+ cc = e_source_mail_composition_get_cc (mc);
+ }
type = E_COMPOSER_HEADER_POST_TO;
header = e_composer_header_table_get_header (table, type);
post_header = E_COMPOSER_POST_HEADER (header);
- e_composer_post_header_set_account (post_header, account);
+ e_composer_post_header_set_mail_account (post_header, mail_account);
type = E_COMPOSER_HEADER_REPLY_TO;
header = e_composer_header_table_get_header (table, type);
- reply_to = (account != NULL) ? account->id->reply_to : NULL;
text_header = E_COMPOSER_TEXT_HEADER (header);
e_composer_text_header_set_text (text_header, reply_to);
- always_cc = (account != NULL && account->always_cc);
- always_bcc = (account != NULL && account->always_bcc);
-
/* Update automatic CC destinations. */
old_destinations =
e_composer_header_table_get_destinations_cc (table);
new_destinations =
composer_header_table_update_destinations (
- old_destinations, always_cc ? account->cc_addrs : NULL);
+ old_destinations, cc);
e_composer_header_table_set_destinations_cc (table, new_destinations);
e_destination_freev (old_destinations);
e_destination_freev (new_destinations);
@@ -470,34 +566,28 @@ composer_header_table_from_changed_cb (EComposerHeaderTable *table)
e_composer_header_table_get_destinations_bcc (table);
new_destinations =
composer_header_table_update_destinations (
- old_destinations, always_bcc ? account->bcc_addrs : NULL);
+ old_destinations, bcc);
e_composer_header_table_set_destinations_bcc (table, new_destinations);
e_destination_freev (old_destinations);
e_destination_freev (new_destinations);
- /* XXX We should NOT be checking specific account types here.
- * Would prefer EAccount have a "send_method" enum item:
- *
- * E_ACCOUNT_SEND_METHOD_MAIL
- * E_ACCOUNT_SEND_METHOD_POST
- *
- * And that would dictate which set of headers we show
- * in the composer when an account is selected. Alas,
- * EAccount has no private storage, so it would require
- * an ABI break and I don't want to deal with that now.
- * (But would anything besides Evolution be affected?)
- *
- * Currently only NNTP accounts use the "POST" fields.
- */
- if (source_url == NULL)
- composer_header_table_setup_mail_headers (table);
- else if (g_ascii_strncasecmp (source_url, "nntp:", 5) == 0)
+ if (composer_header_table_show_post_headers (table))
composer_header_table_setup_post_headers (table);
else
composer_header_table_setup_mail_headers (table);
}
static void
+composer_header_table_set_registry (EComposerHeaderTable *table,
+ ESourceRegistry *registry)
+{
+ g_return_if_fail (E_IS_SOURCE_REGISTRY (registry));
+ g_return_if_fail (table->priv->registry == NULL);
+
+ table->priv->registry = g_object_ref (registry);
+}
+
+static void
composer_header_table_set_shell (EComposerHeaderTable *table,
EShell *shell)
{
@@ -507,92 +597,6 @@ composer_header_table_set_shell (EComposerHeaderTable *table,
table->priv->shell = g_object_ref (shell);
}
-static GObject *
-composer_header_table_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
-{
- GObject *object;
- EComposerHeaderTablePrivate *priv;
- guint rows, ii;
- gint row_padding;
- gboolean small_screen_mode;
-
- /* Chain up to parent's constructor() method. */
- object = G_OBJECT_CLASS (
- e_composer_header_table_parent_class)->constructor (
- type, n_construct_properties, construct_properties);
-
- priv = E_COMPOSER_HEADER_TABLE (object)->priv;
-
- small_screen_mode = e_shell_get_small_screen_mode (priv->shell);
-
- rows = G_N_ELEMENTS (priv->headers);
- gtk_table_resize (GTK_TABLE (object), rows, 4);
- gtk_table_set_row_spacings (GTK_TABLE (object), 0);
- gtk_table_set_col_spacings (GTK_TABLE (object), 6);
-
- /* Use "ypadding" instead of "row-spacing" because some rows may
- * be invisible and we don't want spacing around them. */
-
- /* For small screens, pack the table's rows closely together. */
- row_padding = small_screen_mode ? 0 : 3;
-
- for (ii = 0; ii < rows; ii++) {
- gtk_table_attach (
- GTK_TABLE (object), priv->headers[ii]->title_widget,
- 0, 1, ii, ii + 1, GTK_FILL, GTK_FILL, 0, row_padding);
- gtk_table_attach (
- GTK_TABLE (object),
- priv->headers[ii]->input_widget, 1, 4,
- ii, ii + 1, GTK_FILL | GTK_EXPAND, 0, 0, row_padding);
- }
-
- ii = E_COMPOSER_HEADER_FROM;
-
- /* Leave room in the "From" row for signature stuff. */
- gtk_container_child_set (
- GTK_CONTAINER (object),
- priv->headers[ii]->input_widget,
- "right-attach", 2, NULL);
-
- g_object_bind_property (
- priv->headers[ii]->input_widget, "visible",
- priv->signature_label, "visible",
- G_BINDING_SYNC_CREATE);
-
- g_object_bind_property (
- priv->headers[ii]->input_widget, "visible",
- priv->signature_combo_box, "visible",
- G_BINDING_SYNC_CREATE);
-
- /* Now add the signature stuff. */
- if (!small_screen_mode) {
- gtk_table_attach (
- GTK_TABLE (object), priv->signature_label,
- 2, 3, ii, ii + 1, 0, 0, 0, row_padding);
- gtk_table_attach (
- GTK_TABLE (object), priv->signature_combo_box,
- 3, 4, ii, ii + 1, 0, 0, 0, row_padding);
- } else {
- GtkWidget *box = gtk_hbox_new (FALSE, 0);
-
- gtk_box_pack_start (
- GTK_BOX (box), priv->signature_label,
- FALSE, FALSE, 4);
- gtk_box_pack_end (
- GTK_BOX (box), priv->signature_combo_box,
- TRUE, TRUE, 0);
- g_object_set_data (G_OBJECT (box), "pdata", object);
- gtk_table_attach (
- GTK_TABLE (object), box,
- 3, 4, ii, ii + 1, GTK_FILL, 0, 0, row_padding);
- gtk_widget_hide (box);
- }
-
- return object;
-}
-
static void
composer_header_table_set_property (GObject *object,
guint property_id,
@@ -603,24 +607,6 @@ composer_header_table_set_property (GObject *object,
GList *list;
switch (property_id) {
- case PROP_ACCOUNT:
- e_composer_header_table_set_account (
- E_COMPOSER_HEADER_TABLE (object),
- g_value_get_object (value));
- return;
-
- case PROP_ACCOUNT_LIST:
- e_composer_header_table_set_account_list (
- E_COMPOSER_HEADER_TABLE (object),
- g_value_get_object (value));
- return;
-
- case PROP_ACCOUNT_NAME:
- e_composer_header_table_set_account_name (
- E_COMPOSER_HEADER_TABLE (object),
- g_value_get_string (value));
- return;
-
case PROP_DESTINATIONS_BCC:
destinations = g_value_dup_destinations (value);
e_composer_header_table_set_destinations_bcc (
@@ -645,6 +631,12 @@ composer_header_table_set_property (GObject *object,
e_destination_freev (destinations);
return;
+ case PROP_IDENTITY_UID:
+ e_composer_header_table_set_identity_uid (
+ E_COMPOSER_HEADER_TABLE (object),
+ g_value_get_string (value));
+ return;
+
case PROP_POST_TO:
list = g_value_dup_string_list (value);
e_composer_header_table_set_post_to_list (
@@ -653,6 +645,12 @@ composer_header_table_set_property (GObject *object,
g_list_free (list);
return;
+ case PROP_REGISTRY:
+ composer_header_table_set_registry (
+ E_COMPOSER_HEADER_TABLE (object),
+ g_value_get_object (value));
+ return;
+
case PROP_REPLY_TO:
e_composer_header_table_set_reply_to (
E_COMPOSER_HEADER_TABLE (object),
@@ -665,16 +663,10 @@ composer_header_table_set_property (GObject *object,
g_value_get_object (value));
return;
- case PROP_SIGNATURE:
- e_composer_header_table_set_signature (
- E_COMPOSER_HEADER_TABLE (object),
- g_value_get_object (value));
- return;
-
- case PROP_SIGNATURE_LIST:
- e_composer_header_table_set_signature_list (
+ case PROP_SIGNATURE_UID:
+ e_composer_header_table_set_signature_uid (
E_COMPOSER_HEADER_TABLE (object),
- g_value_get_object (value));
+ g_value_get_string (value));
return;
case PROP_SUBJECT:
@@ -697,27 +689,6 @@ composer_header_table_get_property (GObject *object,
GList *list;
switch (property_id) {
- case PROP_ACCOUNT:
- g_value_set_object (
- value,
- e_composer_header_table_get_account (
- E_COMPOSER_HEADER_TABLE (object)));
- return;
-
- case PROP_ACCOUNT_LIST:
- g_value_set_object (
- value,
- e_composer_header_table_get_account_list (
- E_COMPOSER_HEADER_TABLE (object)));
- return;
-
- case PROP_ACCOUNT_NAME:
- g_value_set_string (
- value,
- e_composer_header_table_get_account_name (
- E_COMPOSER_HEADER_TABLE (object)));
- return;
-
case PROP_DESTINATIONS_BCC:
destinations =
e_composer_header_table_get_destinations_bcc (
@@ -742,6 +713,13 @@ composer_header_table_get_property (GObject *object,
e_destination_freev (destinations);
return;
+ case PROP_IDENTITY_UID:
+ g_value_set_string (
+ value,
+ e_composer_header_table_get_identity_uid (
+ E_COMPOSER_HEADER_TABLE (object)));
+ return;
+
case PROP_POST_TO:
list = e_composer_header_table_get_post_to (
E_COMPOSER_HEADER_TABLE (object));
@@ -750,6 +728,13 @@ composer_header_table_get_property (GObject *object,
g_list_free (list);
return;
+ case PROP_REGISTRY:
+ g_value_set_object (
+ value,
+ e_composer_header_table_get_registry (
+ E_COMPOSER_HEADER_TABLE (object)));
+ return;
+
case PROP_REPLY_TO:
g_value_set_string (
value,
@@ -764,17 +749,10 @@ composer_header_table_get_property (GObject *object,
E_COMPOSER_HEADER_TABLE (object)));
return;
- case PROP_SIGNATURE:
- g_value_set_object (
- value,
- e_composer_header_table_get_signature (
- E_COMPOSER_HEADER_TABLE (object)));
- return;
-
- case PROP_SIGNATURE_LIST:
- g_value_set_object (
+ case PROP_SIGNATURE_UID:
+ g_value_set_string (
value,
- e_composer_header_table_get_signature_list (
+ e_composer_header_table_get_signature_uid (
E_COMPOSER_HEADER_TABLE (object)));
return;
@@ -815,6 +793,11 @@ composer_header_table_dispose (GObject *object)
priv->name_selector = NULL;
}
+ if (priv->registry != NULL) {
+ g_object_unref (priv->registry);
+ priv->registry = NULL;
+ }
+
if (priv->shell != NULL) {
g_object_unref (priv->shell);
priv->shell = NULL;
@@ -825,6 +808,142 @@ composer_header_table_dispose (GObject *object)
}
static void
+composer_header_table_constructed (GObject *object)
+{
+ EComposerHeaderTable *table;
+ ENameSelector *name_selector;
+ ESourceRegistry *registry;
+ EComposerHeader *header;
+ GtkWidget *widget;
+ EShell *shell;
+ guint ii;
+ gint row_padding;
+ gboolean small_screen_mode;
+
+ /* Chain up to parent's constructed() method. */
+ G_OBJECT_CLASS (e_composer_header_table_parent_class)->
+ constructed (object);
+
+ table = E_COMPOSER_HEADER_TABLE (object);
+ shell = e_composer_header_table_get_shell (table);
+ registry = e_composer_header_table_get_registry (table);
+
+ small_screen_mode = e_shell_get_small_screen_mode (shell);
+
+ name_selector = e_name_selector_new (registry);
+ table->priv->name_selector = name_selector;
+
+ header = e_composer_from_header_new (registry, _("Fr_om:"));
+ composer_header_table_bind_header ("account", "changed", header);
+ g_signal_connect_swapped (
+ header, "changed", G_CALLBACK (
+ composer_header_table_from_changed_cb), table);
+ table->priv->headers[E_COMPOSER_HEADER_FROM] = header;
+
+ header = e_composer_text_header_new_label (registry, _("_Reply-To:"));
+ composer_header_table_bind_header ("reply-to", "changed", header);
+ table->priv->headers[E_COMPOSER_HEADER_REPLY_TO] = header;
+
+ header = e_composer_name_header_new (
+ registry, _("_To:"), name_selector);
+ e_composer_header_set_input_tooltip (header, HEADER_TOOLTIP_TO);
+ composer_header_table_bind_header ("destinations-to", "changed", header);
+ table->priv->headers[E_COMPOSER_HEADER_TO] = header;
+
+ header = e_composer_name_header_new (
+ registry, _("_Cc:"), name_selector);
+ e_composer_header_set_input_tooltip (header, HEADER_TOOLTIP_CC);
+ composer_header_table_bind_header ("destinations-cc", "changed", header);
+ table->priv->headers[E_COMPOSER_HEADER_CC] = header;
+
+ header = e_composer_name_header_new (
+ registry, _("_Bcc:"), name_selector);
+ e_composer_header_set_input_tooltip (header, HEADER_TOOLTIP_BCC);
+ composer_header_table_bind_header ("destinations-bcc", "changed", header);
+ table->priv->headers[E_COMPOSER_HEADER_BCC] = header;
+
+ header = e_composer_post_header_new (registry, _("_Post To:"));
+ composer_header_table_bind_header ("post-to", "changed", header);
+ table->priv->headers[E_COMPOSER_HEADER_POST_TO] = header;
+
+ header = e_composer_text_header_new_label (registry, _("S_ubject:"));
+ composer_header_table_bind_header ("subject", "changed", header);
+ table->priv->headers[E_COMPOSER_HEADER_SUBJECT] = header;
+
+ widget = e_mail_signature_combo_box_new (registry);
+ composer_header_table_bind_widget ("signature", "changed", widget);
+ table->priv->signature_combo_box = g_object_ref_sink (widget);
+
+ widget = gtk_label_new_with_mnemonic (_("Si_gnature:"));
+ gtk_label_set_mnemonic_widget (
+ GTK_LABEL (widget), table->priv->signature_combo_box);
+ table->priv->signature_label = g_object_ref_sink (widget);
+
+ /* Use "ypadding" instead of "row-spacing" because some rows may
+ * be invisible and we don't want spacing around them. */
+
+ /* For small screens, pack the table's rows closely together. */
+ row_padding = small_screen_mode ? 0 : 3;
+
+ for (ii = 0; ii < G_N_ELEMENTS (table->priv->headers); ii++) {
+ gtk_table_attach (
+ GTK_TABLE (object),
+ table->priv->headers[ii]->title_widget, 0, 1,
+ ii, ii + 1, GTK_FILL, GTK_FILL, 0, row_padding);
+ gtk_table_attach (
+ GTK_TABLE (object),
+ table->priv->headers[ii]->input_widget, 1, 4,
+ ii, ii + 1, GTK_FILL | GTK_EXPAND, 0, 0, row_padding);
+ }
+
+ ii = E_COMPOSER_HEADER_FROM;
+
+ /* Leave room in the "From" row for signature stuff. */
+ gtk_container_child_set (
+ GTK_CONTAINER (object),
+ table->priv->headers[ii]->input_widget,
+ "right-attach", 2, NULL);
+
+ g_object_bind_property (
+ table->priv->headers[ii]->input_widget, "visible",
+ table->priv->signature_label, "visible",
+ G_BINDING_SYNC_CREATE);
+
+ g_object_bind_property (
+ table->priv->headers[ii]->input_widget, "visible",
+ table->priv->signature_combo_box, "visible",
+ G_BINDING_SYNC_CREATE);
+
+ /* Now add the signature stuff. */
+ if (!small_screen_mode) {
+ gtk_table_attach (
+ GTK_TABLE (object),
+ table->priv->signature_label,
+ 2, 3, ii, ii + 1, 0, 0, 0, row_padding);
+ gtk_table_attach (
+ GTK_TABLE (object),
+ table->priv->signature_combo_box,
+ 3, 4, ii, ii + 1, 0, 0, 0, row_padding);
+ } else {
+ GtkWidget *box = gtk_hbox_new (FALSE, 0);
+
+ gtk_box_pack_start (
+ GTK_BOX (box),
+ table->priv->signature_label,
+ FALSE, FALSE, 4);
+ gtk_box_pack_end (
+ GTK_BOX (box),
+ table->priv->signature_combo_box,
+ TRUE, TRUE, 0);
+ g_object_set_data (G_OBJECT (box), "pdata", object);
+ gtk_table_attach (
+ GTK_TABLE (object), box,
+ 3, 4, ii, ii + 1, GTK_FILL, 0, 0, row_padding);
+ gtk_widget_hide (box);
+ }
+}
+
+static void
e_composer_header_table_class_init (EComposerHeaderTableClass *class)
{
GObjectClass *object_class;
@@ -833,40 +952,10 @@ e_composer_header_table_class_init (EComposerHeaderTableClass *class)
g_type_class_add_private (class, sizeof (EComposerHeaderTablePrivate));
object_class = G_OBJECT_CLASS (class);
- object_class->constructor = composer_header_table_constructor;
object_class->set_property = composer_header_table_set_property;
object_class->get_property = composer_header_table_get_property;
object_class->dispose = composer_header_table_dispose;
-
- g_object_class_install_property (
- object_class,
- PROP_ACCOUNT,
- g_param_spec_object (
- "account",
- NULL,
- NULL,
- E_TYPE_ACCOUNT,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (
- object_class,
- PROP_ACCOUNT_LIST,
- g_param_spec_object (
- "account-list",
- NULL,
- NULL,
- E_TYPE_ACCOUNT_LIST,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (
- object_class,
- PROP_ACCOUNT_NAME,
- g_param_spec_string (
- "account-name",
- NULL,
- NULL,
- NULL,
- G_PARAM_READWRITE));
+ object_class->constructed = composer_header_table_constructed;
/* floating reference */
element_spec = g_param_spec_object (
@@ -874,7 +963,8 @@ e_composer_header_table_class_init (EComposerHeaderTableClass *class)
NULL,
NULL,
E_TYPE_DESTINATION,
- G_PARAM_READWRITE);
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS);
g_object_class_install_property (
object_class,
@@ -884,7 +974,8 @@ e_composer_header_table_class_init (EComposerHeaderTableClass *class)
NULL,
NULL,
element_spec,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property (
object_class,
@@ -894,7 +985,8 @@ e_composer_header_table_class_init (EComposerHeaderTableClass *class)
NULL,
NULL,
element_spec,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property (
object_class,
@@ -904,7 +996,19 @@ e_composer_header_table_class_init (EComposerHeaderTableClass *class)
NULL,
NULL,
element_spec,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_IDENTITY_UID,
+ g_param_spec_string (
+ "identity-uid",
+ NULL,
+ NULL,
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/* floating reference */
element_spec = g_param_spec_string (
@@ -912,7 +1016,8 @@ e_composer_header_table_class_init (EComposerHeaderTableClass *class)
NULL,
NULL,
NULL,
- G_PARAM_READWRITE);
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS);
g_object_class_install_property (
object_class,
@@ -922,7 +1027,20 @@ e_composer_header_table_class_init (EComposerHeaderTableClass *class)
NULL,
NULL,
element_spec,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_REGISTRY,
+ g_param_spec_object (
+ "registry",
+ NULL,
+ NULL,
+ E_TYPE_SOURCE_REGISTRY,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property (
object_class,
@@ -932,7 +1050,8 @@ e_composer_header_table_class_init (EComposerHeaderTableClass *class)
NULL,
NULL,
NULL,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property (
object_class,
@@ -943,27 +1062,19 @@ e_composer_header_table_class_init (EComposerHeaderTableClass *class)
NULL,
E_TYPE_SHELL,
G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property (
object_class,
- PROP_SIGNATURE,
- g_param_spec_object (
- "signature",
+ PROP_SIGNATURE_UID,
+ g_param_spec_string (
+ "signature-uid",
NULL,
NULL,
- E_TYPE_SIGNATURE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (
- object_class,
- PROP_SIGNATURE_LIST,
- g_param_spec_object (
- "signature-list",
NULL,
- NULL,
- E_TYPE_SIGNATURE_LIST,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property (
object_class,
@@ -973,7 +1084,8 @@ e_composer_header_table_class_init (EComposerHeaderTableClass *class)
NULL,
NULL,
NULL,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
static void
@@ -991,77 +1103,14 @@ composer_header_table_realize_cb (EComposerHeaderTable *table)
static void
e_composer_header_table_init (EComposerHeaderTable *table)
{
- EComposerHeader *header;
- ENameSelector *name_selector;
- GtkWidget *widget;
- gint ii;
-
- table->priv = G_TYPE_INSTANCE_GET_PRIVATE (
- table, E_TYPE_COMPOSER_HEADER_TABLE,
- EComposerHeaderTablePrivate);
-
- name_selector = e_name_selector_new ();
- table->priv->name_selector = name_selector;
-
- header = e_composer_from_header_new (_("Fr_om:"));
- composer_header_table_bind_header ("account", "changed", header);
- composer_header_table_bind_header ("account-list", "refreshed", header);
- composer_header_table_bind_header ("account-name", "changed", header);
- g_signal_connect_swapped (
- header, "changed", G_CALLBACK (
- composer_header_table_from_changed_cb), table);
- table->priv->headers[E_COMPOSER_HEADER_FROM] = header;
-
- header = e_composer_text_header_new_label (_("_Reply-To:"));
- composer_header_table_bind_header ("reply-to", "changed", header);
- table->priv->headers[E_COMPOSER_HEADER_REPLY_TO] = header;
-
- header = e_composer_name_header_new (_("_To:"), name_selector);
- e_composer_header_set_input_tooltip (header, HEADER_TOOLTIP_TO);
- composer_header_table_bind_header ("destinations-to", "changed", header);
- table->priv->headers[E_COMPOSER_HEADER_TO] = header;
+ gint rows;
- header = e_composer_name_header_new (_("_Cc:"), name_selector);
- e_composer_header_set_input_tooltip (header, HEADER_TOOLTIP_CC);
- composer_header_table_bind_header ("destinations-cc", "changed", header);
- table->priv->headers[E_COMPOSER_HEADER_CC] = header;
-
- header = e_composer_name_header_new (_("_Bcc:"), name_selector);
- e_composer_header_set_input_tooltip (header, HEADER_TOOLTIP_BCC);
- composer_header_table_bind_header ("destinations-bcc", "changed", header);
- table->priv->headers[E_COMPOSER_HEADER_BCC] = header;
+ table->priv = E_COMPOSER_HEADER_TABLE_GET_PRIVATE (table);
- header = e_composer_post_header_new (_("_Post To:"));
- composer_header_table_bind_header ("post-to", "changed", header);
- table->priv->headers[E_COMPOSER_HEADER_POST_TO] = header;
-
- header = e_composer_text_header_new_label (_("S_ubject:"));
- composer_header_table_bind_header ("subject", "changed", header);
- table->priv->headers[E_COMPOSER_HEADER_SUBJECT] = header;
-
- widget = e_signature_combo_box_new ();
- composer_header_table_bind_widget ("signature", "changed", widget);
- composer_header_table_bind_widget ("signature-list", "refreshed", widget);
- table->priv->signature_combo_box = g_object_ref_sink (widget);
-
- widget = gtk_label_new_with_mnemonic (_("Si_gnature:"));
- gtk_label_set_mnemonic_widget (
- GTK_LABEL (widget), table->priv->signature_combo_box);
- table->priv->signature_label = g_object_ref_sink (widget);
-
- /* XXX EComposerHeader ought to do this itself, but I need to
- * make the title_widget and input_widget members private. */
- for (ii = 0; ii < E_COMPOSER_NUM_HEADERS; ii++) {
- header = table->priv->headers[ii];
- g_object_bind_property (
- header, "visible",
- header->title_widget, "visible",
- G_BINDING_SYNC_CREATE);
- g_object_bind_property (
- header, "visible",
- header->input_widget, "visible",
- G_BINDING_SYNC_CREATE);
- }
+ rows = G_N_ELEMENTS (table->priv->headers);
+ gtk_table_resize (GTK_TABLE (table), rows, 4);
+ gtk_table_set_row_spacings (GTK_TABLE (table), 0);
+ gtk_table_set_col_spacings (GTK_TABLE (table), 6);
/* postpone name_selector loading, do that only when really needed */
g_signal_connect (
@@ -1070,13 +1119,15 @@ e_composer_header_table_init (EComposerHeaderTable *table)
}
GtkWidget *
-e_composer_header_table_new (EShell *shell)
+e_composer_header_table_new (EShell *shell,
+ ESourceRegistry *registry)
{
g_return_val_if_fail (E_IS_SHELL (shell), NULL);
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
return g_object_new (
E_TYPE_COMPOSER_HEADER_TABLE,
- "shell", shell, NULL);
+ "shell", shell, "registry", registry, NULL);
}
EShell *
@@ -1087,113 +1138,22 @@ e_composer_header_table_get_shell (EComposerHeaderTable *table)
return table->priv->shell;
}
-EComposerHeader *
-e_composer_header_table_get_header (EComposerHeaderTable *table,
- EComposerHeaderType type)
+ESourceRegistry *
+e_composer_header_table_get_registry (EComposerHeaderTable *table)
{
g_return_val_if_fail (E_IS_COMPOSER_HEADER_TABLE (table), NULL);
- g_return_val_if_fail (type < E_COMPOSER_NUM_HEADERS, NULL);
- return table->priv->headers[type];
+ return table->priv->registry;
}
-EAccount *
-e_composer_header_table_get_account (EComposerHeaderTable *table)
-{
- EComposerHeader *header;
- EComposerHeaderType type;
- EComposerFromHeader *from_header;
-
- g_return_val_if_fail (E_IS_COMPOSER_HEADER_TABLE (table), NULL);
-
- type = E_COMPOSER_HEADER_FROM;
- header = e_composer_header_table_get_header (table, type);
- from_header = E_COMPOSER_FROM_HEADER (header);
-
- return e_composer_from_header_get_active (from_header);
-}
-
-gboolean
-e_composer_header_table_set_account (EComposerHeaderTable *table,
- EAccount *account)
-{
- EComposerHeader *header;
- EComposerHeaderType type;
- EComposerFromHeader *from_header;
-
- g_return_val_if_fail (E_IS_COMPOSER_HEADER_TABLE (table), FALSE);
-
- type = E_COMPOSER_HEADER_FROM;
- header = e_composer_header_table_get_header (table, type);
- from_header = E_COMPOSER_FROM_HEADER (header);
-
- return e_composer_from_header_set_active (from_header, account);
-}
-
-EAccountList *
-e_composer_header_table_get_account_list (EComposerHeaderTable *table)
+EComposerHeader *
+e_composer_header_table_get_header (EComposerHeaderTable *table,
+ EComposerHeaderType type)
{
- EComposerHeader *header;
- EComposerHeaderType type;
- EComposerFromHeader *from_header;
-
g_return_val_if_fail (E_IS_COMPOSER_HEADER_TABLE (table), NULL);
+ g_return_val_if_fail (type < E_COMPOSER_NUM_HEADERS, NULL);
- type = E_COMPOSER_HEADER_FROM;
- header = e_composer_header_table_get_header (table, type);
- from_header = E_COMPOSER_FROM_HEADER (header);
-
- return e_composer_from_header_get_account_list (from_header);
-}
-
-void
-e_composer_header_table_set_account_list (EComposerHeaderTable *table,
- EAccountList *account_list)
-{
- EComposerHeader *header;
- EComposerHeaderType type;
- EComposerFromHeader *from_header;
-
- g_return_if_fail (E_IS_COMPOSER_HEADER_TABLE (table));
-
- type = E_COMPOSER_HEADER_FROM;
- header = e_composer_header_table_get_header (table, type);
- from_header = E_COMPOSER_FROM_HEADER (header);
-
- e_composer_from_header_set_account_list (from_header, account_list);
-}
-
-const gchar *
-e_composer_header_table_get_account_name (EComposerHeaderTable *table)
-{
- EComposerHeader *header;
- EComposerHeaderType type;
- EComposerFromHeader *from_header;
-
- g_return_val_if_fail (E_IS_COMPOSER_HEADER_TABLE (table), NULL);
-
- type = E_COMPOSER_HEADER_FROM;
- header = e_composer_header_table_get_header (table, type);
- from_header = E_COMPOSER_FROM_HEADER (header);
-
- return e_composer_from_header_get_active_name (from_header);
-}
-
-gboolean
-e_composer_header_table_set_account_name (EComposerHeaderTable *table,
- const gchar *account_name)
-{
- EComposerHeader *header;
- EComposerHeaderType type;
- EComposerFromHeader *from_header;
-
- g_return_val_if_fail (E_IS_COMPOSER_HEADER_TABLE (table), FALSE);
-
- type = E_COMPOSER_HEADER_FROM;
- header = e_composer_header_table_get_header (table, type);
- from_header = E_COMPOSER_FROM_HEADER (header);
-
- return e_composer_from_header_set_active_name (from_header, account_name);
+ return table->priv->headers[type];
}
EDestination **
@@ -1398,6 +1358,39 @@ e_composer_header_table_set_destinations_to (EComposerHeaderTable *table,
e_composer_name_header_set_destinations (name_header, destinations);
}
+const gchar *
+e_composer_header_table_get_identity_uid (EComposerHeaderTable *table)
+{
+ EComposerHeader *header;
+ EComposerHeaderType type;
+ EComposerFromHeader *from_header;
+
+ g_return_val_if_fail (E_IS_COMPOSER_HEADER_TABLE (table), NULL);
+
+ type = E_COMPOSER_HEADER_FROM;
+ header = e_composer_header_table_get_header (table, type);
+ from_header = E_COMPOSER_FROM_HEADER (header);
+
+ return e_composer_from_header_get_active_id (from_header);
+}
+
+void
+e_composer_header_table_set_identity_uid (EComposerHeaderTable *table,
+ const gchar *identity_uid)
+{
+ EComposerHeader *header;
+ EComposerHeaderType type;
+ EComposerFromHeader *from_header;
+
+ g_return_if_fail (E_IS_COMPOSER_HEADER_TABLE (table));
+
+ type = E_COMPOSER_HEADER_FROM;
+ header = e_composer_header_table_get_header (table, type);
+ from_header = E_COMPOSER_FROM_HEADER (header);
+
+ e_composer_from_header_set_active_id (from_header, identity_uid);
+}
+
GList *
e_composer_header_table_get_post_to (EComposerHeaderTable *table)
{
@@ -1485,50 +1478,29 @@ e_composer_header_table_set_reply_to (EComposerHeaderTable *table,
e_composer_header_set_visible (header, TRUE);
}
-ESignature *
-e_composer_header_table_get_signature (EComposerHeaderTable *table)
+const gchar *
+e_composer_header_table_get_signature_uid (EComposerHeaderTable *table)
{
- ESignatureComboBox *combo_box;
+ GtkComboBox *combo_box;
g_return_val_if_fail (E_IS_COMPOSER_HEADER_TABLE (table), NULL);
- combo_box = E_SIGNATURE_COMBO_BOX (table->priv->signature_combo_box);
- return e_signature_combo_box_get_active (combo_box);
-}
-
-gboolean
-e_composer_header_table_set_signature (EComposerHeaderTable *table,
- ESignature *signature)
-{
- ESignatureComboBox *combo_box;
-
- g_return_val_if_fail (E_IS_COMPOSER_HEADER_TABLE (table), FALSE);
+ combo_box = GTK_COMBO_BOX (table->priv->signature_combo_box);
- combo_box = E_SIGNATURE_COMBO_BOX (table->priv->signature_combo_box);
- return e_signature_combo_box_set_active (combo_box, signature);
-}
-
-ESignatureList *
-e_composer_header_table_get_signature_list (EComposerHeaderTable *table)
-{
- ESignatureComboBox *combo_box;
-
- g_return_val_if_fail (E_IS_COMPOSER_HEADER_TABLE (table), NULL);
-
- combo_box = E_SIGNATURE_COMBO_BOX (table->priv->signature_combo_box);
- return e_signature_combo_box_get_signature_list (combo_box);
+ return gtk_combo_box_get_active_id (combo_box);
}
void
-e_composer_header_table_set_signature_list (EComposerHeaderTable *table,
- ESignatureList *signature_list)
+e_composer_header_table_set_signature_uid (EComposerHeaderTable *table,
+ const gchar *signature_uid)
{
- ESignatureComboBox *combo_box;
+ GtkComboBox *combo_box;
g_return_if_fail (E_IS_COMPOSER_HEADER_TABLE (table));
- combo_box = E_SIGNATURE_COMBO_BOX (table->priv->signature_combo_box);
- e_signature_combo_box_set_signature_list (combo_box, signature_list);
+ combo_box = GTK_COMBO_BOX (table->priv->signature_combo_box);
+
+ gtk_combo_box_set_active_id (combo_box, signature_uid);
}
const gchar *
diff --git a/composer/e-composer-header-table.h b/composer/e-composer-header-table.h
index f7edec0..432128e 100644
--- a/composer/e-composer-header-table.h
+++ b/composer/e-composer-header-table.h
@@ -18,13 +18,9 @@
#ifndef E_COMPOSER_HEADER_TABLE_H
#define E_COMPOSER_HEADER_TABLE_H
-#include <libedataserver/e-account.h>
-#include <libedataserver/e-account-list.h>
#include <libebook/e-destination.h>
#include <shell/e-shell.h>
-#include <e-util/e-signature.h>
-#include <e-util/e-signature-list.h>
#include <composer/e-composer-header.h>
/* Standard GObject macros */
@@ -74,28 +70,17 @@ struct _EComposerHeaderTableClass {
};
GType e_composer_header_table_get_type (void);
-GtkWidget * e_composer_header_table_new (EShell *shell);
+GtkWidget * e_composer_header_table_new (EShell *shell,
+ ESourceRegistry *registry);
EShell * e_composer_header_table_get_shell
(EComposerHeaderTable *table);
+ESourceRegistry *
+ e_composer_header_table_get_registry
+ (EComposerHeaderTable *table);
EComposerHeader *
e_composer_header_table_get_header
(EComposerHeaderTable *table,
EComposerHeaderType type);
-EAccount * e_composer_header_table_get_account
- (EComposerHeaderTable *table);
-gboolean e_composer_header_table_set_account
- (EComposerHeaderTable *table,
- EAccount *account);
-EAccountList * e_composer_header_table_get_account_list
- (EComposerHeaderTable *table);
-void e_composer_header_table_set_account_list
- (EComposerHeaderTable *table,
- EAccountList *account_list);
-const gchar * e_composer_header_table_get_account_name
- (EComposerHeaderTable *table);
-gboolean e_composer_header_table_set_account_name
- (EComposerHeaderTable *table,
- const gchar *account_name);
EDestination ** e_composer_header_table_get_destinations
(EComposerHeaderTable *table);
EDestination ** e_composer_header_table_get_destinations_bcc
@@ -122,6 +107,11 @@ void e_composer_header_table_add_destinations_to
void e_composer_header_table_set_destinations_to
(EComposerHeaderTable *table,
EDestination **destinations);
+const gchar * e_composer_header_table_get_identity_uid
+ (EComposerHeaderTable *table);
+void e_composer_header_table_set_identity_uid
+ (EComposerHeaderTable *table,
+ const gchar *identity_uid);
GList * e_composer_header_table_get_post_to
(EComposerHeaderTable *table);
void e_composer_header_table_set_post_to_base
@@ -136,16 +126,11 @@ const gchar * e_composer_header_table_get_reply_to
void e_composer_header_table_set_reply_to
(EComposerHeaderTable *table,
const gchar *reply_to);
-ESignature * e_composer_header_table_get_signature
- (EComposerHeaderTable *table);
-gboolean e_composer_header_table_set_signature
- (EComposerHeaderTable *table,
- ESignature *signature);
-ESignatureList *e_composer_header_table_get_signature_list
+const gchar * e_composer_header_table_get_signature_uid
(EComposerHeaderTable *table);
-void e_composer_header_table_set_signature_list
+void e_composer_header_table_set_signature_uid
(EComposerHeaderTable *table,
- ESignatureList *signature_list);
+ const gchar *signature_uid);
const gchar * e_composer_header_table_get_subject
(EComposerHeaderTable *table);
void e_composer_header_table_set_subject
diff --git a/composer/e-composer-header.c b/composer/e-composer-header.c
index 29a9a5c..356154a 100644
--- a/composer/e-composer-header.c
+++ b/composer/e-composer-header.c
@@ -36,12 +36,8 @@
struct _EComposerHeaderPrivate {
gchar *label;
gboolean button;
- GtkWidget *action_label;
- GtkWidget *add_icon;
- GtkWidget *remove_icon;
- GtkWidget *show_label;
- GtkWidget *hide_label;
+ ESourceRegistry *registry;
guint sensitive : 1;
guint visible : 1;
@@ -51,6 +47,7 @@ enum {
PROP_0,
PROP_BUTTON,
PROP_LABEL,
+ PROP_REGISTRY,
PROP_SENSITIVE,
PROP_VISIBLE
};
@@ -76,48 +73,14 @@ composer_header_button_clicked_cb (GtkButton *button,
g_signal_emit (header, signal_ids[CLICKED], 0);
}
-static GObject *
-composer_header_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
+static void
+composer_header_set_registry (EComposerHeader *header,
+ ESourceRegistry *registry)
{
- GObject *object;
- GtkWidget *widget;
- EComposerHeader *header;
- GtkWidget *label;
-
- /* Chain up to parent's constructor() method. */
- object = G_OBJECT_CLASS (
- e_composer_header_parent_class)->constructor (
- type, n_construct_properties, construct_properties);
-
- header = E_COMPOSER_HEADER (object);
-
- if (header->priv->button) {
- widget = gtk_button_new_with_mnemonic (header->priv->label);
- gtk_widget_set_can_focus (widget, FALSE);
- g_signal_connect (
- widget, "clicked",
- G_CALLBACK (composer_header_button_clicked_cb),
- header);
- label = gtk_bin_get_child (GTK_BIN (widget));
- } else {
- widget = gtk_label_new_with_mnemonic (header->priv->label);
- gtk_label_set_mnemonic_widget (
- GTK_LABEL (widget), header->input_widget);
- label = widget;
- }
+ g_return_if_fail (E_IS_SOURCE_REGISTRY (registry));
+ g_return_if_fail (header->priv->registry == NULL);
- gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
-
- header->priv->action_label = NULL;
-
- header->title_widget = g_object_ref_sink (widget);
-
- g_free (header->priv->label);
- header->priv->label = NULL;
-
- return object;
+ header->priv->registry = g_object_ref (registry);
}
static void
@@ -139,6 +102,12 @@ composer_header_set_property (GObject *object,
priv->label = g_value_dup_string (value);
return;
+ case PROP_REGISTRY:
+ composer_header_set_registry (
+ E_COMPOSER_HEADER (object),
+ g_value_get_object (value));
+ return;
+
case PROP_SENSITIVE:
e_composer_header_set_sensitive (
E_COMPOSER_HEADER (object),
@@ -176,6 +145,12 @@ composer_header_get_property (GObject *object,
E_COMPOSER_HEADER (object)));
return;
+ case PROP_REGISTRY:
+ g_value_set_object (
+ value, e_composer_header_get_registry (
+ E_COMPOSER_HEADER (object)));
+ return;
+
case PROP_SENSITIVE:
g_value_set_boolean (
value, e_composer_header_get_sensitive (
@@ -207,11 +182,65 @@ composer_header_dispose (GObject *object)
header->input_widget = NULL;
}
+ if (header->priv->registry != NULL) {
+ g_object_unref (header->priv->registry);
+ header->priv->registry = NULL;
+ }
+
/* Chain up to parent's dispose() method. */
G_OBJECT_CLASS (e_composer_header_parent_class)->dispose (object);
}
static void
+composer_header_constructed (GObject *object)
+{
+ EComposerHeader *header;
+ GtkWidget *widget;
+ GtkWidget *label;
+
+ header = E_COMPOSER_HEADER (object);
+
+ if (header->input_widget) {
+ g_critical (
+ "EComposerHeader's input_widget "
+ "must be set before chaining up");
+ return;
+ }
+
+ if (header->priv->button) {
+ widget = gtk_button_new_with_mnemonic (header->priv->label);
+ gtk_widget_set_can_focus (widget, FALSE);
+ g_signal_connect (
+ widget, "clicked",
+ G_CALLBACK (composer_header_button_clicked_cb),
+ header);
+ label = gtk_bin_get_child (GTK_BIN (widget));
+ } else {
+ widget = gtk_label_new_with_mnemonic (header->priv->label);
+ gtk_label_set_mnemonic_widget (
+ GTK_LABEL (widget), header->input_widget);
+ label = widget;
+ }
+
+ gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
+
+ header->title_widget = g_object_ref_sink (widget);
+
+ g_object_bind_property (
+ header, "visible",
+ header->title_widget, "visible",
+ G_BINDING_SYNC_CREATE);
+
+ g_object_bind_property (
+ header, "visible",
+ header->input_widget, "visible",
+ G_BINDING_SYNC_CREATE);
+
+ g_free (header->priv->label);
+ header->priv->label = NULL;
+}
+
+static void
e_composer_header_class_init (EComposerHeaderClass *class)
{
GObjectClass *object_class;
@@ -219,10 +248,10 @@ e_composer_header_class_init (EComposerHeaderClass *class)
g_type_class_add_private (class, sizeof (EComposerHeaderPrivate));
object_class = G_OBJECT_CLASS (class);
- object_class->constructor = composer_header_constructor;
object_class->set_property = composer_header_set_property;
object_class->get_property = composer_header_get_property;
object_class->dispose = composer_header_dispose;
+ object_class->constructed = composer_header_constructed;
g_object_class_install_property (
object_class,
@@ -250,6 +279,18 @@ e_composer_header_class_init (EComposerHeaderClass *class)
g_object_class_install_property (
object_class,
+ PROP_REGISTRY,
+ g_param_spec_object (
+ "registry",
+ NULL,
+ NULL,
+ E_TYPE_SOURCE_REGISTRY,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (
+ object_class,
PROP_SENSITIVE,
g_param_spec_boolean (
"sensitive",
@@ -292,8 +333,7 @@ e_composer_header_class_init (EComposerHeaderClass *class)
static void
e_composer_header_init (EComposerHeader *header)
{
- header->priv = G_TYPE_INSTANCE_GET_PRIVATE (
- header, E_TYPE_COMPOSER_HEADER, EComposerHeaderPrivate);
+ header->priv = E_COMPOSER_HEADER_GET_PRIVATE (header);
}
gchar *
@@ -309,6 +349,14 @@ e_composer_header_get_label (EComposerHeader *header)
return label;
}
+ESourceRegistry *
+e_composer_header_get_registry (EComposerHeader *header)
+{
+ g_return_val_if_fail (E_IS_COMPOSER_HEADER (header), NULL);
+
+ return header->priv->registry;
+}
+
gboolean
e_composer_header_get_sensitive (EComposerHeader *header)
{
@@ -344,20 +392,6 @@ e_composer_header_set_visible (EComposerHeader *header,
header->priv->visible = visible;
- if (header->priv->action_label) {
- if (!visible) {
- gtk_widget_show (header->priv->add_icon);
- gtk_widget_show (header->priv->show_label);
- gtk_widget_hide (header->priv->remove_icon);
- gtk_widget_hide (header->priv->hide_label);
- } else {
- gtk_widget_hide (header->priv->add_icon);
- gtk_widget_hide (header->priv->show_label);
- gtk_widget_show (header->priv->remove_icon);
- gtk_widget_show (header->priv->hide_label);
- }
- }
-
g_object_notify (G_OBJECT (header), "visible");
}
diff --git a/composer/e-composer-header.h b/composer/e-composer-header.h
index 08db97a..0c56cf9 100644
--- a/composer/e-composer-header.h
+++ b/composer/e-composer-header.h
@@ -19,6 +19,7 @@
#define E_COMPOSER_HEADER_H
#include <composer/e-composer-common.h>
+#include <libedataserver/e-source-registry.h>
/* Standard GObject macros */
#define E_TYPE_COMPOSER_HEADER \
@@ -62,6 +63,8 @@ struct _EComposerHeaderClass {
GType e_composer_header_get_type (void);
gchar * e_composer_header_get_label (EComposerHeader *header);
+ESourceRegistry *
+ e_composer_header_get_registry (EComposerHeader *header);
gboolean e_composer_header_get_sensitive (EComposerHeader *header);
void e_composer_header_set_sensitive (EComposerHeader *header,
gboolean sensitive);
diff --git a/composer/e-composer-name-header.c b/composer/e-composer-name-header.c
index b17cb4a..f493833 100644
--- a/composer/e-composer-name-header.c
+++ b/composer/e-composer-name-header.c
@@ -271,16 +271,18 @@ e_composer_name_header_init (EComposerNameHeader *header)
}
EComposerHeader *
-e_composer_name_header_new (const gchar *label,
+e_composer_name_header_new (ESourceRegistry *registry,
+ const gchar *label,
ENameSelector *name_selector)
{
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
g_return_val_if_fail (E_IS_NAME_SELECTOR (name_selector), NULL);
return g_object_new (
E_TYPE_COMPOSER_NAME_HEADER,
"label", label, "button", TRUE,
"name-selector", name_selector,
- NULL);
+ "registry", registry, NULL);
}
ENameSelector *
diff --git a/composer/e-composer-name-header.h b/composer/e-composer-name-header.h
index e2f5e00..cb4dc03 100644
--- a/composer/e-composer-name-header.h
+++ b/composer/e-composer-name-header.h
@@ -58,7 +58,8 @@ struct _EComposerNameHeaderClass {
};
GType e_composer_name_header_get_type (void);
-EComposerHeader * e_composer_name_header_new (const gchar *label,
+EComposerHeader * e_composer_name_header_new (ESourceRegistry *registry,
+ const gchar *label,
ENameSelector *name_selector);
ENameSelector * e_composer_name_header_get_name_selector
(EComposerNameHeader *header);
diff --git a/composer/e-composer-post-header.c b/composer/e-composer-post-header.c
index fd08c67..1b017d4 100644
--- a/composer/e-composer-post-header.c
+++ b/composer/e-composer-post-header.c
@@ -30,11 +30,11 @@
enum {
PROP_0,
- PROP_ACCOUNT
+ PROP_MAIL_ACCOUNT
};
struct _EComposerPostHeaderPrivate {
- EAccount *account;
+ ESource *mail_account;
gchar *base_url; /* derived from account */
gboolean custom;
};
@@ -73,6 +73,7 @@ composer_post_header_folder_name_to_string (EComposerPostHeader *header,
static void
composer_post_header_set_base_url (EComposerPostHeader *header)
{
+#if 0 /* ACCOUNT_MGMT */
EAccount *account = header->priv->account;
CamelURL *camel_url;
gchar *url;
@@ -93,6 +94,7 @@ composer_post_header_set_base_url (EComposerPostHeader *header)
g_free (header->priv->base_url);
header->priv->base_url = url;
+#endif /* ACCOUNT_MGMT */
}
static GList *
@@ -140,8 +142,8 @@ composer_post_header_set_property (GObject *object,
GParamSpec *pspec)
{
switch (property_id) {
- case PROP_ACCOUNT:
- e_composer_post_header_set_account (
+ case PROP_MAIL_ACCOUNT:
+ e_composer_post_header_set_mail_account (
E_COMPOSER_POST_HEADER (object),
g_value_get_object (value));
return;
@@ -157,9 +159,10 @@ composer_post_header_get_property (GObject *object,
GParamSpec *pspec)
{
switch (property_id) {
- case PROP_ACCOUNT:
+ case PROP_MAIL_ACCOUNT:
g_value_set_object (
- value, e_composer_post_header_get_account (
+ value,
+ e_composer_post_header_get_mail_account (
E_COMPOSER_POST_HEADER (object)));
return;
}
@@ -174,9 +177,9 @@ composer_post_header_dispose (GObject *object)
priv = E_COMPOSER_POST_HEADER (object)->priv;
- if (priv->account != NULL) {
- g_object_unref (priv->account);
- priv->account = NULL;
+ if (priv->mail_account != NULL) {
+ g_object_unref (priv->mail_account);
+ priv->mail_account = NULL;
}
/* Chain up to parent's dispose() method. */
@@ -237,12 +240,12 @@ e_composer_post_header_class_init (EComposerPostHeaderClass *class)
g_object_class_install_property (
object_class,
- PROP_ACCOUNT,
+ PROP_MAIL_ACCOUNT,
g_param_spec_object (
- "account",
+ "mail-account",
NULL,
NULL,
- E_TYPE_ACCOUNT,
+ E_TYPE_SOURCE,
G_PARAM_READWRITE));
}
@@ -255,51 +258,15 @@ e_composer_post_header_init (EComposerPostHeader *header)
}
EComposerHeader *
-e_composer_post_header_new (const gchar *label)
+e_composer_post_header_new (ESourceRegistry *registry,
+ const gchar *label)
{
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
+
return g_object_new (
E_TYPE_COMPOSER_POST_HEADER,
- "label", label, "button", TRUE, NULL);
-}
-
-EAccount *
-e_composer_post_header_get_account (EComposerPostHeader *header)
-{
- g_return_val_if_fail (E_IS_COMPOSER_POST_HEADER (header), NULL);
-
- return header->priv->account;
-}
-
-void
-e_composer_post_header_set_account (EComposerPostHeader *header,
- EAccount *account)
-{
- GList *folders = NULL;
-
- g_return_if_fail (E_IS_COMPOSER_POST_HEADER (header));
-
- if (account != NULL) {
- g_return_if_fail (E_IS_ACCOUNT (account));
- g_object_ref (account);
- }
-
- if (!header->priv->custom)
- folders = e_composer_post_header_get_folders (header);
-
- if (header->priv->account != NULL)
- g_object_unref (header->priv->account);
-
- header->priv->account = account;
- composer_post_header_set_base_url (header);
-
- /* Make folders relative to the new account. */
- if (!header->priv->custom) {
- e_composer_post_header_set_folders (header, folders);
- g_list_foreach (folders, (GFunc) g_free, NULL);
- g_list_free (folders);
- }
-
- g_object_notify (G_OBJECT (header), "account");
+ "label", label, "button", TRUE,
+ "registry", registry, NULL);
}
GList *
@@ -383,3 +350,43 @@ e_composer_post_header_set_folders_base (EComposerPostHeader *header,
g_list_foreach (list, (GFunc) g_free, NULL);
g_list_free (list);
}
+
+ESource *
+e_composer_post_header_get_mail_account (EComposerPostHeader *header)
+{
+ g_return_val_if_fail (E_IS_COMPOSER_POST_HEADER (header), NULL);
+
+ return header->priv->mail_account;
+}
+
+void
+e_composer_post_header_set_mail_account (EComposerPostHeader *header,
+ ESource *mail_account)
+{
+ GList *folders = NULL;
+
+ g_return_if_fail (E_IS_COMPOSER_POST_HEADER (header));
+
+ if (mail_account != NULL) {
+ g_return_if_fail (E_IS_SOURCE (mail_account));
+ g_object_ref (mail_account);
+ }
+
+ if (!header->priv->custom)
+ folders = e_composer_post_header_get_folders (header);
+
+ if (header->priv->mail_account != NULL)
+ g_object_unref (header->priv->mail_account);
+
+ header->priv->mail_account = mail_account;
+ composer_post_header_set_base_url (header);
+
+ /* Make folders relative to the new account. */
+ if (!header->priv->custom) {
+ e_composer_post_header_set_folders (header, folders);
+ g_list_foreach (folders, (GFunc) g_free, NULL);
+ g_list_free (folders);
+ }
+
+ g_object_notify (G_OBJECT (header), "mail-account");
+}
diff --git a/composer/e-composer-post-header.h b/composer/e-composer-post-header.h
index c6fff3e..999f1eb 100644
--- a/composer/e-composer-post-header.h
+++ b/composer/e-composer-post-header.h
@@ -21,8 +21,6 @@
#ifndef E_COMPOSER_POST_HEADER_H
#define E_COMPOSER_POST_HEADER_H
-#include <libedataserver/e-account.h>
-
#include <composer/e-composer-text-header.h>
/* Standard GObject macros */
@@ -63,12 +61,8 @@ struct _EComposerPostHeaderClass {
GType e_composer_post_header_get_type (void);
EComposerHeader *
- e_composer_post_header_new (const gchar *label);
-EAccount * e_composer_post_header_get_account
- (EComposerPostHeader *header);
-void e_composer_post_header_set_account
- (EComposerPostHeader *header,
- EAccount *account);
+ e_composer_post_header_new (ESourceRegistry *registry,
+ const gchar *label);
GList * e_composer_post_header_get_folders
(EComposerPostHeader *header);
void e_composer_post_header_set_folders
@@ -78,6 +72,11 @@ void e_composer_post_header_set_folders_base
(EComposerPostHeader *header,
const gchar *base_url,
const gchar *folders);
+ESource * e_composer_post_header_get_mail_account
+ (EComposerPostHeader *header);
+void e_composer_post_header_set_mail_account
+ (EComposerPostHeader *header,
+ ESource *mail_account);
G_END_DECLS
diff --git a/composer/e-composer-private.c b/composer/e-composer-private.c
index 467d5c6..3547636 100644
--- a/composer/e-composer-private.c
+++ b/composer/e-composer-private.c
@@ -161,6 +161,7 @@ e_composer_private_constructed (EMsgComposer *composer)
EFocusTracker *focus_tracker;
EShell *shell;
EShellSettings *shell_settings;
+ ESourceRegistry *registry;
EWebView *web_view;
GtkhtmlEditor *editor;
GtkUIManager *ui_manager;
@@ -179,6 +180,7 @@ e_composer_private_constructed (EMsgComposer *composer)
ui_manager = gtkhtml_editor_get_ui_manager (editor);
shell = e_msg_composer_get_shell (composer);
+ registry = e_shell_get_registry (shell);
shell_settings = e_shell_get_shell_settings (shell);
web_view = e_msg_composer_get_web_view (composer);
small_screen_mode = e_shell_get_small_screen_mode (shell);
@@ -302,7 +304,7 @@ e_composer_private_constructed (EMsgComposer *composer)
/* Construct the header table. */
- widget = e_composer_header_table_new (shell);
+ widget = e_composer_header_table_new (shell, registry);
gtk_container_set_border_width (GTK_CONTAINER (widget), 6);
gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
if (small_screen_mode)
diff --git a/composer/e-composer-private.h b/composer/e-composer-private.h
index 6955109..16b2dc6 100644
--- a/composer/e-composer-private.h
+++ b/composer/e-composer-private.h
@@ -31,6 +31,10 @@
#include <glib/gi18n-lib.h>
#include <libebackend/e-extensible.h>
+#include <libedataserver/e-source-mail-composition.h>
+#include <libedataserver/e-source-mail-identity.h>
+#include <libedataserver/e-source-mail-submission.h>
+#include <libedataserver/e-source-openpgp.h>
#include "e-composer-actions.h"
#include "e-composer-activity.h"
@@ -48,9 +52,9 @@
#include "widgets/misc/e-attachment-icon-view.h"
#include "widgets/misc/e-attachment-paned.h"
#include "widgets/misc/e-attachment-store.h"
+#include "widgets/misc/e-mail-signature-combo-box.h"
#include "widgets/misc/e-picture-gallery.h"
#include "widgets/misc/e-preferences-window.h"
-#include "widgets/misc/e-signature-combo-box.h"
#include "widgets/misc/e-web-view.h"
#include "shell/e-shell.h"
diff --git a/composer/e-composer-text-header.c b/composer/e-composer-text-header.c
index 3927923..c8e955b 100644
--- a/composer/e-composer-text-header.c
+++ b/composer/e-composer-text-header.c
@@ -87,21 +87,27 @@ e_composer_text_header_init (EComposerTextHeader *header)
}
EComposerHeader *
-e_composer_text_header_new_label (const gchar *label)
+e_composer_text_header_new_label (ESourceRegistry *registry,
+ const gchar *label)
{
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
+
return g_object_new (
E_TYPE_COMPOSER_TEXT_HEADER,
"label", label, "button", FALSE,
- NULL);
+ "registry", registry, NULL);
}
EComposerHeader *
-e_composer_text_header_new_button (const gchar *label)
+e_composer_text_header_new_button (ESourceRegistry *registry,
+ const gchar *label)
{
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
+
return g_object_new (
E_TYPE_COMPOSER_TEXT_HEADER,
"label", label, "button", TRUE,
- NULL);
+ "registry", registry, NULL);
}
const gchar *
diff --git a/composer/e-composer-text-header.h b/composer/e-composer-text-header.h
index 860fcc3..51d3309 100644
--- a/composer/e-composer-text-header.h
+++ b/composer/e-composer-text-header.h
@@ -58,10 +58,12 @@ struct _EComposerTextHeaderClass {
GType e_composer_text_header_get_type (void);
EComposerHeader *
e_composer_text_header_new_label
- (const gchar *label);
+ (ESourceRegistry *registry,
+ const gchar *label);
EComposerHeader *
e_composer_text_header_new_button
- (const gchar *label);
+ (ESourceRegistry *registry,
+ const gchar *label);
const gchar * e_composer_text_header_get_text (EComposerTextHeader *header);
void e_composer_text_header_set_text (EComposerTextHeader *header,
const gchar *text);
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index daca277..41faf92 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -37,10 +37,8 @@
#include <ctype.h>
#include <fcntl.h>
-#include "e-util/e-account-utils.h"
#include "e-util/e-alert-dialog.h"
#include "e-util/e-dialog-utils.h"
-#include "e-util/e-signature-utils.h"
#include "e-util/e-util-private.h"
#include "em-format/em-format.h"
#include "em-format/em-format-quote.h"
@@ -56,7 +54,7 @@ struct _AsyncContext {
CamelDataWrapper *top_level_part;
CamelDataWrapper *text_plain_part;
- EAccount *account;
+ ESource *source;
CamelSession *session;
CamelInternetAddress *from;
@@ -151,8 +149,8 @@ async_context_free (AsyncContext *context)
if (context->text_plain_part != NULL)
g_object_unref (context->text_plain_part);
- if (context->account != NULL)
- g_object_unref (context->account);
+ if (context->source != NULL)
+ g_object_unref (context->source);
if (context->session != NULL)
g_object_unref (context->session);
@@ -505,27 +503,47 @@ build_message_headers (EMsgComposer *composer,
{
EComposerHeaderTable *table;
EComposerHeader *header;
- EAccount *account;
+ ESourceRegistry *registry;
+ ESource *source;
const gchar *subject;
const gchar *reply_to;
+ const gchar *uid;
g_return_if_fail (E_IS_MSG_COMPOSER (composer));
g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message));
table = e_msg_composer_get_header_table (composer);
+ registry = e_composer_header_table_get_registry (table);
+ uid = e_composer_header_table_get_identity_uid (table);
+ source = e_source_registry_lookup_by_uid (registry, uid);
+
/* Subject: */
subject = e_composer_header_table_get_subject (table);
camel_mime_message_set_subject (message, subject);
- account = e_composer_header_table_get_account (table);
- if (account != NULL) {
+ if (source != NULL) {
CamelMedium *medium;
CamelInternetAddress *addr;
+ ESourceMailIdentity *mi;
+ ESourceMailSubmission *ms;
+ const gchar *extension_name;
const gchar *header_name;
- const gchar *name = account->id->name;
- const gchar *address = account->id->address;
- gchar *transport_uid;
+ const gchar *name, *address;
+ const gchar *transport_uid;
+ const gchar *sent_folder;
+
+ extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY;
+ mi = e_source_get_extension (source, extension_name);
+
+ name = e_source_mail_identity_get_name (mi);
+ address = e_source_mail_identity_get_address (mi);
+
+ extension_name = E_SOURCE_EXTENSION_MAIL_SUBMISSION;
+ ms = e_source_get_extension (source, extension_name);
+
+ sent_folder = e_source_mail_submission_get_sent_folder (ms);
+ transport_uid = e_source_mail_submission_get_transport_uid (ms);
medium = CAMEL_MEDIUM (message);
@@ -544,18 +562,15 @@ build_message_headers (EMsgComposer *composer,
/* X-Evolution-Account */
header_name = "X-Evolution-Account";
- camel_medium_set_header (medium, header_name, account->uid);
+ camel_medium_set_header (medium, header_name, uid);
/* X-Evolution-Fcc */
header_name = "X-Evolution-Fcc";
- camel_medium_set_header (medium, header_name, account->sent_folder_uri);
+ camel_medium_set_header (medium, header_name, sent_folder);
/* X-Evolution-Transport */
header_name = "X-Evolution-Transport";
- transport_uid = g_strconcat (
- account->uid, "-transport", NULL);
camel_medium_set_header (medium, header_name, transport_uid);
- g_free (transport_uid);
}
/* Reply-To: */
@@ -662,6 +677,7 @@ composer_build_message_pgp (AsyncContext *context,
GCancellable *cancellable,
GError **error)
{
+#if 0 /* ACCOUNT_MGMT */
CamelCipherContext *cipher;
CamelDataWrapper *content;
CamelMimePart *mime_part;
@@ -778,6 +794,7 @@ composer_build_message_pgp (AsyncContext *context,
context->top_level_part = g_object_ref (content);
g_object_unref (mime_part);
+#endif /* ACCOUNT_MGMT */
return TRUE;
}
@@ -788,6 +805,7 @@ composer_build_message_smime (AsyncContext *context,
GCancellable *cancellable,
GError **error)
{
+#if 0 /* ACCOUNT_MGMT */
CamelCipherContext *cipher;
CamelMimePart *mime_part;
gboolean have_signing_certificate;
@@ -923,6 +941,7 @@ composer_build_message_smime (AsyncContext *context,
}
g_object_unref (mime_part);
+#endif /* ACCOUNT_MGMT */
return TRUE;
}
@@ -1023,7 +1042,12 @@ composer_build_message (EMsgComposer *composer,
EAttachmentStore *store;
EComposerHeaderTable *table;
CamelDataWrapper *html;
+ ESourceMailIdentity *mi;
+ ESourceRegistry *registry;
+ const gchar *extension_name;
const gchar *iconv_charset = NULL;
+ const gchar *identity_uid;
+ const gchar *organization;
CamelMultipart *body = NULL;
CamelContentType *type;
CamelSession *session;
@@ -1031,23 +1055,27 @@ composer_build_message (EMsgComposer *composer,
CamelStream *mem_stream;
CamelMimePart *part;
GByteArray *data;
- EAccount *account;
+ ESource *source;
gchar *charset;
gint i;
priv = composer->priv;
editor = GTKHTML_EDITOR (composer);
table = e_msg_composer_get_header_table (composer);
- account = e_composer_header_table_get_account (table);
view = e_msg_composer_get_attachment_view (composer);
store = e_attachment_view_get_store (view);
session = e_msg_composer_get_session (composer);
+ registry = e_composer_header_table_get_registry (table);
+ identity_uid = e_composer_header_table_get_identity_uid (table);
+ source = e_source_registry_lookup_by_uid (registry, identity_uid);
+ g_return_if_fail (source != NULL);
+
/* Do all the non-blocking work here, and defer
* any blocking operations to a separate thread. */
context = g_slice_new0 (AsyncContext);
- context->account = g_object_ref (account);
+ context->source = g_object_ref (source);
context->session = g_object_ref (session);
context->from = e_msg_composer_get_from (composer);
@@ -1098,12 +1126,17 @@ composer_build_message (EMsgComposer *composer,
priv->extra_hdr_values->pdata[i]);
}
+ extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY;
+ mi = e_source_get_extension (source, extension_name);
+ organization = e_source_mail_identity_get_organization (mi);
+
/* Disposition-Notification-To */
if (flags & COMPOSER_FLAG_REQUEST_READ_RECEIPT) {
- gchar *mdn_address = account->id->reply_to;
+ const gchar *mdn_address;
+ mdn_address = e_source_mail_identity_get_reply_to (mi);
if (mdn_address == NULL || *mdn_address == '\0')
- mdn_address = account->id->address;
+ mdn_address = e_source_mail_identity_get_address (mi);
camel_medium_add_header (
CAMEL_MEDIUM (context->message),
@@ -1117,15 +1150,15 @@ composer_build_message (EMsgComposer *composer,
"X-Priority", "1");
/* Organization */
- if (account != NULL && account->id->organization != NULL) {
- gchar *organization;
+ if (organization != NULL && *organization != '\0') {
+ gchar *encoded_organization;
- organization = camel_header_encode_string (
- (const guchar *) account->id->organization);
+ encoded_organization = camel_header_encode_string (
+ (const guchar *) organization);
camel_medium_set_header (
CAMEL_MEDIUM (context->message),
- "Organization", organization);
- g_free (organization);
+ "Organization", encoded_organization);
+ g_free (encoded_organization);
}
/* X-Evolution-Format */
@@ -1389,6 +1422,7 @@ composer_build_message_finish (EMsgComposer *composer,
/* Signatures */
+#if 0 /* ACCOUNT_MGMT */
static gchar *
encode_signature_uid (ESignature *signature)
{
@@ -1436,6 +1470,7 @@ encode_signature_uid (ESignature *signature)
return ename;
}
+#endif /* ACCONT_MGMT */
static gchar *
decode_signature_name (const gchar *name)
@@ -1527,9 +1562,59 @@ add_signature_delim (EMsgComposer *composer)
" key=\"signature_name\" " \
" value=\"uid:Noname\">--><BR>"
+static void
+generate_signature (EMsgComposer *composer,
+ GString *string)
+{
+#if 0 /* ACCOUNT_MGMT */
+ ESource *source;
+ EComposerHeaderTable *table;
+ ESourceMailIdentity *mail_identity;
+ const gchar *extension_name;
+ const gchar *value;
+ gchar *html_value;
+
+ table = e_msg_composer_get_header_table (composer);
+ source = e_composer_header_table_get_mail_identity (table);
+
+ extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY;
+ mail_identity = e_source_get_extension (source, extension_name);
+
+ value = e_source_mail_identity_get_name (mail_identity);
+ if (value != NULL)
+ html_value = camel_text_to_html (value, CONVERT_SPACES, 0);
+ else
+ html_value = NULL;
+ if (html_value != NULL && *html_value != '\0')
+ g_string_append (string, html_value);
+ g_free (html_value);
+
+ value = e_source_mail_identity_get_address (mail_identity);
+ if (value != NULL)
+ html_value = camel_text_to_html (value, CONVERT_SPACES, 0);
+ else
+ html_value = NULL;
+ if (html_value != NULL && *html_value != '\0')
+ g_string_append_printf (
+ string, " <<A HREF=\"mailto:%s\">%s</A>>",
+ html_value, html_value);
+ g_free (html_value);
+
+ value = e_source_mail_identity_get_organization (mail_identity);
+ if (value != NULL)
+ html_value = camel_text_to_html (value, CONVERT_SPACES, 0);
+ else
+ html_value = NULL;
+ if (html_value != NULL && *html_value != '\0')
+ g_string_append_printf (string, "<BR>%s", html_value);
+ g_free (html_value);
+#endif /* ACCOUNT_MGMT */
+}
+
static gchar *
get_signature_html (EMsgComposer *composer)
{
+#if 0 /* ACCOUNT_MGMT */
EComposerHeaderTable *table;
gchar *text = NULL, *html = NULL;
ESignature *signature;
@@ -1557,40 +1642,16 @@ get_signature_html (EMsgComposer *composer)
else
text = e_read_signature_file (signature, TRUE, NULL);
} else {
- EAccount *account;
- EAccountIdentity *id;
- gchar *organization = NULL;
- gchar *address = NULL;
- gchar *name = NULL;
+ GString *string;
- account = e_composer_header_table_get_account (table);
- if (!account)
- return NULL;
+ string = g_string_sized_new (256);
+
+ if (add_delim)
+ g_string_append (string, "-- \n<BR>");
+
+ generate_signature (composer, string);
- id = account->id;
- if (id->address != NULL)
- address = camel_text_to_html (
- id->address, CONVERT_SPACES, 0);
- if (id->name != NULL)
- name = camel_text_to_html (
- id->name, CONVERT_SPACES, 0);
- if (id->organization != NULL)
- organization = camel_text_to_html (
- id->organization, CONVERT_SPACES, 0);
-
- text = g_strdup_printf ("%s%s%s%s%s%s%s%s%s",
- add_delim ? "-- \n<BR>" : "",
- name ? name : "",
- (address && *address) ? " <<A HREF=\"mailto:" : "",
- address ? address : "",
- (address && *address) ? "\">" : "",
- address ? address : "",
- (address && *address) ? "</A>>" : "",
- (organization && *organization) ? "<BR>" : "",
- organization ? organization : "");
- g_free (address);
- g_free (name);
- g_free (organization);
+ text = g_string_free (string, FALSE);
format_html = TRUE;
}
@@ -1632,6 +1693,9 @@ get_signature_html (EMsgComposer *composer)
}
return text;
+#endif /* ACCOUNT_MGMT */
+
+ return NULL;
}
static void
@@ -1703,43 +1767,56 @@ msg_composer_subject_changed_cb (EMsgComposer *composer)
}
static void
-msg_composer_account_changed_cb (EMsgComposer *composer)
+msg_composer_mail_identity_changed_cb (EMsgComposer *composer)
{
EMsgComposerPrivate *p = composer->priv;
+ ESourceRegistry *registry;
+ ESourceMailComposition *mc;
+ ESourceMailIdentity *mi;
+ ESourceOpenPGP *pgp;
EComposerHeaderTable *table;
GtkToggleAction *action;
- ESignature *signature;
- EAccount *account;
- gboolean active, can_sign;
+ ESource *source;
+ gboolean active;
+ gboolean can_sign;
+ gboolean pgp_sign;
+ const gchar *extension_name;
const gchar *uid;
table = e_msg_composer_get_header_table (composer);
- account = e_composer_header_table_get_account (table);
+ registry = e_composer_header_table_get_registry (table);
+ uid = e_composer_header_table_get_identity_uid (table);
+ source = e_source_registry_lookup_by_uid (registry, uid);
+ g_return_if_fail (source != NULL);
- if (account == NULL) {
- e_msg_composer_show_sig_file (composer);
- return;
- }
+ extension_name = E_SOURCE_EXTENSION_MAIL_COMPOSITION;
+ mc = e_source_get_extension (source, extension_name);
- can_sign = (!account->pgp_no_imip_sign || p->mime_type == NULL ||
- g_ascii_strncasecmp (p->mime_type, "text/calendar", 13) != 0);
+ extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY;
+ mi = e_source_get_extension (source, extension_name);
+
+ extension_name = E_SOURCE_EXTENSION_OPENPGP;
+ pgp = e_source_get_extension (source, extension_name);
+ pgp_sign = e_source_openpgp_get_sign_by_default (pgp);
+
+ can_sign =
+ (p->mime_type == NULL) ||
+ e_source_mail_composition_get_sign_imip (mc) ||
+ (g_ascii_strncasecmp (p->mime_type, "text/calendar", 13) != 0);
action = GTK_TOGGLE_ACTION (ACTION (PGP_SIGN));
- active = account->pgp_always_sign && can_sign;
- gtk_toggle_action_set_active (action, active);
+ gtk_toggle_action_set_active (action, can_sign && pgp_sign);
action = GTK_TOGGLE_ACTION (ACTION (SMIME_SIGN));
- active = account->smime_sign_default && can_sign;
+ active = can_sign && e_source_mail_composition_get_smime_sign (mc);
gtk_toggle_action_set_active (action, active);
action = GTK_TOGGLE_ACTION (ACTION (SMIME_ENCRYPT));
- active = account->smime_encrypt_default;
+ active = e_source_mail_composition_get_smime_encrypt (mc);
gtk_toggle_action_set_active (action, active);
- uid = account->id->sig_uid;
- signature = uid ? e_get_signature_by_uid (uid) : NULL;
- e_composer_header_table_set_signature (table, signature);
- e_msg_composer_show_sig_file (composer);
+ uid = e_source_mail_identity_get_signature_uid (mi);
+ e_composer_header_table_set_signature_uid (table, uid);
}
static void
@@ -2145,14 +2222,6 @@ msg_composer_constructed (GObject *object)
/* Configure Headers */
- e_composer_header_table_set_account_list (
- table, e_get_account_list ());
- e_composer_header_table_set_signature_list (
- table, e_get_signature_list ());
-
- g_signal_connect_swapped (
- table, "notify::account",
- G_CALLBACK (msg_composer_account_changed_cb), composer);
g_signal_connect_swapped (
table, "notify::destinations-bcc",
G_CALLBACK (msg_composer_notify_header_cb), composer);
@@ -2163,6 +2232,9 @@ msg_composer_constructed (GObject *object)
table, "notify::destinations-to",
G_CALLBACK (msg_composer_notify_header_cb), composer);
g_signal_connect_swapped (
+ table, "notify::mail-identity",
+ G_CALLBACK (msg_composer_mail_identity_changed_cb), composer);
+ g_signal_connect_swapped (
table, "notify::reply-to",
G_CALLBACK (msg_composer_notify_header_cb), composer);
g_signal_connect_swapped (
@@ -2175,7 +2247,7 @@ msg_composer_constructed (GObject *object)
table, "notify::subject",
G_CALLBACK (msg_composer_notify_header_cb), composer);
- msg_composer_account_changed_cb (composer);
+ msg_composer_mail_identity_changed_cb (composer);
/* Attachments */
@@ -3099,6 +3171,7 @@ handle_multipart (EMsgComposer *composer,
static void
set_signature_gui (EMsgComposer *composer)
{
+#if 0 /* ACCOUNT_MGMT */
GtkhtmlEditor *editor;
EComposerHeaderTable *table;
ESignature *signature = NULL;
@@ -3123,6 +3196,7 @@ set_signature_gui (EMsgComposer *composer)
}
e_composer_header_table_set_signature (table, signature);
+#endif /* ACCOUNT_MGMT */
}
/**
@@ -3141,6 +3215,7 @@ e_msg_composer_new_with_message (EShell *shell,
CamelMimeMessage *message,
GCancellable *cancellable)
{
+#if 0 /* ACCOUNT_MGMT */
CamelInternetAddress *to, *cc, *bcc;
GList *To = NULL, *Cc = NULL, *Bcc = NULL, *postto = NULL;
const gchar *format, *subject;
@@ -3150,12 +3225,12 @@ e_msg_composer_new_with_message (EShell *shell,
struct _camel_header_raw *headers;
CamelDataWrapper *content;
EAccount *account = NULL;
- gchar *account_name;
EMsgComposer *composer;
EMsgComposerPrivate *priv;
EComposerHeaderTable *table;
GtkToggleAction *action;
struct _camel_header_raw *xev;
+ gchar *identity_uid;
gint len, i;
g_return_val_if_fail (E_IS_SHELL (shell), NULL);
@@ -3183,23 +3258,11 @@ e_msg_composer_new_with_message (EShell *shell,
postto = NULL;
}
- /* Restore the Account preference */
- account_name = (gchar *) camel_medium_get_header (
- CAMEL_MEDIUM (message), "X-Evolution-Account");
- if (account_name) {
- account_name = g_strdup (account_name);
- g_strstrip (account_name);
-
- account = e_get_account_by_uid (account_name);
- if (account == NULL)
- /* XXX Backwards compatibility */
- account = e_get_account_by_name (account_name);
-
- if (account != NULL) {
- g_free (account_name);
- account_name = g_strdup (account->name);
- }
- }
+ /* Restore the mail identity preference. */
+ identity_uid = (gchar *) camel_medium_get_header (
+ CAMEL_MEDIUM (message), "X-Evolution-Identity");
+ if (identity_uid != NULL)
+ identity_uid = g_strstrip (g_strdup (identity_uid));
if (postto == NULL) {
auto_cc = g_hash_table_new_full (
@@ -3318,13 +3381,13 @@ e_msg_composer_new_with_message (EShell *shell,
subject = camel_mime_message_get_subject (message);
- e_composer_header_table_set_account_name (table, account_name);
+ e_composer_header_table_set_identity_uid (table, identity_uid);
e_composer_header_table_set_destinations_to (table, Tov);
e_composer_header_table_set_destinations_cc (table, Ccv);
e_composer_header_table_set_destinations_bcc (table, Bccv);
e_composer_header_table_set_subject (table, subject);
- g_free (account_name);
+ g_free (identity_uid);
e_destination_freev (Tov);
e_destination_freev (Ccv);
@@ -3464,6 +3527,9 @@ e_msg_composer_new_with_message (EShell *shell,
set_signature_gui (composer);
return composer;
+#endif /* ACCOUNT_MGMT */
+
+ return NULL;
}
/**
@@ -3478,7 +3544,7 @@ e_msg_composer_new_with_message (EShell *shell,
EMsgComposer *
e_msg_composer_new_redirect (EShell *shell,
CamelMimeMessage *message,
- const gchar *resent_from,
+ const gchar *identity_uid,
GCancellable *cancellable)
{
EMsgComposer *composer;
@@ -3498,7 +3564,7 @@ e_msg_composer_new_redirect (EShell *shell,
composer->priv->redirect = message;
g_object_ref (message);
- e_composer_header_table_set_account_name (table, resent_from);
+ e_composer_header_table_set_identity_uid (table, identity_uid);
e_composer_header_table_set_subject (table, subject);
web_view = e_msg_composer_get_web_view (composer);
@@ -4269,6 +4335,7 @@ e_msg_composer_set_body (EMsgComposer *composer,
g_free (p->mime_type);
p->mime_type = g_strdup (mime_type);
+#if 0 /* ACCOUNT_MGMT */
if (g_ascii_strncasecmp (p->mime_type, "text/calendar", 13) == 0) {
EAccount *account;
@@ -4283,6 +4350,7 @@ e_msg_composer_set_body (EMsgComposer *composer,
gtk_toggle_action_set_active (action, FALSE);
}
}
+#endif /* ACCOUNT_MGMT */
}
/**
@@ -4844,23 +4912,34 @@ e_msg_composer_show_sig_file (EMsgComposer *composer)
CamelInternetAddress *
e_msg_composer_get_from (EMsgComposer *composer)
{
- CamelInternetAddress *address;
+ ESourceMailIdentity *mail_identity;
+ CamelInternetAddress *inet_address;
EComposerHeaderTable *table;
- EAccount *account;
+ ESourceRegistry *registry;
+ ESource *source;
+ const gchar *extension_name;
+ const gchar *name, *address;
+ const gchar *uid;
g_return_val_if_fail (E_IS_MSG_COMPOSER (composer), NULL);
table = e_msg_composer_get_header_table (composer);
- account = e_composer_header_table_get_account (table);
- if (account == NULL)
- return NULL;
+ registry = e_composer_header_table_get_registry (table);
+ uid = e_composer_header_table_get_identity_uid (table);
+ source = e_source_registry_lookup_by_uid (registry, uid);
+ g_return_val_if_fail (source != NULL, NULL);
- address = camel_internet_address_new ();
- camel_internet_address_add (
- address, account->id->name, account->id->address);
+ extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY;
+ mail_identity = e_source_get_extension (source, extension_name);
- return address;
+ name = e_source_mail_identity_get_name (mail_identity);
+ address = e_source_mail_identity_get_address (mail_identity);
+
+ inet_address = camel_internet_address_new ();
+ camel_internet_address_add (inet_address, name, address);
+
+ return inet_address;
}
CamelInternetAddress *
@@ -4880,8 +4959,8 @@ e_msg_composer_get_reply_to (EMsgComposer *composer)
address = camel_internet_address_new ();
if (camel_address_unformat (CAMEL_ADDRESS (address), reply_to) == -1) {
- g_object_unref (CAMEL_OBJECT (address));
- return NULL;
+ g_object_unref (address);
+ address = NULL;
}
return address;
diff --git a/composer/e-msg-composer.h b/composer/e-msg-composer.h
index 258d260..30ad7222 100644
--- a/composer/e-msg-composer.h
+++ b/composer/e-msg-composer.h
@@ -25,7 +25,6 @@
#define E_MSG_COMPOSER_H
#include <camel/camel.h>
-#include <libedataserver/e-account.h>
#include <libebook/e-destination.h>
#include <gtkhtml-editor.h>
#include <misc/e-attachment-view.h>
@@ -94,7 +93,7 @@ EMsgComposer * e_msg_composer_new_from_url (EShell *shell,
const gchar *url);
EMsgComposer * e_msg_composer_new_redirect (EShell *shell,
CamelMimeMessage *message,
- const gchar *resent_from,
+ const gchar *identity_uid,
GCancellable *cancellable);
EFocusTracker * e_msg_composer_get_focus_tracker
(EMsgComposer *composer);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]