X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fwidgets%2Fmodest-gtkhtml-mime-part-view.c;h=5a114592026fff38c831853badc5db8f25585e96;hb=2f3a696a7f1f4b147ae531270a7aaf69ea900ab7;hp=69c201bbba396e28eb41491989cac180c1bcd75d;hpb=dfeba5934a4d556df3252a0c517cc718f6140205;p=modest diff --git a/src/widgets/modest-gtkhtml-mime-part-view.c b/src/widgets/modest-gtkhtml-mime-part-view.c index 69c201b..5a11459 100644 --- a/src/widgets/modest-gtkhtml-mime-part-view.c +++ b/src/widgets/modest-gtkhtml-mime-part-view.c @@ -133,6 +133,7 @@ struct _ModestGtkhtmlMimePartViewPrivate { enum { STOP_STREAMS_SIGNAL, + LIMIT_ERROR_SIGNAL, LAST_SIGNAL }; @@ -263,6 +264,15 @@ modest_gtkhtml_mime_part_view_class_init (ModestGtkhtmlMimePartViewClass *klass) g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + signals[LIMIT_ERROR_SIGNAL] = + g_signal_new ("limit-error", + G_TYPE_FROM_CLASS (gobject_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (ModestGtkhtmlMimePartViewClass,limit_error), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + } static void @@ -277,7 +287,11 @@ modest_gtkhtml_mime_part_view_init (ModestGtkhtmlMimePartView *self) gtk_html_set_caret_mode (GTK_HTML(self), FALSE); gtk_html_set_blocking (GTK_HTML(self), TRUE); gtk_html_set_images_blocking (GTK_HTML(self), TRUE); - gtk_container_set_border_width (GTK_CONTAINER (self), MODEST_MARGIN_DEFAULT); + /* We don't need this for Hildon2 as this widget will be most + likely inside pannable area */ +#ifndef MODEST_TOOLKIT_HILDON2 + gtk_html_set_auto_panning (GTK_HTML (self), TRUE); +#endif #ifdef MODEST_TOOLKIT_HILDON2 #ifdef HAVE_GTK_HTML_SET_MAX_IMAGE_SIZE @@ -445,13 +459,20 @@ decode_to_stream_cb (TnyMimePart *self, GError *err, gpointer user_data) { - gboolean is_text = GPOINTER_TO_INT (user_data); + ModestGtkhtmlMimePartView *view = (ModestGtkhtmlMimePartView *) user_data; - if (is_text) { + if (MODEST_IS_STREAM_TEXT_TO_HTML (stream)) { if (tny_stream_write (stream, "\n", 1) == -1) { g_warning ("failed to write CR in %s", __FUNCTION__); } + if (modest_stream_text_to_html_limit_reached (MODEST_STREAM_TEXT_TO_HTML (stream))) { + g_signal_emit (G_OBJECT (view), signals[LIMIT_ERROR_SIGNAL], 0); + } tny_stream_reset (stream); + } else { + if (modest_tny_stream_gtkhtml_limit_reached (MODEST_TNY_STREAM_GTKHTML (stream))) { + g_signal_emit (G_OBJECT (view), signals[LIMIT_ERROR_SIGNAL], 0); + } } tny_stream_close (stream); } @@ -461,20 +482,24 @@ set_html_part (ModestGtkhtmlMimePartView *self, TnyMimePart *part, const gchar * { GtkHTMLStream *gtkhtml_stream; TnyStream *tny_stream; + gchar *content_type; g_return_if_fail (self); g_return_if_fail (part); g_signal_emit (G_OBJECT (self), signals[STOP_STREAMS_SIGNAL], 0); - gtkhtml_stream = gtk_html_begin_full(GTK_HTML(self), NULL, (char *) encoding, 0); + content_type = g_strdup_printf ("text/html; charset=%s", encoding); + gtkhtml_stream = gtk_html_begin_full(GTK_HTML(self), NULL, content_type, 0); + g_free (content_type); tny_stream = TNY_STREAM(modest_tny_stream_gtkhtml_new (gtkhtml_stream, GTK_HTML (self))); + modest_tny_stream_gtkhtml_set_max_size (MODEST_TNY_STREAM_GTKHTML (tny_stream), 128*1024); tny_stream_reset (tny_stream); tny_mime_part_decode_to_stream_async (TNY_MIME_PART (part), tny_stream, decode_to_stream_cb, - NULL, GINT_TO_POINTER (FALSE)); + NULL, self); g_object_unref (tny_stream); } @@ -491,15 +516,18 @@ set_text_part (ModestGtkhtmlMimePartView *self, TnyMimePart *part) gtkhtml_stream = gtk_html_begin(GTK_HTML(self)); tny_stream = TNY_STREAM(modest_tny_stream_gtkhtml_new (gtkhtml_stream, GTK_HTML (self))); + modest_tny_stream_gtkhtml_set_max_size (MODEST_TNY_STREAM_GTKHTML (tny_stream), 128*1024); text_to_html_stream = TNY_STREAM (modest_stream_text_to_html_new (tny_stream)); modest_stream_text_to_html_set_linkify_limit (MODEST_STREAM_TEXT_TO_HTML (text_to_html_stream), 64*1024); modest_stream_text_to_html_set_full_limit (MODEST_STREAM_TEXT_TO_HTML (text_to_html_stream), - 640*1024); + 128*1024); + modest_stream_text_to_html_set_line_limit (MODEST_STREAM_TEXT_TO_HTML (text_to_html_stream), + 1024); tny_mime_part_decode_to_stream_async (TNY_MIME_PART (part), text_to_html_stream, decode_to_stream_cb, - NULL, GINT_TO_POINTER (TRUE)); + NULL, self); g_object_unref (G_OBJECT(text_to_html_stream)); g_object_unref (G_OBJECT(tny_stream));