aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRadek Doulik <rodo@src.gnome.org>2002-11-21 18:57:47 +0800
committerRadek Doulik <rodo@src.gnome.org>2002-11-21 18:57:47 +0800
commit6cde624508affa75a530fd92a5d6d2af167e59be (patch)
tree3ff0b4025ed41a52318d4943381e3d7537a3e49d
parent4435bb12ec1286c40f71d2a41aa45c6bd1583442 (diff)
downloadgsoc2013-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
-rw-r--r--mail/ChangeLog13
-rw-r--r--mail/mail-display.c25
-rw-r--r--mail/mail-display.h3
-rw-r--r--mail/mail-format.c88
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>");
}