? mail.error Index: mail/em-format-html-display.c =================================================================== --- mail/em-format-html-display.c.orig +++ mail/em-format-html-display.c @@ -2580,3 +2580,161 @@ efhd_format_optional(EMFormat *emf, Came 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 + "

"); + + 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, + "

\n"); + camel_stream_write_string(stream, + "" + ""); + camel_stream_printf(stream, "
", classid); + + g_free(html); + + camel_stream_write_string(stream, +/* "\n" */ + EM_FORMAT_HTML_VPAD); + + g_free(classid); +} Index: mail/em-mailer-prefs.c =================================================================== --- mail/em-mailer-prefs.c.orig +++ mail/em-mailer-prefs.c @@ -469,6 +469,16 @@ mlimit_count_changed (GtkSpinButton *spi } 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; Index: mail/evolution-mail.schemas.in.in =================================================================== --- mail/evolution-mail.schemas.in.in.orig +++ mail/evolution-mail.schemas.in.in @@ -529,7 +529,36 @@ - + + + /schemas/apps/evolution/mail/display/force_message_limit + /apps/evolution/mail/display/force_message_limit + evolution-mail + bool + true + + Allows evolution to display text part of limited size + + Enable to render message text part of limited size. + + + + + + /schemas/apps/evolution/mail/display/message_text_part_limit + /apps/evolution/mail/display/message_text_part_limit + evolution-mail + int + 4096 + + Text message part limit + + 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. + + + + /schemas/apps/evolution/mail/display/thread_subject /apps/evolution/mail/display/thread_subject Index: mail/mail-config.c =================================================================== --- mail/mail-config.c.orig +++ mail/mail-config.c @@ -358,6 +358,20 @@ gconf_mlimit_changed (GConfClient *clien } 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) { @@ -572,6 +586,15 @@ mail_config_get_message_limit (void) return config->mlimit_size; } +int +mail_config_get_message_limit (void) +{ + if (!config->mlimit) + return -1; + + return config->mlimit_size; +} + const char * mail_config_get_label_color_by_name (const char *name) { Index: mail/mail-config.glade =================================================================== --- mail/mail-config.glade.orig +++ mail/mail-config.glade @@ -5038,6 +5038,82 @@ For example: "Work" or "P + + True + False + 4 + + + + True + True + Do not format text contents in mails if the text si_ze exceeds + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 0 + False + False + + + + + + True + True + 1 + 0 + False + GTK_UPDATE_ALWAYS + False + False + 0 0 30000 1 10 10 + + + 0 + False + True + + + + + + True + KB + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + 0 + False + False + + + + True False