Do not try to handle quotes in text attachments.
authorAndrej Kacian <ticho@claws-mail.org>
Wed, 31 May 2017 18:38:59 +0000 (20:38 +0200)
committerAndrej Kacian <ticho@claws-mail.org>
Wed, 31 May 2017 18:38:59 +0000 (20:38 +0200)
Closes Bug 3824 - Quotation Folding is wrongly applied to text
attachments.

src/textview.c
src/textview.h

index 7372a1c..c9be5d8 100644 (file)
@@ -1074,6 +1074,7 @@ static void textview_write_body(TextView *textview, MimeInfo *mimeinfo)
        
        textview->is_in_signature = FALSE;
        textview->is_diff = FALSE;
+       textview->is_attachment = FALSE;;
 
        procmime_decode_content(mimeinfo);
 
@@ -1174,6 +1175,13 @@ textview_default:
                                || !g_ascii_strcasecmp(mimeinfo->subtype, "x-diff"))
                        textview->is_diff = TRUE;
 
+               /* Displayed part is an attachment, but not an attached
+                * e-mail. Set a flag, so that elsewhere in the code we
+                * know not to try making collapsible quotes in it. */
+               if (mimeinfo->disposition == DISPOSITIONTYPE_ATTACHMENT &&
+                               mimeinfo->type != MIMETYPE_MESSAGE)
+                       textview->is_attachment = TRUE;
+
                if (mimeinfo->content == MIMECONTENT_MEM)
                        tmpfp = str_open_as_stream(mimeinfo->data.mem);
                else
@@ -1597,7 +1605,8 @@ static void textview_write_line(TextView *textview, const gchar *str,
           >, foo>, _> ... ok, <foo>, foo bar>, foo-> ... ng
           Up to 3 levels of quotations are detected, and each
           level is colored using a different color. */
-       if (prefs_common.enable_color 
+       if (prefs_common.enable_color
+           && !textview->is_attachment
            && line_has_quote_char(buf, prefs_common.quote_chars)) {
                real_quotelevel = get_quote_level(buf, prefs_common.quote_chars);
                quotelevel = real_quotelevel;
@@ -1640,7 +1649,7 @@ static void textview_write_line(TextView *textview, const gchar *str,
                }
        }
 
-       if (real_quotelevel > -1 && do_quote_folding) {
+       if (!textview->is_attachment && real_quotelevel > -1 && do_quote_folding) {
                if (!g_utf8_validate(buf, -1, NULL)) {
                        gchar *utf8buf = NULL;
                        utf8buf = g_malloc(BUFFSIZE);
index 51b7643..35393a2 100644 (file)
@@ -66,6 +66,7 @@ struct _TextView
        gboolean default_text;
        gboolean is_in_signature;
        gboolean is_diff;
+       gboolean is_attachment;
        
        GSList *uri_list;
        gint body_pos;