From 4411abeea0a417a69130a268eb7c89fd9d08e73a Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Tue, 27 Nov 2012 14:18:19 +0100 Subject: Bug #671200 - Inherit source message crypto options when reply on selection --- mail/e-mail-reader-utils.c | 57 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/mail/e-mail-reader-utils.c b/mail/e-mail-reader-utils.c index 4ce1afbbb3..3cb8767506 100644 --- a/mail/e-mail-reader-utils.c +++ b/mail/e-mail-reader-utils.c @@ -42,6 +42,8 @@ #include #include +#include "composer/e-composer-actions.h" + #include "mail/e-mail-backend.h" #include "mail/e-mail-browser.h" #include "mail/e-mail-printer.h" @@ -1334,6 +1336,8 @@ e_mail_reader_reply_to_message (EMailReader *reader, gint length; gchar *mail_uri; CamelObjectBag *registry; + EMsgComposer *composer; + guint32 validity_pgp_sum = 0, validity_smime_sum = 0; /* This handles quoting only selected text in the reply. If * nothing is selected or only whitespace is selected, fall @@ -1388,8 +1392,30 @@ e_mail_reader_reply_to_message (EMailReader *reader, part_list = camel_object_bag_get (registry, mail_uri); g_free (mail_uri); - if (!part_list) + if (!part_list) { goto whole_message; + } else { + GSList *piter; + + for (piter = part_list->list; piter; piter = piter->next) { + EMailPart *part = piter->data; + + if (part && part->validities) { + GSList *viter; + + for (viter = part->validities; viter; viter = viter->next) { + EMailPartValidityPair *vpair = viter->data; + + if (vpair) { + if ((vpair->validity_type & E_MAIL_PART_VALIDITY_PGP) != 0) + validity_pgp_sum |= vpair->validity_type; + if ((vpair->validity_type & E_MAIL_PART_VALIDITY_SMIME) != 0) + validity_smime_sum |= vpair->validity_type; + } + } + } + } + } if (src_message == NULL) { src_message = part_list->message; @@ -1439,9 +1465,36 @@ e_mail_reader_reply_to_message (EMailReader *reader, g_object_unref (src_message); - em_utils_reply_to_message ( + composer = em_utils_reply_to_message ( shell, new_message, folder, uid, reply_type, reply_style, NULL, address); + if (composer && (validity_pgp_sum != 0 || validity_smime_sum != 0)) { + GtkToggleAction *action; + + if ((validity_pgp_sum & E_MAIL_PART_VALIDITY_PGP) != 0) { + if ((validity_pgp_sum & E_MAIL_PART_VALIDITY_SIGNED) != 0) { + action = GTK_TOGGLE_ACTION (E_COMPOSER_ACTION_PGP_SIGN (composer)); + gtk_toggle_action_set_active (action, TRUE); + } + + if ((validity_pgp_sum & E_MAIL_PART_VALIDITY_ENCRYPTED) != 0) { + action = GTK_TOGGLE_ACTION (E_COMPOSER_ACTION_PGP_ENCRYPT (composer)); + gtk_toggle_action_set_active (action, TRUE); + } + } + + if ((validity_smime_sum & E_MAIL_PART_VALIDITY_SMIME) != 0) { + if ((validity_smime_sum & E_MAIL_PART_VALIDITY_SIGNED) != 0) { + action = GTK_TOGGLE_ACTION (E_COMPOSER_ACTION_SMIME_SIGN (composer)); + gtk_toggle_action_set_active (action, TRUE); + } + + if ((validity_smime_sum & E_MAIL_PART_VALIDITY_ENCRYPTED) != 0) { + action = GTK_TOGGLE_ACTION (E_COMPOSER_ACTION_SMIME_ENCRYPT (composer)); + gtk_toggle_action_set_active (action, TRUE); + } + } + } if (address) g_object_unref (address); -- cgit v1.2.3