Modified webpage: now tinymail repository is in gitorious.
[modest] / src / widgets / modest-gtkhtml-mime-part-view.c
index 65aeb02..37b97bc 100644 (file)
@@ -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,6 @@ 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);
 
 #ifdef MODEST_TOOLKIT_HILDON2
 #ifdef HAVE_GTK_HTML_SET_MAX_IMAGE_SIZE
@@ -288,6 +297,9 @@ modest_gtkhtml_mime_part_view_init (ModestGtkhtmlMimePartView *self)
 #ifdef HAVE_GTK_HTML_SET_ALLOW_DND
        gtk_html_set_allow_dnd       (GTK_HTML(self), FALSE);
 #endif
+#ifdef HAVE_GTK_HTML_SET_WORD_CHAR_WRAPPING
+       gtk_html_set_word_char_wrapping (GTK_HTML (self), TRUE);
+#endif
 #endif
 
 #ifdef HAVE_GTK_HTML_SET_DEFAULT_ENGINE
@@ -445,13 +457,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,13 +480,16 @@ 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);
@@ -475,7 +497,7 @@ set_html_part (ModestGtkhtmlMimePartView *self, TnyMimePart *part, const gchar *
 
        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);
 }
 
@@ -503,7 +525,7 @@ set_text_part (ModestGtkhtmlMimePartView *self, TnyMimePart *part)
 
        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));