aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libemail-engine/e-mail-session-utils.c11
-rw-r--r--libemail-engine/mail-ops.c11
-rw-r--r--mail/em-composer-utils.c55
3 files changed, 63 insertions, 14 deletions
diff --git a/libemail-engine/e-mail-session-utils.c b/libemail-engine/e-mail-session-utils.c
index 33e7effa47..7ec3ca3a70 100644
--- a/libemail-engine/e-mail-session-utils.c
+++ b/libemail-engine/e-mail-session-utils.c
@@ -863,10 +863,13 @@ e_mail_session_send_to (EMailSession *session,
transport_uid = g_strstrip (g_strdup (string));
if (replies_to_origin_folder) {
- string = camel_header_raw_find (&xev, "X-Evolution-Source-Folder", NULL);
- if (string != NULL && camel_header_raw_find (&xev, "X-Evolution-Source-Message", NULL) != NULL) {
- g_free (sent_folder_uri);
- sent_folder_uri = g_strstrip (g_strdup (string));
+ string = camel_header_raw_find (&xev, "X-Evolution-Source-Flags", NULL);
+ if (string != NULL && strstr (string, "FORWARDED") == NULL) {
+ string = camel_header_raw_find (&xev, "X-Evolution-Source-Folder", NULL);
+ if (string != NULL && camel_header_raw_find (&xev, "X-Evolution-Source-Message", NULL) != NULL) {
+ g_free (sent_folder_uri);
+ sent_folder_uri = g_strstrip (g_strdup (string));
+ }
}
}
diff --git a/libemail-engine/mail-ops.c b/libemail-engine/mail-ops.c
index e24e8c9752..748152602c 100644
--- a/libemail-engine/mail-ops.c
+++ b/libemail-engine/mail-ops.c
@@ -623,10 +623,13 @@ mail_send_message (struct _send_queue_msg *m,
sent_folder_uri = g_strstrip (g_strdup (tmp));
if (replies_to_origin_folder) {
- tmp = camel_header_raw_find (&xev, "X-Evolution-Source-Folder", NULL);
- if (tmp != NULL && camel_header_raw_find (&xev, "X-Evolution-Source-Message", NULL) != NULL) {
- g_free (sent_folder_uri);
- sent_folder_uri = g_strstrip (g_strdup (tmp));
+ tmp = camel_header_raw_find (&xev, "X-Evolution-Source-Flags", NULL);
+ if (tmp != NULL && strstr (tmp, "FORWARDED") == NULL) {
+ tmp = camel_header_raw_find (&xev, "X-Evolution-Source-Folder", NULL);
+ if (tmp != NULL && camel_header_raw_find (&xev, "X-Evolution-Source-Message", NULL) != NULL) {
+ g_free (sent_folder_uri);
+ sent_folder_uri = g_strstrip (g_strdup (tmp));
+ }
}
}
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index 28b1962002..b97883061b 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -1563,6 +1563,47 @@ emu_update_composers_security (EMsgComposer *composer,
}
static void
+get_real_folder_uri_and_message_uid (CamelFolder *folder,
+ const gchar *uid,
+ gchar **folder_uri,
+ gchar **message_uid)
+{
+ g_return_if_fail (folder != NULL);
+ g_return_if_fail (uid != NULL);
+ g_return_if_fail (folder_uri != NULL);
+ g_return_if_fail (message_uid != NULL);
+
+ if (CAMEL_IS_VEE_FOLDER (folder)) {
+ CamelMessageInfo *mi;
+
+ mi = camel_folder_get_message_info (folder, uid);
+ if (mi) {
+ CamelFolder *real_folder;
+ gchar *real_uid = NULL;
+
+ real_folder = camel_vee_folder_get_location (
+ CAMEL_VEE_FOLDER (folder),
+ (CamelVeeMessageInfo *) mi,
+ &real_uid);
+
+ if (real_folder) {
+ *folder_uri = e_mail_folder_uri_from_folder (real_folder);
+ *message_uid = real_uid;
+
+ camel_folder_free_message_info (folder, mi);
+
+ return;
+ }
+
+ camel_folder_free_message_info (folder, mi);
+ }
+ }
+
+ *folder_uri = e_mail_folder_uri_from_folder (folder);
+ *message_uid = g_strdup (uid);
+}
+
+static void
real_update_forwarded_flag (gpointer uid,
gpointer folder)
{
@@ -1721,15 +1762,16 @@ forward_non_attached (EShell *shell,
e_msg_composer_set_body_text (composer, text, TRUE);
if (uid != NULL) {
- gchar *folder_uri;
+ gchar *folder_uri = NULL, *tmp_message_uid = NULL;
- folder_uri = e_mail_folder_uri_from_folder (folder);
+ get_real_folder_uri_and_message_uid (folder, uid, &folder_uri, &tmp_message_uid);
e_msg_composer_set_source_headers (
- composer, folder_uri, uid,
+ composer, folder_uri, tmp_message_uid,
CAMEL_MESSAGE_FORWARDED);
g_free (folder_uri);
+ g_free (tmp_message_uid);
}
emu_update_composers_security (
@@ -2952,14 +2994,15 @@ em_utils_reply_to_message (EShell *shell,
composer_set_body (composer, message, style, parts_list);
if (folder != NULL) {
- gchar *folder_uri;
+ gchar *folder_uri = NULL, *tmp_message_uid = NULL;
- folder_uri = e_mail_folder_uri_from_folder (folder);
+ get_real_folder_uri_and_message_uid (folder, message_uid, &folder_uri, &tmp_message_uid);
e_msg_composer_set_source_headers (
- composer, folder_uri, message_uid, flags);
+ composer, folder_uri, tmp_message_uid, flags);
g_free (folder_uri);
+ g_free (tmp_message_uid);
}
composer_set_no_change (composer);