795 lines
32 KiB
Diff
795 lines
32 KiB
Diff
|
? mail.error
|
||
|
Index: em-format-html-display.c
|
||
|
===================================================================
|
||
|
RCS file: /cvs/gnome/evolution/mail/em-format-html-display.c,v
|
||
|
retrieving revision 1.107
|
||
|
diff -u -p -r1.107 em-format-html-display.c
|
||
|
--- em-format-html-display.c 16 Oct 2006 12:37:02 -0000 1.107
|
||
|
+++ mail/em-format-html-display.c 17 Nov 2006 18:46:20 -0000
|
||
|
@@ -74,6 +74,7 @@
|
||
|
#include <bonobo/bonobo-widget.h>
|
||
|
|
||
|
#include <camel/camel-stream.h>
|
||
|
+#include <camel/camel-stream-filter.h>
|
||
|
#include <camel/camel-stream-mem.h>
|
||
|
#include <camel/camel-mime-filter-tohtml.h>
|
||
|
#include <camel/camel-mime-part.h>
|
||
|
@@ -182,6 +183,9 @@ struct _attach_puri {
|
||
|
int fit_height;
|
||
|
GtkImage *image;
|
||
|
|
||
|
+ /* Optional Text Mem Stream */
|
||
|
+ CamelStreamMem *mstream;
|
||
|
+
|
||
|
/* Signed / Encrypted */
|
||
|
camel_cipher_validity_sign_t sign;
|
||
|
camel_cipher_validity_encrypt_t encrypt;
|
||
|
@@ -199,6 +203,7 @@ static void efhd_format_clone(EMFormat *
|
||
|
static void efhd_format_error(EMFormat *emf, CamelStream *stream, const char *txt);
|
||
|
static void efhd_format_source(EMFormat *, CamelStream *, CamelMimePart *);
|
||
|
static void efhd_format_attachment(EMFormat *, CamelStream *, CamelMimePart *, const char *, const EMFormatHandler *);
|
||
|
+static void efhd_format_optional(EMFormat *, CamelStream *, CamelMimePart *, CamelStream *);
|
||
|
static void efhd_format_secure(EMFormat *emf, CamelStream *stream, CamelMimePart *part, CamelCipherValidity *valid);
|
||
|
static void efhd_complete(EMFormat *);
|
||
|
gboolean efhd_mnemonic_show_bar (GtkWidget *widget, gboolean focus, GtkWidget *efhd);
|
||
|
@@ -353,6 +358,7 @@ efhd_class_init(GObjectClass *klass)
|
||
|
((EMFormatClass *)klass)->format_error = efhd_format_error;
|
||
|
((EMFormatClass *)klass)->format_source = efhd_format_source;
|
||
|
((EMFormatClass *)klass)->format_attachment = efhd_format_attachment;
|
||
|
+ ((EMFormatClass *)klass)->format_optional = efhd_format_optional;
|
||
|
((EMFormatClass *)klass)->format_secure = efhd_format_secure;
|
||
|
((EMFormatClass *)klass)->complete = efhd_complete;
|
||
|
|
||
|
@@ -1509,7 +1515,7 @@ efhd_attachment_popup(GtkWidget *w, GdkE
|
||
|
}
|
||
|
|
||
|
e_popup_add_items((EPopup *)emp, menus, NULL, efhd_menu_items_free, info);
|
||
|
-
|
||
|
+
|
||
|
menu = e_popup_create_menu_once((EPopup *)emp, (EPopupTarget *)target, 0);
|
||
|
if (event)
|
||
|
gtk_menu_popup(menu, NULL, NULL, NULL, NULL, event->button, event->time);
|
||
|
@@ -2398,7 +2404,6 @@ efhd_format_attachment(EMFormat *emf, Ca
|
||
|
if (handle) {
|
||
|
if (info->shown)
|
||
|
handle->handler(emf, stream, part, handle);
|
||
|
- /*camel_stream_printf(stream, "<iframe src=\"%s\" marginheight=0 marginwidth=0>%s</iframe>\n", classid, _("Attachment content could not be loaded"));*/
|
||
|
} else if (efhd_use_component(mime_type)) {
|
||
|
g_free(classid); /* messy */
|
||
|
|
||
|
@@ -2406,6 +2411,164 @@ efhd_format_attachment(EMFormat *emf, Ca
|
||
|
em_format_html_add_pobject((EMFormatHTML *)emf, sizeof(EMFormatHTMLPObject), classid, part, efhd_bonobo_object);
|
||
|
camel_stream_printf(stream, "<object classid=\"%s\" type=\"%s\"></object><br>>\n", classid, mime_type);
|
||
|
}
|
||
|
+
|
||
|
+ g_free(classid);
|
||
|
+}
|
||
|
+
|
||
|
+static void
|
||
|
+efhd_optional_button_show (GtkWidget *widget, GtkWidget *w)
|
||
|
+{
|
||
|
+ GtkWidget *label = g_object_get_data (widget, "text-label");
|
||
|
+
|
||
|
+ if (GTK_WIDGET_VISIBLE (w)) {
|
||
|
+ gtk_widget_hide (w);
|
||
|
+ gtk_label_set_text_with_mnemonic (label, _("View _Unformatted"));
|
||
|
+ } else {
|
||
|
+ gtk_label_set_text_with_mnemonic (label, _("Hide _Unformatted"));
|
||
|
+ gtk_widget_show (w);
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
+static void
|
||
|
+efhd_resize (GtkWidget *w, GtkAllocation *event, EMFormatHTML *efh)
|
||
|
+{
|
||
|
+ gtk_widget_set_size_request (w, ((GtkWidget *)efh->html)->allocation.width-48, 250);
|
||
|
+}
|
||
|
+
|
||
|
+/* optional render attachment button callback */
|
||
|
+static gboolean
|
||
|
+efhd_attachment_optional(EMFormatHTML *efh, GtkHTMLEmbedded *eb, EMFormatHTMLPObject *pobject)
|
||
|
+{
|
||
|
+ EMFormatHTMLDisplay *efhd = (EMFormatHTMLDisplay *)efh;
|
||
|
+ EAttachment *new;
|
||
|
+ struct _attach_puri *info;
|
||
|
+ GtkWidget *hbox, *vbox, *w, *button, *mainbox, *scroll, *label, *img;
|
||
|
+ char *simple_type, *tmp, *new_file = NULL;
|
||
|
+ const char *file;
|
||
|
+ GdkPixbuf *pixbuf, *mini;
|
||
|
+ AtkObject *a11y;
|
||
|
+ GtkTextView *view;
|
||
|
+ GtkTextBuffer *buffer;
|
||
|
+ GtkTargetEntry drag_types[] = {
|
||
|
+ { NULL, 0, 0 },
|
||
|
+ { "text/uri-list", 0, 1 },
|
||
|
+ };
|
||
|
+
|
||
|
+ /* FIXME: handle default shown case */
|
||
|
+ d(printf("adding attachment button/content for optional rendering\n"));
|
||
|
+
|
||
|
+ info = (struct _attach_puri *)em_format_find_puri((EMFormat *)efh, pobject->classid);
|
||
|
+ g_assert(info != NULL);
|
||
|
+ g_assert(info->forward == NULL);
|
||
|
+
|
||
|
+ scroll = gtk_scrolled_window_new (NULL, NULL);
|
||
|
+ mainbox = gtk_hbox_new(FALSE, 0);
|
||
|
+
|
||
|
+ button = gtk_button_new();
|
||
|
+ hbox = gtk_hbox_new (FALSE, 0);
|
||
|
+ img = e_icon_factory_get_image ("stock_show-all", E_ICON_SIZE_BUTTON);
|
||
|
+ label = gtk_label_new_with_mnemonic(_("View _Unformatted"));
|
||
|
+ g_object_set_data (button, "text-label", (gpointer)label);
|
||
|
+ gtk_box_pack_start ((GtkBox *)hbox, img, TRUE, TRUE, 2);
|
||
|
+ gtk_box_pack_start ((GtkBox *)hbox, label, TRUE, TRUE, 2);
|
||
|
+ gtk_widget_show_all (hbox);
|
||
|
+ gtk_container_add (button, hbox);
|
||
|
+ if (info->handle)
|
||
|
+ g_signal_connect(button, "clicked", G_CALLBACK(efhd_optional_button_show), scroll);
|
||
|
+ else {
|
||
|
+ gtk_widget_set_sensitive(button, FALSE);
|
||
|
+ GTK_WIDGET_UNSET_FLAGS(button, GTK_CAN_FOCUS);
|
||
|
+ }
|
||
|
+
|
||
|
+ vbox = gtk_vbox_new (FALSE, 0);
|
||
|
+ gtk_box_pack_start((GtkBox *)mainbox, button, FALSE, FALSE, 6);
|
||
|
+
|
||
|
+ button = gtk_button_new();
|
||
|
+ hbox = gtk_hbox_new (FALSE, 0);
|
||
|
+ img = e_icon_factory_get_image ("stock_open", E_ICON_SIZE_BUTTON);
|
||
|
+ label = gtk_label_new_with_mnemonic(_("O_pen With"));
|
||
|
+ gtk_box_pack_start ((GtkBox *)hbox, img, TRUE, TRUE, 2);
|
||
|
+ gtk_box_pack_start ((GtkBox *)hbox, label, TRUE, TRUE, 2);
|
||
|
+ gtk_box_pack_start ((GtkBox *)hbox, gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_NONE), TRUE, TRUE, 2);
|
||
|
+ gtk_widget_show_all (hbox);
|
||
|
+ gtk_container_add (button, hbox);
|
||
|
+
|
||
|
+ a11y = gtk_widget_get_accessible (button);
|
||
|
+ atk_object_set_name (a11y, _("Attachment"));
|
||
|
+
|
||
|
+ g_signal_connect(button, "button_press_event", G_CALLBACK(efhd_attachment_popup), info);
|
||
|
+ g_signal_connect(button, "popup_menu", G_CALLBACK(efhd_attachment_popup_menu), info);
|
||
|
+ g_signal_connect(button, "clicked", G_CALLBACK(efhd_attachment_popup_menu), info);
|
||
|
+ gtk_box_pack_start((GtkBox *)mainbox, button, FALSE, FALSE, 6);
|
||
|
+
|
||
|
+ gtk_widget_show_all(mainbox);
|
||
|
+
|
||
|
+ gtk_box_pack_start((GtkBox *)vbox, mainbox, FALSE, FALSE, 6);
|
||
|
+
|
||
|
+ view = gtk_text_view_new ();
|
||
|
+ gtk_text_view_set_editable (view, FALSE);
|
||
|
+ gtk_text_view_set_cursor_visible (view, FALSE);
|
||
|
+ buffer = gtk_text_view_get_buffer(view);
|
||
|
+ gtk_text_buffer_set_text (buffer, info->mstream->buffer->data, info->mstream->buffer->len);
|
||
|
+ camel_object_unref(info->mstream);
|
||
|
+ info->mstream = NULL;
|
||
|
+ gtk_scrolled_window_set_policy (scroll, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
||
|
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), GTK_SHADOW_IN);
|
||
|
+ gtk_container_add (scroll, view);
|
||
|
+ gtk_box_pack_start((GtkBox *)vbox, scroll, TRUE, TRUE, 6);
|
||
|
+ gtk_widget_show (view);
|
||
|
+ gtk_widget_set_size_request (scroll, ((GtkWidget *)efh->html)->allocation.width-48, 250);
|
||
|
+ g_signal_connect (scroll, "size_allocate", G_CALLBACK(efhd_resize), efh);
|
||
|
+ gtk_widget_show (scroll);
|
||
|
+
|
||
|
+ if (!info->shown)
|
||
|
+ gtk_widget_hide (scroll);
|
||
|
+
|
||
|
+ gtk_widget_show (vbox);
|
||
|
+ gtk_container_add((GtkContainer *)eb, vbox);
|
||
|
+ info->handle = NULL;
|
||
|
+
|
||
|
+ return TRUE;
|
||
|
+}
|
||
|
+
|
||
|
+static void
|
||
|
+efhd_format_optional(EMFormat *emf, CamelStream *fstream, CamelMimePart *part, CamelStream *mstream)
|
||
|
+{
|
||
|
+ char *classid, *text, *html;
|
||
|
+ struct _attach_puri *info;
|
||
|
+ CamelStream *stream = ((CamelStreamFilter *) fstream)->source;
|
||
|
+
|
||
|
+ classid = g_strdup_printf("optional%s", emf->part_id->str);
|
||
|
+ info = (struct _attach_puri *)em_format_add_puri(emf, sizeof(*info), classid, part, efhd_attachment_frame);
|
||
|
+ em_format_html_add_pobject((EMFormatHTML *)emf, sizeof(EMFormatHTMLPObject), classid, part, efhd_attachment_optional);
|
||
|
+ info->handle = em_format_find_handler(emf, "text/plain");;
|
||
|
+ info->shown = FALSE;
|
||
|
+ info->snoop_mime_type = g_strdup("text/plain");
|
||
|
+ info->attachment = e_attachment_new_from_mime_part (info->puri.part);
|
||
|
+ info->mstream = mstream;
|
||
|
+ if (emf->valid) {
|
||
|
+ info->sign = emf->valid->sign.status;
|
||
|
+ info->encrypt = emf->valid->encrypt.status;
|
||
|
+ }
|
||
|
+
|
||
|
+ camel_stream_write_string(stream,
|
||
|
+ EM_FORMAT_HTML_VPAD
|
||
|
+ "<table cellspacing=0 cellpadding=0><tr><td><h3><font size=-1 color=red>");
|
||
|
+
|
||
|
+ html = camel_text_to_html(_("Evolution cannot render this email as it is too large to handle. You can view it unformatted or with an external text editor."), ((EMFormatHTML *)emf)->text_html_flags & CAMEL_MIME_FILTER_TOHTML_CONVERT_URLS, 0);
|
||
|
+ camel_stream_write_string(stream, html);
|
||
|
+ camel_stream_write_string(stream,
|
||
|
+ "</font></h3></td></tr></table>\n");
|
||
|
+ camel_stream_write_string(stream,
|
||
|
+ "<table cellspacing=0 cellpadding=0>"
|
||
|
+ "<tr>");
|
||
|
+ camel_stream_printf(stream, "<td><object classid=\"%s\"></object></td></tr></table>", classid);
|
||
|
+
|
||
|
+ g_free(html);
|
||
|
+
|
||
|
+ camel_stream_write_string(stream,
|
||
|
+/* "</font></h2></td></tr></table>\n" */
|
||
|
+ EM_FORMAT_HTML_VPAD);
|
||
|
|
||
|
g_free(classid);
|
||
|
}
|
||
|
Index: em-format-html.c
|
||
|
===================================================================
|
||
|
RCS file: /cvs/gnome/evolution/mail/em-format-html.c,v
|
||
|
retrieving revision 1.93
|
||
|
diff -u -p -r1.93 em-format-html.c
|
||
|
--- em-format-html.c 29 Sep 2006 17:54:48 -0000 1.93
|
||
|
+++ mail/em-format-html.c 17 Nov 2006 18:46:23 -0000
|
||
|
@@ -767,7 +767,7 @@ efh_text_plain(EMFormatHTML *efh, CamelS
|
||
|
"<div style=\"border: solid #%06x 1px; background-color: #%06x; padding: 10px;\">\n",
|
||
|
efh->frame_colour & 0xffffff, efh->content_colour & 0xffffff);
|
||
|
camel_stream_write_string(stream, "<tt>\n");
|
||
|
- em_format_format_text((EMFormat *)efh, (CamelStream *)filtered_stream, camel_medium_get_content_object((CamelMedium *)newpart));
|
||
|
+ em_format_format_text((EMFormat *)efh, (CamelStream *)filtered_stream, newpart);
|
||
|
camel_stream_flush((CamelStream *)filtered_stream);
|
||
|
camel_stream_write_string(stream, "</tt>\n");
|
||
|
camel_stream_write_string(stream, "</div>\n");
|
||
|
@@ -807,7 +807,7 @@ efh_text_enriched(EMFormatHTML *efh, Cam
|
||
|
"<div style=\"border: solid #%06x 1px; background-color: #%06x; padding: 10px;\">\n",
|
||
|
efh->frame_colour & 0xffffff, efh->content_colour & 0xffffff);
|
||
|
|
||
|
- em_format_format_text((EMFormat *)efh, (CamelStream *)filtered_stream, dw);
|
||
|
+ em_format_format_text((EMFormat *)efh, (CamelStream *)filtered_stream, part);
|
||
|
|
||
|
camel_object_unref(filtered_stream);
|
||
|
camel_stream_write_string(stream, "</div>");
|
||
|
@@ -829,7 +829,7 @@ efh_write_text_html(EMFormat *emf, Camel
|
||
|
camel_data_wrapper_write_to_stream(dw, out);
|
||
|
camel_object_unref(out);
|
||
|
#endif
|
||
|
- em_format_format_text(emf, stream, camel_medium_get_content_object((CamelMedium *)puri->part));
|
||
|
+ em_format_format_text(emf, stream, puri->part);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
@@ -985,7 +985,7 @@ efh_message_deliverystatus(EMFormatHTML
|
||
|
camel_object_unref(html_filter);
|
||
|
|
||
|
camel_stream_write_string(stream, "<tt>\n");
|
||
|
- em_format_format_text((EMFormat *)efh, (CamelStream *)filtered_stream, camel_medium_get_content_object((CamelMedium *)part));
|
||
|
+ em_format_format_text((EMFormat *)efh, (CamelStream *)filtered_stream, part);
|
||
|
camel_stream_flush((CamelStream *)filtered_stream);
|
||
|
camel_stream_write_string(stream, "</tt>\n");
|
||
|
|
||
|
Index: em-format-quote.c
|
||
|
===================================================================
|
||
|
RCS file: /cvs/gnome/evolution/mail/em-format-quote.c,v
|
||
|
retrieving revision 1.19
|
||
|
diff -u -p -r1.19 em-format-quote.c
|
||
|
--- em-format-quote.c 8 Aug 2005 04:30:38 -0000 1.19
|
||
|
+++ mail/em-format-quote.c 17 Nov 2006 18:46:23 -0000
|
||
|
@@ -411,7 +411,7 @@ emfq_format_source(EMFormat *emf, CamelS
|
||
|
camel_stream_filter_add(filtered_stream, html_filter);
|
||
|
camel_object_unref(html_filter);
|
||
|
|
||
|
- em_format_format_text(emf, (CamelStream *)filtered_stream, dw);
|
||
|
+ em_format_format_text(emf, (CamelStream *)filtered_stream, part);
|
||
|
camel_object_unref(filtered_stream);
|
||
|
}
|
||
|
|
||
|
@@ -473,7 +473,7 @@ emfq_text_plain(EMFormatQuote *emfq, Cam
|
||
|
camel_stream_filter_add(filtered_stream, html_filter);
|
||
|
camel_object_unref(html_filter);
|
||
|
|
||
|
- em_format_format_text((EMFormat *)emfq, (CamelStream *)filtered_stream, camel_medium_get_content_object((CamelMedium *)part));
|
||
|
+ em_format_format_text((EMFormat *)emfq, (CamelStream *)filtered_stream, part);
|
||
|
camel_stream_flush((CamelStream *)filtered_stream);
|
||
|
camel_object_unref(filtered_stream);
|
||
|
}
|
||
|
@@ -501,7 +501,7 @@ emfq_text_enriched(EMFormatQuote *emfq,
|
||
|
camel_object_unref(enriched);
|
||
|
|
||
|
camel_stream_write_string(stream, "<br><hr><br>");
|
||
|
- em_format_format_text((EMFormat *)emfq, (CamelStream *)filtered_stream, dw);
|
||
|
+ em_format_format_text((EMFormat *)emfq, (CamelStream *)filtered_stream, part);
|
||
|
camel_object_unref(filtered_stream);
|
||
|
}
|
||
|
|
||
|
@@ -509,7 +509,7 @@ static void
|
||
|
emfq_text_html(EMFormat *emf, CamelStream *stream, CamelMimePart *part, EMFormatHandler *info)
|
||
|
{
|
||
|
camel_stream_write_string(stream, "\n<!-- text/html -->\n");
|
||
|
- em_format_format_text(emf, stream, camel_medium_get_content_object((CamelMedium *)part));
|
||
|
+ em_format_format_text(emf, stream, part);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
Index: em-format.c
|
||
|
===================================================================
|
||
|
RCS file: /cvs/gnome/evolution/mail/em-format.c,v
|
||
|
retrieving revision 1.52
|
||
|
diff -u -p -r1.52 em-format.c
|
||
|
--- em-format.c 20 Apr 2006 16:35:32 -0000 1.52
|
||
|
+++ mail/em-format.c 17 Nov 2006 18:46:26 -0000
|
||
|
@@ -47,6 +47,7 @@
|
||
|
#include <camel/camel-string-utils.h>
|
||
|
#include <camel/camel-stream-filter.h>
|
||
|
#include <camel/camel-stream-null.h>
|
||
|
+#include <camel/camel-stream-mem.h>
|
||
|
#include <camel/camel-mime-filter-charset.h>
|
||
|
#include <camel/camel-mime-filter-windows.h>
|
||
|
#include <camel/camel-mime-filter-pgp.h>
|
||
|
@@ -80,7 +81,6 @@ static const EMFormatHandler *emf_find_h
|
||
|
static void emf_format_clone(EMFormat *emf, CamelFolder *folder, const char *uid, CamelMimeMessage *msg, EMFormat *emfsource);
|
||
|
static void emf_format_secure(EMFormat *emf, CamelStream *stream, CamelMimePart *part, CamelCipherValidity *valid);
|
||
|
static gboolean emf_busy(EMFormat *emf);
|
||
|
-
|
||
|
enum {
|
||
|
EMF_COMPLETE,
|
||
|
EMF_LAST_SIGNAL,
|
||
|
@@ -117,8 +117,10 @@ static void
|
||
|
emf_init(GObject *o)
|
||
|
{
|
||
|
EMFormat *emf = (EMFormat *)o;
|
||
|
-
|
||
|
+ char * asize;
|
||
|
+
|
||
|
emf->inline_table = g_hash_table_new(g_str_hash, g_str_equal);
|
||
|
+ emf->composer = FALSE;
|
||
|
e_dlist_init(&emf->header_list);
|
||
|
em_format_default_headers(emf);
|
||
|
emf->part_id = g_string_new("");
|
||
|
@@ -469,6 +471,7 @@ em_format_find_visible_puri(EMFormat *em
|
||
|
* Return value:
|
||
|
**/
|
||
|
EMFormatPURI *
|
||
|
+
|
||
|
em_format_find_puri(EMFormat *emf, const char *uri)
|
||
|
{
|
||
|
return g_hash_table_lookup(emf->pending_uri_table, uri);
|
||
|
@@ -1016,7 +1019,7 @@ em_format_format_content(EMFormat *emf,
|
||
|
CamelDataWrapper *dw = camel_medium_get_content_object((CamelMedium *)part);
|
||
|
|
||
|
if (camel_content_type_is (dw->mime_type, "text", "*"))
|
||
|
- em_format_format_text(emf, stream, dw);
|
||
|
+ em_format_format_text(emf, stream, part);
|
||
|
else
|
||
|
camel_data_wrapper_decode_to_stream(dw, stream);
|
||
|
}
|
||
|
@@ -1036,6 +1039,9 @@ em_format_format_text(EMFormat *emf, Cam
|
||
|
CamelMimeFilterCharset *filter;
|
||
|
const char *charset = NULL;
|
||
|
CamelMimeFilterWindows *windows = NULL;
|
||
|
+ CamelStream *mem_stream = NULL;
|
||
|
+ size_t size;
|
||
|
+ size_t max;
|
||
|
|
||
|
if (emf->charset) {
|
||
|
charset = emf->charset;
|
||
|
@@ -1064,17 +1070,27 @@ em_format_format_text(EMFormat *emf, Cam
|
||
|
} else if (charset == NULL) {
|
||
|
charset = emf->default_charset;
|
||
|
}
|
||
|
-
|
||
|
- filter_stream = camel_stream_filter_new_with_stream(stream);
|
||
|
+
|
||
|
+ mem_stream = (CamelStreamMem *)camel_stream_mem_new ();
|
||
|
+ filter_stream = camel_stream_filter_new_with_stream(mem_stream);
|
||
|
|
||
|
if ((filter = camel_mime_filter_charset_new_convert(charset, "UTF-8"))) {
|
||
|
camel_stream_filter_add(filter_stream, (CamelMimeFilter *) filter);
|
||
|
camel_object_unref(filter);
|
||
|
}
|
||
|
-
|
||
|
- camel_data_wrapper_decode_to_stream(dw, (CamelStream *)filter_stream);
|
||
|
+
|
||
|
+ max = mail_config_get_message_limit();
|
||
|
+ size = camel_data_wrapper_decode_to_stream(emf->mode == EM_FORMAT_SOURCE ? (CamelDataWrapper *)dw: camel_medium_get_content_object((CamelMedium *)dw), (CamelStream *)filter_stream);
|
||
|
camel_stream_flush((CamelStream *)filter_stream);
|
||
|
camel_object_unref(filter_stream);
|
||
|
+ camel_stream_reset (mem_stream);
|
||
|
+
|
||
|
+ if (max == -1 || size < (max * 1024) || emf->composer) {
|
||
|
+ camel_stream_write_to_stream(mem_stream, (CamelStream *)stream);
|
||
|
+ camel_stream_flush((CamelStream *)stream);
|
||
|
+ } else {
|
||
|
+ ((EMFormatClass *)G_OBJECT_GET_CLASS(emf))->format_optional(emf, stream, (CamelMimePart *)dw, mem_stream);
|
||
|
+ }
|
||
|
|
||
|
if (windows)
|
||
|
camel_object_unref(windows);
|
||
|
@@ -1495,7 +1511,7 @@ emf_message_rfc822(EMFormat *emf, CamelS
|
||
|
static void
|
||
|
emf_message_deliverystatus(EMFormat *emf, CamelStream *stream, CamelMimePart *part, const EMFormatHandler *info)
|
||
|
{
|
||
|
- em_format_format_text(emf, stream, camel_medium_get_content_object((CamelMedium *)part));
|
||
|
+ em_format_format_text(emf, stream, part);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
Index: em-format.h
|
||
|
===================================================================
|
||
|
RCS file: /cvs/gnome/evolution/mail/em-format.h,v
|
||
|
retrieving revision 1.16
|
||
|
diff -u -p -r1.16 em-format.h
|
||
|
--- em-format.h 19 May 2005 06:06:35 -0000 1.16
|
||
|
+++ mail/em-format.h 17 Nov 2006 18:46:26 -0000
|
||
|
@@ -226,6 +226,7 @@ struct _EMFormat {
|
||
|
em_format_mode_t mode; /* source/headers/etc */
|
||
|
char *charset; /* charset override */
|
||
|
char *default_charset; /* charset fallback */
|
||
|
+ gboolean composer; /* Formatting from composer ?*/
|
||
|
};
|
||
|
|
||
|
struct _EMFormatClass {
|
||
|
@@ -257,6 +258,9 @@ struct _EMFormatClass {
|
||
|
/* returns true if the formatter is still busy with pending stuff */
|
||
|
gboolean (*busy)(EMFormat *);
|
||
|
|
||
|
+ /* Shows optional way to open messages */
|
||
|
+ void (*format_optional)(EMFormat *, struct _CamelStream *, struct _CamelMimePart *, struct _CamelStream* );
|
||
|
+
|
||
|
/* signals */
|
||
|
/* complete, alternative to polling busy, for asynchronous work */
|
||
|
void (*complete)(EMFormat *);
|
||
|
Index: em-mailer-prefs.c
|
||
|
===================================================================
|
||
|
RCS file: /cvs/gnome/evolution/mail/em-mailer-prefs.c,v
|
||
|
retrieving revision 1.39
|
||
|
diff -u -p -r1.39 em-mailer-prefs.c
|
||
|
--- em-mailer-prefs.c 9 Aug 2006 08:43:27 -0000 1.39
|
||
|
+++ mail/em-mailer-prefs.c 17 Nov 2006 18:46:28 -0000
|
||
|
@@ -459,6 +459,16 @@ address_compress_count_changed (GtkSpinB
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
+mlimit_count_changed (GtkSpinButton *spin, EMMailerPrefs *prefs)
|
||
|
+{
|
||
|
+ int count;
|
||
|
+
|
||
|
+ count = (int) gtk_spin_button_get_value (prefs->mlimit_count);
|
||
|
+
|
||
|
+ gconf_client_set_int (prefs->gconf, "/apps/evolution/mail/display/message_text_part_limit", count, NULL);
|
||
|
+}
|
||
|
+
|
||
|
+static void
|
||
|
spin_button_init (EMMailerPrefs *prefs, GtkSpinButton *spin, const char *key, float div, GCallback value_changed)
|
||
|
{
|
||
|
GError *err = NULL;
|
||
|
@@ -772,6 +782,16 @@ em_mailer_prefs_construct (EMMailerPrefs
|
||
|
"/apps/evolution/mail/display/mark_seen_timeout",
|
||
|
1000.0, G_CALLBACK (mark_seen_timeout_changed));
|
||
|
|
||
|
+ prefs->mlimit_toggle = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "mlimit_checkbutton"));
|
||
|
+ toggle_button_init (prefs, prefs->mlimit_toggle, FALSE,
|
||
|
+ "/apps/evolution/mail/display/force_message_limit",
|
||
|
+ G_CALLBACK (toggle_button_toggled));
|
||
|
+
|
||
|
+ prefs->mlimit_count = GTK_SPIN_BUTTON (glade_xml_get_widget (gui, "mlimit_spin"));
|
||
|
+ spin_button_init (prefs, prefs->mlimit_count,
|
||
|
+ "/apps/evolution/mail/display/message_text_part_limit",
|
||
|
+ 1, G_CALLBACK (mlimit_count_changed));
|
||
|
+
|
||
|
prefs->address_toggle = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "address_checkbox"));
|
||
|
toggle_button_init (prefs, prefs->address_toggle, FALSE,
|
||
|
"/apps/evolution/mail/display/address_compress",
|
||
|
Index: em-mailer-prefs.h
|
||
|
===================================================================
|
||
|
RCS file: /cvs/gnome/evolution/mail/em-mailer-prefs.h,v
|
||
|
retrieving revision 1.15
|
||
|
diff -u -p -r1.15 em-mailer-prefs.h
|
||
|
--- em-mailer-prefs.h 25 May 2006 04:59:47 -0000 1.15
|
||
|
+++ mail/em-mailer-prefs.h 17 Nov 2006 18:46:28 -0000
|
||
|
@@ -75,7 +75,9 @@ struct _EMMailerPrefs {
|
||
|
struct _GtkToggleButton *timeout_toggle;
|
||
|
struct _GtkSpinButton *timeout;
|
||
|
struct _GtkToggleButton *address_toggle;
|
||
|
- struct _GtkSpinButton *address_count;
|
||
|
+ struct _GtkSpinButton *address_count;
|
||
|
+ struct _GtkToggleButton *mlimit_toggle;
|
||
|
+ struct _GtkSpinButton *mlimit_count;
|
||
|
struct _GtkOptionMenu *charset;
|
||
|
struct _GtkToggleButton *citation_highlight;
|
||
|
struct _GnomeColorPicker *citation_color;
|
||
|
Index: em-utils.c
|
||
|
===================================================================
|
||
|
RCS file: /cvs/gnome/evolution/mail/em-utils.c,v
|
||
|
retrieving revision 1.83
|
||
|
diff -u -p -r1.83 em-utils.c
|
||
|
--- em-utils.c 23 Aug 2006 14:05:19 -0000 1.83
|
||
|
+++ mail/em-utils.c 17 Nov 2006 18:46:30 -0000
|
||
|
@@ -1605,6 +1605,7 @@ em_utils_part_to_html(CamelMimePart *par
|
||
|
camel_stream_mem_set_byte_array (mem, buf);
|
||
|
|
||
|
emfq = em_format_quote_new(NULL, (CamelStream *)mem, 0);
|
||
|
+ ((EMFormat *) emfq)->composer = TRUE;
|
||
|
em_format_set_session((EMFormat *)emfq, session);
|
||
|
if (source) {
|
||
|
/* copy over things we can, other things are internal, perhaps need different api than 'clone' */
|
||
|
@@ -1653,6 +1654,7 @@ em_utils_message_to_html(CamelMimeMessag
|
||
|
camel_stream_mem_set_byte_array (mem, buf);
|
||
|
|
||
|
emfq = em_format_quote_new(credits, (CamelStream *)mem, flags);
|
||
|
+ ((EMFormat *) emfq)->composer = TRUE;
|
||
|
em_format_set_session((EMFormat *)emfq, session);
|
||
|
|
||
|
if (!source) {
|
||
|
Index: evolution-mail.schemas.in.in
|
||
|
===================================================================
|
||
|
RCS file: /cvs/gnome/evolution/mail/evolution-mail.schemas.in.in,v
|
||
|
retrieving revision 1.29
|
||
|
diff -u -p -r1.29 evolution-mail.schemas.in.in
|
||
|
--- evolution-mail.schemas.in.in 14 Jul 2006 05:42:26 -0000 1.29
|
||
|
+++ mail/evolution-mail.schemas.in.in 17 Nov 2006 18:46:31 -0000
|
||
|
@@ -485,7 +485,36 @@
|
||
|
</long>
|
||
|
</locale>
|
||
|
</schema>
|
||
|
-
|
||
|
+
|
||
|
+ <schema>
|
||
|
+ <key>/schemas/apps/evolution/mail/display/force_message_limit</key>
|
||
|
+ <applyto>/apps/evolution/mail/display/force_message_limit</applyto>
|
||
|
+ <owner>evolution-mail</owner>
|
||
|
+ <type>bool</type>
|
||
|
+ <default>true</default>
|
||
|
+ <locale name="C">
|
||
|
+ <short>Allows evolution to display text part of limited size</short>
|
||
|
+ <long>
|
||
|
+ Enable to render message text part of limited size.
|
||
|
+ </long>
|
||
|
+ </locale>
|
||
|
+ </schema>
|
||
|
+
|
||
|
+ <schema>
|
||
|
+ <key>/schemas/apps/evolution/mail/display/message_text_part_limit</key>
|
||
|
+ <applyto>/apps/evolution/mail/display/message_text_part_limit</applyto>
|
||
|
+ <owner>evolution-mail</owner>
|
||
|
+ <type>int</type>
|
||
|
+ <default>4096</default>
|
||
|
+ <locale name="C">
|
||
|
+ <short>Text message part limit</short>
|
||
|
+ <long>
|
||
|
+ This decides the max size of the text part that can be formatted under
|
||
|
+ evolution. The default is 4MB / 4096 KB and is specified interms of KB.
|
||
|
+ </long>
|
||
|
+ </locale>
|
||
|
+ </schema>
|
||
|
+
|
||
|
<schema>
|
||
|
<key>/schemas/apps/evolution/mail/display/address_count</key>
|
||
|
<applyto>/apps/evolution/mail/display/address_count</applyto>
|
||
|
Index: mail-config.c
|
||
|
===================================================================
|
||
|
RCS file: /cvs/gnome/evolution/mail/mail-config.c,v
|
||
|
retrieving revision 1.326
|
||
|
diff -u -p -r1.326 mail-config.c
|
||
|
--- mail-config.c 25 May 2006 04:59:47 -0000 1.326
|
||
|
+++ mail/mail-config.c 17 Nov 2006 18:46:32 -0000
|
||
|
@@ -110,6 +110,11 @@ typedef struct {
|
||
|
guint address_compress_notify_id;
|
||
|
gboolean address_compress;
|
||
|
gint address_count;
|
||
|
+ guint mlimit_size_notify_id;
|
||
|
+ guint mlimit_notify_id;
|
||
|
+ gboolean mlimit;
|
||
|
+ gint mlimit_size;
|
||
|
+
|
||
|
|
||
|
GPtrArray *mime_types;
|
||
|
guint mime_types_notify_id;
|
||
|
@@ -339,6 +344,20 @@ gconf_address_compress_changed (GConfCli
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
+gconf_mlimit_size_changed (GConfClient *client, guint cnxn_id,
|
||
|
+ GConfEntry *entry, gpointer user_data)
|
||
|
+{
|
||
|
+ config->mlimit_size = gconf_client_get_int (config->gconf, "/apps/evolution/mail/display/message_text_part_limit", NULL);
|
||
|
+}
|
||
|
+
|
||
|
+static void
|
||
|
+gconf_mlimit_changed (GConfClient *client, guint cnxn_id,
|
||
|
+ GConfEntry *entry, gpointer user_data)
|
||
|
+{
|
||
|
+ config->mlimit = gconf_client_get_bool (config->gconf, "/apps/evolution/mail/display/force_message_limit", NULL);
|
||
|
+}
|
||
|
+
|
||
|
+static void
|
||
|
gconf_mime_types_changed (GConfClient *client, guint cnxn_id,
|
||
|
GConfEntry *entry, gpointer user_data)
|
||
|
{
|
||
|
@@ -373,7 +392,11 @@ mail_config_init (void)
|
||
|
config->font_notify_id = gconf_client_notify_add (config->gconf, "/apps/evolution/mail/display/address_compress",
|
||
|
gconf_address_compress_changed, NULL, NULL, NULL);
|
||
|
config->font_notify_id = gconf_client_notify_add (config->gconf, "/apps/evolution/mail/display/address_count",
|
||
|
- gconf_address_count_changed, NULL, NULL, NULL);
|
||
|
+ gconf_address_count_changed, NULL, NULL, NULL);
|
||
|
+ config->mlimit_notify_id = gconf_client_notify_add (config->gconf, "/apps/evolution/mail/display/force_message_limit",
|
||
|
+ gconf_mlimit_changed, NULL, NULL, NULL);
|
||
|
+ config->mlimit_size_notify_id = gconf_client_notify_add (config->gconf, "/apps/evolution/mail/display/message_text_part_limit",
|
||
|
+ gconf_mlimit_size_changed, NULL, NULL, NULL);
|
||
|
config->spell_notify_id = gconf_client_notify_add (config->gconf, "/GNOME/Spell",
|
||
|
gconf_style_changed, NULL, NULL, NULL);
|
||
|
config->mark_citations__notify_id = gconf_client_notify_add (config->gconf, "/apps/evolution/mail/display/mark_citations",
|
||
|
@@ -397,6 +420,8 @@ mail_config_init (void)
|
||
|
config_cache_mime_types ();
|
||
|
config->address_compress = gconf_client_get_bool (config->gconf, "/apps/evolution/mail/display/address_compress", NULL);
|
||
|
config->address_count = gconf_client_get_int (config->gconf, "/apps/evolution/mail/display/address_count", NULL);
|
||
|
+ config->mlimit = gconf_client_get_bool (config->gconf, "/apps/evolution/mail/display/force_message_limit", NULL);
|
||
|
+ config->mlimit_size = gconf_client_get_int (config->gconf, "/apps/evolution/mail/display/message_text_part_limit", NULL);
|
||
|
config->accounts = e_account_list_new (config->gconf);
|
||
|
config->signatures = e_signature_list_new (config->gconf);
|
||
|
}
|
||
|
@@ -536,6 +561,15 @@ mail_config_get_address_count (void)
|
||
|
return -1;
|
||
|
|
||
|
return config->address_count;
|
||
|
+}
|
||
|
+
|
||
|
+int
|
||
|
+mail_config_get_message_limit (void)
|
||
|
+{
|
||
|
+ if (!config->mlimit)
|
||
|
+ return -1;
|
||
|
+
|
||
|
+ return config->mlimit_size;
|
||
|
}
|
||
|
|
||
|
const char *
|
||
|
Index: mail-config.glade
|
||
|
===================================================================
|
||
|
RCS file: /cvs/gnome/evolution/mail/mail-config.glade,v
|
||
|
retrieving revision 1.174
|
||
|
diff -u -p -r1.174 mail-config.glade
|
||
|
--- mail-config.glade 19 Jul 2006 15:26:27 -0000 1.174
|
||
|
+++ mail/mail-config.glade 17 Nov 2006 18:46:45 -0000
|
||
|
@@ -3342,7 +3342,7 @@ For example: "Work" or "P
|
||
|
<child>
|
||
|
<widget class="GtkLabel" id="label583">
|
||
|
<property name="visible">True</property>
|
||
|
- <property name="label" translatable="yes">S_end message receipts:</property>
|
||
|
+ <property name="label" translatable="yes">S_end message receipts:</property>
|
||
|
<property name="use_underline">True</property>
|
||
|
<property name="use_markup">False</property>
|
||
|
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||
|
@@ -3352,8 +3352,8 @@ For example: "Work" or "P
|
||
|
<property name="yalign">0.5</property>
|
||
|
<property name="xpad">0</property>
|
||
|
<property name="ypad">0</property>
|
||
|
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||
|
<property name="mnemonic_widget">receipt_policy_dropdown</property>
|
||
|
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||
|
<property name="width_chars">-1</property>
|
||
|
<property name="single_line_mode">False</property>
|
||
|
<property name="angle">0</property>
|
||
|
@@ -4962,6 +4962,82 @@ For example: "Work" or "P
|
||
|
</child>
|
||
|
|
||
|
<child>
|
||
|
+ <widget class="GtkHBox" id="hbox234">
|
||
|
+ <property name="visible">True</property>
|
||
|
+ <property name="homogeneous">False</property>
|
||
|
+ <property name="spacing">4</property>
|
||
|
+
|
||
|
+ <child>
|
||
|
+ <widget class="GtkCheckButton" id="mlimit_checkbutton">
|
||
|
+ <property name="visible">True</property>
|
||
|
+ <property name="can_focus">True</property>
|
||
|
+ <property name="label" translatable="yes">Do not format text contents in mails if the text si_ze exceeds</property>
|
||
|
+ <property name="use_underline">True</property>
|
||
|
+ <property name="relief">GTK_RELIEF_NORMAL</property>
|
||
|
+ <property name="focus_on_click">True</property>
|
||
|
+ <property name="active">False</property>
|
||
|
+ <property name="inconsistent">False</property>
|
||
|
+ <property name="draw_indicator">True</property>
|
||
|
+ </widget>
|
||
|
+ <packing>
|
||
|
+ <property name="padding">0</property>
|
||
|
+ <property name="expand">False</property>
|
||
|
+ <property name="fill">False</property>
|
||
|
+ </packing>
|
||
|
+ </child>
|
||
|
+
|
||
|
+ <child>
|
||
|
+ <widget class="GtkSpinButton" id="mlimit_spin">
|
||
|
+ <property name="visible">True</property>
|
||
|
+ <property name="can_focus">True</property>
|
||
|
+ <property name="climb_rate">1</property>
|
||
|
+ <property name="digits">0</property>
|
||
|
+ <property name="numeric">False</property>
|
||
|
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
|
||
|
+ <property name="snap_to_ticks">False</property>
|
||
|
+ <property name="wrap">False</property>
|
||
|
+ <property name="adjustment">0 0 30000 1 10 10</property>
|
||
|
+ </widget>
|
||
|
+ <packing>
|
||
|
+ <property name="padding">0</property>
|
||
|
+ <property name="expand">False</property>
|
||
|
+ <property name="fill">True</property>
|
||
|
+ </packing>
|
||
|
+ </child>
|
||
|
+
|
||
|
+ <child>
|
||
|
+ <widget class="GtkLabel" id="label585">
|
||
|
+ <property name="visible">True</property>
|
||
|
+ <property name="label" translatable="yes">KB</property>
|
||
|
+ <property name="use_underline">False</property>
|
||
|
+ <property name="use_markup">False</property>
|
||
|
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
|
||
|
+ <property name="wrap">False</property>
|
||
|
+ <property name="selectable">False</property>
|
||
|
+ <property name="xalign">0.5</property>
|
||
|
+ <property name="yalign">0.5</property>
|
||
|
+ <property name="xpad">0</property>
|
||
|
+ <property name="ypad">0</property>
|
||
|
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||
|
+ <property name="width_chars">-1</property>
|
||
|
+ <property name="single_line_mode">False</property>
|
||
|
+ <property name="angle">0</property>
|
||
|
+ </widget>
|
||
|
+ <packing>
|
||
|
+ <property name="padding">0</property>
|
||
|
+ <property name="expand">False</property>
|
||
|
+ <property name="fill">False</property>
|
||
|
+ </packing>
|
||
|
+ </child>
|
||
|
+ </widget>
|
||
|
+ <packing>
|
||
|
+ <property name="padding">0</property>
|
||
|
+ <property name="expand">False</property>
|
||
|
+ <property name="fill">False</property>
|
||
|
+ </packing>
|
||
|
+ </child>
|
||
|
+
|
||
|
+ <child>
|
||
|
<widget class="GtkHBox" id="hbox233">
|
||
|
<property name="visible">True</property>
|
||
|
<property name="homogeneous">False</property>
|
||
|
@@ -6572,7 +6648,7 @@ For example: "Work" or "P
|
||
|
<child>
|
||
|
<widget class="GtkLabel" id="label571">
|
||
|
<property name="visible">True</property>
|
||
|
- <property name="label" translatable="no"> </property>
|
||
|
+ <property name="label"> </property>
|
||
|
<property name="use_underline">False</property>
|
||
|
<property name="use_markup">False</property>
|
||
|
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||
|
@@ -6675,7 +6751,7 @@ For example: "Work" or "P
|
||
|
<child>
|
||
|
<widget class="GtkLabel" id="label572">
|
||
|
<property name="visible">True</property>
|
||
|
- <property name="label" translatable="no"> </property>
|
||
|
+ <property name="label"> </property>
|
||
|
<property name="use_underline">False</property>
|
||
|
<property name="use_markup">False</property>
|
||
|
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||
|
@@ -6731,7 +6807,7 @@ For example: "Work" or "P
|
||
|
<child>
|
||
|
<widget class="GtkLabel" id="label575">
|
||
|
<property name="visible">True</property>
|
||
|
- <property name="label" translatable="no"> </property>
|
||
|
+ <property name="label"> </property>
|
||
|
<property name="use_underline">False</property>
|
||
|
<property name="use_markup">False</property>
|
||
|
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||
|
Index: mail-config.h
|
||
|
===================================================================
|
||
|
RCS file: /cvs/gnome/evolution/mail/mail-config.h,v
|
||
|
retrieving revision 1.121
|
||
|
diff -u -p -r1.121 mail-config.h
|
||
|
--- mail-config.h 25 May 2006 04:59:47 -0000 1.121
|
||
|
+++ mail/mail-config.h 17 Nov 2006 18:46:45 -0000
|
||
|
@@ -134,6 +134,7 @@ void mail_config_add_account (struct _EA
|
||
|
void mail_config_remove_account (struct _EAccount *account);
|
||
|
void mail_config_set_default_account (struct _EAccount *account);
|
||
|
int mail_config_get_address_count (void);
|
||
|
+int mail_config_get_message_limit (void);
|
||
|
|
||
|
void mail_config_remove_account_proxies (struct _EAccount *account);
|
||
|
void mail_config_prune_proxies (void);
|