diff options
Diffstat (limited to 'mail/em-folder-properties.c')
-rw-r--r-- | mail/em-folder-properties.c | 73 |
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; } |