aboutsummaryrefslogtreecommitdiffstats
path: root/em-format/e-mail-formatter-headers.c
diff options
context:
space:
mode:
Diffstat (limited to 'em-format/e-mail-formatter-headers.c')
-rw-r--r--em-format/e-mail-formatter-headers.c147
1 files changed, 94 insertions, 53 deletions
diff --git a/em-format/e-mail-formatter-headers.c b/em-format/e-mail-formatter-headers.c
index 89ac5f677a..a3d7b20680 100644
--- a/em-format/e-mail-formatter-headers.c
+++ b/em-format/e-mail-formatter-headers.c
@@ -54,6 +54,7 @@ format_short_headers (EMailFormatter *formatter,
guint32 flags,
GCancellable *cancellable)
{
+ GtkTextDirection direction;
const gchar *charset;
CamelContentType *ct;
gchar *hdr_charset;
@@ -62,11 +63,12 @@ format_short_headers (EMailFormatter *formatter,
struct _camel_header_address *addrs = NULL;
struct _camel_header_raw *header;
GString *from;
- gboolean is_rtl;
if (g_cancellable_is_cancelled (cancellable))
return;
+ direction = gtk_widget_get_default_direction ();
+
ct = camel_mime_part_get_content_type ((CamelMimePart *) part);
charset = camel_content_type_param (ct, "charset");
charset = camel_iconv_charset_name (charset);
@@ -79,9 +81,9 @@ format_short_headers (EMailFormatter *formatter,
g_string_append_printf (
buffer,
- "<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" "
+ "<table class=\"header\" "
"id=\"__evo-short-headers\" style=\"display: %s\">",
- flags & E_MAIL_FORMATTER_HEADER_FLAG_COLLAPSED ? "block" : "none");
+ flags & E_MAIL_FORMATTER_HEADER_FLAG_COLLAPSED ? "table" : "none");
header = ((CamelMimePart *) part)->headers;
while (header) {
@@ -96,8 +98,10 @@ format_short_headers (EMailFormatter *formatter,
formatter, tmp, addrs, header->name, FALSE,
!(flags & E_MAIL_FORMATTER_HEADER_FLAG_NOELIPSIZE));
- if (tmp->len)
- g_string_printf (from, _("From: %s"), tmp->str);
+ if (tmp->len > 0)
+ g_string_printf (
+ from, "%s: %s",
+ _("From"), tmp->str);
g_string_free (tmp, TRUE);
} else if (!g_ascii_strcasecmp (header->name, "Subject")) {
@@ -114,32 +118,20 @@ format_short_headers (EMailFormatter *formatter,
g_free (hdr_charset);
- is_rtl = gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL;
- if (is_rtl) {
- g_string_append (
- buffer, "<tr><td width=\"100%%\" align=\"right\">");
- if (from->len > 0)
- g_string_append_printf (buffer, "(%s) ", from->str);
- g_string_append (buffer, "<strong>");
- if (subject != NULL && *subject != '\0')
- g_string_append (buffer, subject);
- else
- g_string_append (buffer, _("(no subject)"));
- g_string_append (buffer, "</strong>");
- g_string_append (buffer, "</td></tr>");
- } else {
- g_string_append (
- buffer, "<tr><td width=\"100%%\" align=\"left\">");
- g_string_append (buffer, "<strong>");
- if (subject != NULL && *subject != '\0')
- g_string_append (buffer, subject);
- else
- g_string_append (buffer, _("(no subject)"));
- g_string_append (buffer, "</strong>");
- if (from->len > 0)
- g_string_append_printf (buffer, " (%s)", from->str);
- g_string_append (buffer, "</td></tr>");
- }
+ g_string_append (buffer, "<tr class=\"header\">");
+ if (direction == GTK_TEXT_DIR_RTL)
+ g_string_append (buffer, "<td class=\"header rtl\">");
+ else
+ g_string_append (buffer, "<td class=\"header ltr\">");
+ g_string_append (buffer, "<strong>");
+ if (subject != NULL && *subject != '\0')
+ g_string_append (buffer, subject);
+ else
+ g_string_append (buffer, _("(no subject)"));
+ g_string_append (buffer, "</strong>");
+ if (from->len > 0)
+ g_string_append_printf (buffer, " (%s)", from->str);
+ g_string_append (buffer, "</td></tr>");
g_string_append (buffer, "</table>");
@@ -257,10 +249,23 @@ format_full_headers (EMailFormatter *formatter,
gboolean mail_from_delegate = FALSE;
gchar *hdr_charset;
gchar *evolution_imagesdir;
+ const gchar *direction;
if (g_cancellable_is_cancelled (cancellable))
return;
+ switch (gtk_widget_get_default_direction ()) {
+ case GTK_TEXT_DIR_RTL:
+ direction = "rtl";
+ break;
+ case GTK_TEXT_DIR_LTR:
+ direction = "ltr";
+ break;
+ default:
+ direction = "inherit";
+ break;
+ }
+
ct = camel_mime_part_get_content_type ((CamelMimePart *) part);
charset = camel_content_type_param (ct, "charset");
charset = camel_iconv_charset_name (charset);
@@ -272,9 +277,12 @@ format_full_headers (EMailFormatter *formatter,
g_string_append_printf (
buffer,
- "<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" "
- "id=\"__evo-full-headers\" style=\"display: %s\" width=\"100%%\">",
- flags & E_MAIL_FORMATTER_HEADER_FLAG_COLLAPSED ? "none" : "block");
+ "<table cellspacing=\"0\" cellpadding=\"0\" "
+ "border=\"0\" width=\"100%%\" "
+ "id=\"__evo-full-headers\" "
+ "style=\"display: %s; direction: %s;\">",
+ flags & E_MAIL_FORMATTER_HEADER_FLAG_COLLAPSED ? "none" : "table",
+ direction);
header = ((CamelMimePart *) part)->headers;
while (header != NULL) {
@@ -356,7 +364,7 @@ format_full_headers (EMailFormatter *formatter,
g_string_append (
buffer,
"<tr valign=\"top\"><td width=\"100%\">"
- "<table border=0 cellpadding=\"0\">\n");
+ "<table class=\"header\">\n");
g_free (evolution_imagesdir);
@@ -456,8 +464,9 @@ format_full_headers (EMailFormatter *formatter,
gchar *name;
name = g_uri_escape_string (photo_name, NULL, FALSE);
- g_string_append (buffer, "<td align=\"right\" valign=\"top\">");
-
+ g_string_append (
+ buffer,
+ "<td align=\"right\" valign=\"top\">");
g_string_append_printf (
buffer,
"<img src=\"mail://contact-photo?mailaddr=\" "
@@ -477,7 +486,9 @@ format_full_headers (EMailFormatter *formatter,
(const gchar *) face_header_value,
face_header_len, "image/png");
- g_string_append (buffer, "<td align=\"right\" valign=\"top\">");
+ g_string_append (
+ buffer,
+ "<td align=\"right\" valign=\"top\">");
write_contact_picture (part, 48, buffer);
g_string_append (buffer, "</td>");
@@ -490,16 +501,19 @@ format_full_headers (EMailFormatter *formatter,
CamelMimePart *iconpart = NULL;
icon_info = gtk_icon_theme_lookup_icon (
- gtk_icon_theme_get_default (),
- "evolution", 16, GTK_ICON_LOOKUP_NO_SVG);
+ gtk_icon_theme_get_default (),
+ "evolution", 16, GTK_ICON_LOOKUP_NO_SVG);
if (icon_info != NULL) {
iconpart = load_picture_from_file (
- "image/png", gtk_icon_info_get_filename (icon_info),
+ "image/png",
+ gtk_icon_info_get_filename (icon_info),
cancellable);
gtk_icon_info_free (icon_info);
}
- if (iconpart) {
- g_string_append (buffer, "<td align=\"right\" valign=\"top\">");
+ if (iconpart != NULL) {
+ g_string_append (
+ buffer,
+ "<td align=\"right\" valign=\"top\">");
write_contact_picture (iconpart, 16, buffer);
g_string_append (buffer, "</td>");
@@ -522,6 +536,9 @@ emfe_headers_format (EMailFormatterExtension *extension,
const GdkRGBA white = { 1.0, 1.0, 1.0, 1.0 };
const GdkRGBA *body_rgba = &white;
const GdkRGBA *header_rgba;
+ const gchar *direction;
+ gboolean is_collapsable;
+ gboolean is_collapsed;
if (g_cancellable_is_cancelled (cancellable))
return FALSE;
@@ -529,6 +546,24 @@ emfe_headers_format (EMailFormatterExtension *extension,
if (!part->part)
return FALSE;
+ switch (gtk_widget_get_default_direction ()) {
+ case GTK_TEXT_DIR_RTL:
+ direction = "rtl";
+ break;
+ case GTK_TEXT_DIR_LTR:
+ direction = "ltr";
+ break;
+ default:
+ direction = "inherit";
+ break;
+ }
+
+ is_collapsable =
+ (context->flags & E_MAIL_FORMATTER_HEADER_FLAG_COLLAPSABLE);
+
+ is_collapsed =
+ (context->flags & E_MAIL_FORMATTER_HEADER_FLAG_COLLAPSED);
+
buffer = g_string_new ("");
if (context->mode != E_MAIL_FORMATTER_MODE_PRINTING)
@@ -541,28 +576,32 @@ emfe_headers_format (EMailFormatterExtension *extension,
g_string_append_printf (
buffer,
"<div class=\"headers\" style=\"background: #%06x;\" id=\"%s\">"
- "<table border=\"0\" width=\"100%%\" style=\"color: #%06x;\">\n"
- "<tr><td valign=\"top\" width=\"16\">\n",
+ "<table border=\"0\" width=\"100%%\" "
+ "style=\"color: #%06x; direction: %s\">"
+ "<tr>",
e_rgba_to_value (body_rgba),
part->id,
- e_rgba_to_value (header_rgba));
+ e_rgba_to_value (header_rgba),
+ direction);
- if (context->flags & E_MAIL_FORMATTER_HEADER_FLAG_COLLAPSABLE) {
+ if (is_collapsable)
g_string_append_printf (
buffer,
+ "<td valign=\"top\" width=\"16\">"
"<img src=\"evo-file://%s/%s\" class=\"navigable\" "
- "id=\"__evo-collapse-headers-img\" />"
- "</td><td>",
+ " id=\"__evo-collapse-headers-img\" />"
+ "</td>",
EVOLUTION_IMAGESDIR,
- (context->flags & E_MAIL_FORMATTER_HEADER_FLAG_COLLAPSED) ?
- "plus.png" : "minus.png");
+ is_collapsed ? "plus.png" : "minus.png");
+
+ g_string_append (buffer, "<td>");
+ if (is_collapsable)
format_short_headers (
formatter, buffer,
CAMEL_MEDIUM (part->part),
context->flags,
cancellable);
- }
format_full_headers (
formatter, buffer,
@@ -571,7 +610,9 @@ emfe_headers_format (EMailFormatterExtension *extension,
context->flags,
cancellable);
- g_string_append (buffer, "</td></tr></table></div>");
+ g_string_append (buffer, "</td>");
+
+ g_string_append (buffer, "</tr></table></div>");
camel_stream_write_string (stream, buffer->str, cancellable, NULL);