aboutsummaryrefslogtreecommitdiffstats
path: root/mail/em-folder-properties.c
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2013-10-08 19:22:48 +0800
committerMilan Crha <mcrha@redhat.com>2013-10-08 19:22:48 +0800
commitb5023d32bdffdeb6cb626e74d0f3e464e66cec1b (patch)
tree3257d3e4755641f99a10b9ba58779f32c82fe428 /mail/em-folder-properties.c
parent8099b68e96a85857e41784d6e128d4ff69e2e702 (diff)
downloadgsoc2013-evolution-b5023d32bdffdeb6cb626e74d0f3e464e66cec1b.tar
gsoc2013-evolution-b5023d32bdffdeb6cb626e74d0f3e464e66cec1b.tar.gz
gsoc2013-evolution-b5023d32bdffdeb6cb626e74d0f3e464e66cec1b.tar.bz2
gsoc2013-evolution-b5023d32bdffdeb6cb626e74d0f3e464e66cec1b.tar.lz
gsoc2013-evolution-b5023d32bdffdeb6cb626e74d0f3e464e66cec1b.tar.xz
gsoc2013-evolution-b5023d32bdffdeb6cb626e74d0f3e464e66cec1b.tar.zst
gsoc2013-evolution-b5023d32bdffdeb6cb626e74d0f3e464e66cec1b.zip
Bug #215115 - Per-folder From: email address
The change also allows setting accounts for certain recipients (based on a part of the recipient address). The option can be found in Folder Properties and in Edit->Preferences->Composer Preferences->Send Account.
Diffstat (limited to 'mail/em-folder-properties.c')
-rw-r--r--mail/em-folder-properties.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/mail/em-folder-properties.c b/mail/em-folder-properties.c
index d50888fea9..b56dffb4bf 100644
--- a/mail/em-folder-properties.c
+++ b/mail/em-folder-properties.c
@@ -31,10 +31,14 @@
#include <gtk/gtk.h>
#include <glib/gi18n.h>
+#include <shell/e-shell.h>
+
#include <libemail-engine/e-mail-folder-utils.h>
#include <libemail-engine/mail-mt.h>
#include <libemail-engine/mail-ops.h>
+#include <e-util/e-util.h>
+
#include "e-mail-backend.h"
#include "e-mail-ui-session.h"
#include "em-config.h"
@@ -77,6 +81,25 @@ emfp_free (EConfig *ec,
g_slist_free (items);
}
+static void
+mail_identity_combo_box_changed_cb (GtkComboBox *combo_box,
+ EMailSendAccountOverride *account_override)
+{
+ const gchar *active_id, *folder_uri;
+
+ g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
+ g_return_if_fail (E_IS_MAIL_SEND_ACCOUNT_OVERRIDE (account_override));
+
+ folder_uri = g_object_get_data (G_OBJECT (combo_box), "sao-folder-uri");
+ g_return_if_fail (folder_uri != NULL);
+
+ active_id = gtk_combo_box_get_active_id (combo_box);
+ if (!active_id || !*active_id)
+ e_mail_send_account_override_remove_for_folder (account_override, folder_uri);
+ else
+ e_mail_send_account_override_set_for_folder (account_override, folder_uri, active_id);
+}
+
static gint
add_numbered_row (GtkTable *table,
gint row,
@@ -255,6 +278,56 @@ emfp_get_folder_item (EConfig *ec,
g_free (properties);
+ /* add send-account-override setting widgets */
+ if (context->folder != NULL) {
+ ESourceRegistry *registry;
+ EShell *shell;
+ EMailBackend *mail_backend;
+ EMailSendAccountOverride *account_override;
+ gchar *folder_uri, *account_uid;
+ GtkWidget *label;
+
+ registry = e_shell_get_registry (e_shell_get_default ());
+
+ label = gtk_label_new_with_mnemonic (_("_Send Account Override:"));
+ gtk_widget_set_halign (label, GTK_ALIGN_START);
+ gtk_widget_show (label);
+ gtk_table_attach (
+ GTK_TABLE (table), label,
+ 0, 2, row, row + 1,
+ GTK_FILL, 0, 0, 0);
+ row++;
+
+ widget = g_object_new (E_TYPE_MAIL_IDENTITY_COMBO_BOX,
+ "registry", registry,
+ "allow-none", TRUE,
+ NULL);
+ gtk_label_set_mnemonic_widget (GTK_LABEL (label), widget);
+ gtk_widget_set_margin_left (widget, 12);
+ gtk_widget_show (widget);
+ gtk_table_attach (
+ GTK_TABLE (table), widget,
+ 0, 2, row, row + 1,
+ GTK_FILL | GTK_EXPAND, 0, 0, 0);
+ row++;
+
+ shell = e_shell_get_default ();
+ mail_backend = E_MAIL_BACKEND (e_shell_get_backend_by_name (shell, "mail"));
+ g_return_val_if_fail (mail_backend != NULL, table);
+
+ account_override = e_mail_backend_get_send_account_override (mail_backend);
+ folder_uri = e_mail_folder_uri_from_folder (context->folder);
+ account_uid = e_mail_send_account_override_get_for_folder (account_override, folder_uri);
+
+ gtk_combo_box_set_active_id (GTK_COMBO_BOX (widget), account_uid ? account_uid : "");
+ g_object_set_data_full (G_OBJECT (widget), "sao-folder-uri", folder_uri, g_free);
+
+ g_signal_connect (widget, "changed",
+ G_CALLBACK (mail_identity_combo_box_changed_cb), account_override);
+
+ g_free (account_uid);
+ }
+
return table;
}