diff options
author | Radek Doulik <rodo@src.gnome.org> | 2002-11-21 18:57:47 +0800 |
---|---|---|
committer | Radek Doulik <rodo@src.gnome.org> | 2002-11-21 18:57:47 +0800 |
commit | 6cde624508affa75a530fd92a5d6d2af167e59be (patch) | |
tree | 3ff0b4025ed41a52318d4943381e3d7537a3e49d /mail | |
parent | 4435bb12ec1286c40f71d2a41aa45c6bd1583442 (diff) | |
download | gsoc2013-evolution-6cde624508affa75a530fd92a5d6d2af167e59be.tar.gz gsoc2013-evolution-6cde624508affa75a530fd92a5d6d2af167e59be.tar.zst gsoc2013-evolution-6cde624508affa75a530fd92a5d6d2af167e59be.zip |
applied patches from http://bugzilla.ximian.com/show_bug.cgi?id=29588
svn path=/trunk/; revision=18877
Diffstat (limited to 'mail')
-rw-r--r-- | mail/ChangeLog | 13 | ||||
-rw-r--r-- | mail/mail-display.c | 25 | ||||
-rw-r--r-- | mail/mail-display.h | 3 | ||||
-rw-r--r-- | mail/mail-format.c | 88 |
4 files changed, 83 insertions, 46 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index 368a9c8a2f..00e9425362 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,16 @@ +2002-08-30 Radek Doulik <rodo@ximian.com> + + * mail-display.c (mail_display_render): don't set margins for raw + message view + + * mail-format.c (mail_format_raw_message): as below + (handle_text_plain_flowed): as below + (mail_format_raw_message): don't use data_urls + + * mail-display.c (mail_text_write): put text in iframe, so it has + margins and should not be placed in table which changes wrapping + behavior + 2002-11-20 Jeffrey Stedfast <fejj@ximian.com> * mail-composer-prefs.c (mail_composer_prefs_construct): gconfify. diff --git a/mail/mail-display.c b/mail/mail-display.c index c74a0f7b37..8fcefc3604 100644 --- a/mail/mail-display.c +++ b/mail/mail-display.c @@ -1646,8 +1646,13 @@ mail_display_redisplay_when_loaded (MailDisplay *md, } void -mail_text_write (GtkHTML *html, GtkHTMLStream *stream, gboolean printing, const char *text) +mail_text_write (GtkHTML *html, GtkHTMLStream *stream, MailDisplay *md, CamelMimePart *part, gint idx, gboolean printing, const char *text) { + GByteArray *ba; + gchar *xed, *iframe; + gchar *btt = "<tt>\n"; + gchar *ett = "</tt>\n"; + guint flags; char *htmltext; @@ -1661,10 +1666,17 @@ mail_text_write (GtkHTML *html, GtkHTMLStream *stream, gboolean printing, const htmltext = e_text_to_html_full (text, flags, mail_config_get_citation_color ()); - gtk_html_write (html, stream, "<tt>", 4); - gtk_html_write (html, stream, htmltext, strlen (htmltext)); - gtk_html_write (html, stream, "</tt>", 5); + ba = g_byte_array_new (); + g_byte_array_append (ba, (const guint8 *) btt, strlen (btt) + 1); + g_byte_array_append (ba, (const guint8 *) htmltext, strlen (htmltext) + 1); + g_byte_array_append (ba, (const guint8 *) ett, strlen (ett) + 1); g_free (htmltext); + + xed = g_strdup_printf ("x-evolution-data:%p-%d", part, idx); + iframe = g_strdup_printf ("<iframe src=\"%s\" frameborder=0 scrolling=no>could not get %s</iframe>", xed, xed); + mail_display_add_url (md, "data_urls", xed, ba); + gtk_html_write (html, stream, iframe, strlen (iframe)); + g_free (iframe); } void @@ -1710,7 +1722,10 @@ mail_display_render (MailDisplay *md, GtkHTML *html, gboolean reset_scroll) "<!doctype html public \"-//W3C//DTD HTML 4.0 TRANSITIONAL//EN\">\n" "<html>\n" "<head>\n<meta name=\"generator\" content=\"Evolution Mail Component\">\n</head>\n"); - mail_html_write (html, stream, "<body marginwidth=0 marginheight=0>\n"); + if (md->current_message && md->display_style == MAIL_CONFIG_DISPLAY_SOURCE) + mail_html_write (html, stream, "<body>\n"); + else + mail_html_write (html, stream, "<body marginwidth=0 marginheight=0>\n"); flag = md->info ? camel_tag_get (&md->info->user_tags, "follow-up") : NULL; completed = md->info ? camel_tag_get (&md->info->user_tags, "completed-on") : NULL; diff --git a/mail/mail-display.h b/mail/mail-display.h index bd27001150..c192d818c3 100644 --- a/mail/mail-display.h +++ b/mail/mail-display.h @@ -100,6 +100,9 @@ void mail_display_load_images (MailDisplay *mail_display); void mail_text_write (GtkHTML *html, GtkHTMLStream *stream, + MailDisplay *md, + CamelMimePart *part, + gint idx, gboolean printing, const char *text); void mail_error_printf (GtkHTML *html, diff --git a/mail/mail-format.c b/mail/mail-format.c index 26727a2db3..3104183efe 100644 --- a/mail/mail-format.c +++ b/mail/mail-format.c @@ -60,7 +60,7 @@ static char *try_inline_binhex (char *start, CamelMimePart *part, static gboolean handle_text_plain (CamelMimePart *part, const char *mime_type, MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); -static gboolean handle_text_plain_flowed (char *text, +static gboolean handle_text_plain_flowed (char *text, CamelMimePart *part, MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); static gboolean handle_text_enriched (CamelMimePart *part, const char *mime_type, @@ -196,21 +196,17 @@ mail_format_raw_message (CamelMimeMessage *mime_message, MailDisplay *md, TRUE, NULL, html, NULL)) return; - mail_html_write (html, stream, - "<table cellspacing=0 cellpadding=10 width=\"100%\"><tr><td><tt>\n"); - bytes = mail_format_get_data_wrapper_text (CAMEL_DATA_WRAPPER (mime_message), md); if (bytes) { g_byte_array_append (bytes, "", 1); html_str = e_text_to_html (bytes->data, E_TEXT_TO_HTML_CONVERT_NL | E_TEXT_TO_HTML_CONVERT_SPACES | E_TEXT_TO_HTML_ESCAPE_8BIT); g_byte_array_free (bytes, TRUE); - + mail_html_write (html, stream, "<tt>"); mail_html_write (html, stream, html_str); g_free (html_str); + mail_html_write (html, stream, "</tt>"); } - - mail_html_write (html, stream, "</tt></td></tr></table>"); } static const char * @@ -669,8 +665,8 @@ attachment_header (CamelMimePart *part, const char *mime_type, MailDisplay *md, } mail_html_write (html, stream, "</font></td></tr><tr>" - "<td height=10><table height=10 cellspacing=0 cellpadding=0>" - "<tr><td></td></tr></table></td></tr></table>\n"); + "<td height=10><table cellspacing=0 cellpadding=0>" + "<tr><td height=10><a name=\"glue\"></td></tr></table></td></tr></table>\n"); } static gboolean @@ -1002,7 +998,7 @@ write_headers (CamelMimeMessage *message, MailDisplay *md, stream, "<table width=\"100%%\" cellpadding=0 cellspacing=0>" /* Top margin */ - "<tr><td colspan=3 height=10><table height=10 cellpadding=0 cellspacing=0><tr><td></td></tr></table></td></tr>" + "<tr><td colspan=3 height=10><table cellpadding=0 cellspacing=0><tr><td height=10><a name=\"glue\"></td></tr></table></td></tr>" /* Left margin */ "<tr><td><table width=10 cellpadding=0 cellspacing=0><tr><td></td></tr></table></td>" /* Black border */ @@ -1190,18 +1186,13 @@ struct { static int num_specials = (sizeof (text_specials) / sizeof (text_specials[0])); static void -write_one_text_plain_chunk (const char *text, int len, GtkHTML *html, GtkHTMLStream *stream, gboolean printing) +write_one_text_plain_chunk (MailDisplay *md, CamelMimePart *part, gint idx, const char *text, int len, GtkHTML *html, GtkHTMLStream *stream, gboolean printing) { char *buf; - mail_html_write (html, stream, - "<table cellspacing=0 cellpadding=10 width=\"100%\"><tr><td>\n"); - buf = g_strndup (text, len); - mail_text_write (html, stream, printing, buf); + mail_text_write (html, stream, md, part, idx, printing, buf); g_free (buf); - - mail_html_write (html, stream, "</td></tr></table>\n"); } static gboolean @@ -1215,7 +1206,7 @@ handle_text_plain (CamelMimePart *part, const char *mime_type, char *p, *start, *text; const char *format; GByteArray *bytes; - int i; + int i, idx = 0; bytes = mail_format_get_data_wrapper_text (wrapper, md); if (!bytes) @@ -1239,7 +1230,7 @@ handle_text_plain (CamelMimePart *part, const char *mime_type, type = camel_mime_part_get_content_type (part); format = header_content_type_param (type, "format"); if (format && !g_strcasecmp (format, "flowed")) - return handle_text_plain_flowed (text, md, html, stream); + return handle_text_plain_flowed (text, part, md, html, stream); /* Only look for binhex and stuff if this is real text/plain. * (and not, say, application/mac-binhex40 that mail-identify @@ -1261,7 +1252,7 @@ handle_text_plain (CamelMimePart *part, const char *mime_type, /* Deal with special case */ if (start != p) - write_one_text_plain_chunk (p, start - p, html, stream, md->printing); + write_one_text_plain_chunk (md, part, idx ++, p, start - p, html, stream, md->printing); p = text_specials[i].handler (start, part, start - text, md, html, stream); if (p == start) { @@ -1275,13 +1266,13 @@ handle_text_plain (CamelMimePart *part, const char *mime_type, break; } p++; - write_one_text_plain_chunk (start, p - start, html, stream, md->printing); + write_one_text_plain_chunk (md, part, idx ++, start, p - start, html, stream, md->printing); } else if (p) write_hr (html, stream); } /* Finish up (or do the whole thing if there were no specials). */ if (p) - write_one_text_plain_chunk (p, strlen (p), html, stream, md->printing); + write_one_text_plain_chunk (md, part, idx ++, p, strlen (p), html, stream, md->printing); g_free (text); @@ -1289,15 +1280,16 @@ handle_text_plain (CamelMimePart *part, const char *mime_type, } static gboolean -handle_text_plain_flowed (char *buf, MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) +handle_text_plain_flowed (char *buf, CamelMimePart *part, MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) { char *text, *line, *eol, *p; int prevquoting = 0, quoting, len, br_pending = 0; guint32 citation_color = mail_config_get_citation_color (); - - mail_html_write (html, stream, - "\n<!-- text/plain, flowed -->\n" - "<table cellspacing=0 cellpadding=10 width=\"100%\"><tr><td>\n<tt>\n"); + GByteArray *ba; + gchar *iframe, *xed; + + ba = g_byte_array_new (); + g_byte_array_append (ba, "\n<!-- text/plain, flowed -->\n<tt>\n", 34); for (line = buf; *line; line = eol + 1) { /* Process next line */ @@ -1311,22 +1303,30 @@ handle_text_plain_flowed (char *buf, MailDisplay *md, GtkHTML *html, GtkHTMLStre if (quoting != prevquoting) { if (prevquoting == 0) { if (md->printing) - mail_html_write (html, stream, "<i>"); - else - gtk_html_stream_printf (stream, "<font color=\"#%06x\">", citation_color); + g_byte_array_append (ba, "<i>", 3); + else { + gchar num [7]; + g_byte_array_append (ba, "<font color=\"#", 14); + g_snprintf (num, 6, "%06x", citation_color); + g_byte_array_append (ba, num, 6); + g_byte_array_append (ba, "\">", 2); + } if (br_pending) br_pending--; } while (quoting > prevquoting) { - mail_html_write (html, stream, "<blockquote type=\"cite\">"); + g_byte_array_append (ba, "<blockquote type=\"cite\">", 24); prevquoting++; } while (quoting < prevquoting) { - mail_html_write (html, stream, "</blockquote>"); + g_byte_array_append (ba, "</blockquote>", 13); prevquoting--; } if (quoting == 0) { - mail_html_write (html, stream, md->printing ? "</i>" : "</font>\n"); + if (md->printing) + g_byte_array_append (ba, "</i>", 4); + else + g_byte_array_append (ba, "</font>\n", 8); if (br_pending) br_pending--; } @@ -1343,7 +1343,7 @@ handle_text_plain_flowed (char *buf, MailDisplay *md, GtkHTML *html, GtkHTMLStre } while (br_pending) { - mail_html_write (html, stream, "<br>\n"); + g_byte_array_append (ba, "<br>\n", 5); br_pending--; } @@ -1353,7 +1353,7 @@ handle_text_plain_flowed (char *buf, MailDisplay *md, GtkHTML *html, GtkHTMLStre E_TEXT_TO_HTML_CONVERT_SPACES : E_TEXT_TO_HTML_CONVERT_SPACES | E_TEXT_TO_HTML_CONVERT_URLS); if (text && *text) - mail_html_write (html, stream, text); + g_byte_array_append (ba, text, strlen (text)); g_free (text); if ((len > 0 && p[len - 1]) != ' ' || !strcmp (p, "-- ")) @@ -1365,7 +1365,13 @@ handle_text_plain_flowed (char *buf, MailDisplay *md, GtkHTML *html, GtkHTMLStre g_free (buf); - mail_html_write (html, stream, "</tt>\n</td></tr></table>\n"); + g_byte_array_append (ba, "</tt>\n", 6); + + xed = g_strdup_printf ("x-evolution-data:%p", part); + iframe = g_strdup_printf ("<iframe src=\"%s\" frameborder=0 scrolling=no>could not get %s</iframe>", xed, xed); + mail_display_add_url (md, "data_urls", xed, ba); + mail_html_write (html, stream, iframe); + g_free (iframe); return TRUE; } @@ -1643,7 +1649,7 @@ handle_text_enriched (CamelMimePart *part, const char *mime_type, g_string_free (string, TRUE); xed = g_strdup_printf ("x-evolution-data:%p", part); - gtk_html_stream_printf (stream, "<iframe src=\"%s\" frameborder=0 scrolling=no></iframe>", xed); + gtk_html_stream_printf (stream, "<iframe src=\"%s\" frameborder=0 scrolling=no>could not get %s</iframe>", xed, xed); mail_display_add_url (md, "data_urls", xed, ba); return TRUE; @@ -1677,7 +1683,7 @@ handle_text_html (CamelMimePart *part, const char *mime_type, location = get_location (part, md); if (!location) location = get_cid (part, md); - gtk_html_stream_printf (stream, "<iframe src=\"%s\" frameborder=0 scrolling=no></iframe>", location); + gtk_html_stream_printf (stream, "<iframe src=\"%s\" frameborder=0 scrolling=no>could not get %s</iframe>", location, location); return TRUE; } @@ -1816,8 +1822,8 @@ handle_multipart_signed (CamelMimePart *part, const char *mime_type, "Click the lock icon for more information.")); mail_html_write (html, stream, - "</font></td></tr><tr><td height=10><table height=10 cellspacing=0 cellpadding=0>" - "<tr><td></td></tr></table></td></tr></table>\n"); + "</font></td></tr><tr><td height=10><table cellspacing=0 cellpadding=0>" + "<tr><td height=10 ><a name=\"glue\"></td></tr></table></td></tr></table>\n"); } else { CamelCipherValidity *valid = NULL; CamelException ex; @@ -1862,7 +1868,7 @@ handle_multipart_signed (CamelMimePart *part, const char *mime_type, if (message) { gtk_html_stream_printf (stream, "<font size=-1 %s>", good || md->printing ? "" : "color=red"); - mail_text_write (html, stream, md->printing, message); + mail_text_write (html, stream, md, part, 0, md->printing, message); mail_html_write (html, stream, "</font>"); } |