talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit ebb4127098911debb0ca42fee34e89c3e3a19e61
parent c209879fb91f5987354f19bb485e85d899543bd1
Author: Colin Leroy <colin@colino.net>
Date:   Sat,  9 Nov 2019 23:13:33 +0100

Printing: only print as plain text if the part is of type text;
fix a segfault with default info icon when trying to print a non-text
part.

Diffstat:
Msrc/messageview.c | 14+++++++++++---
Msrc/printing.c | 16+++++++++-------
2 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/src/messageview.c b/src/messageview.c @@ -2182,9 +2182,17 @@ static void print_mimeview(MimeView *mimeview, gint sel_start, gint sel_end, gin viewer->print(viewer); return; } else { - /* Force text rendering */ - mimeview_show_part_as_text(mimeview, - mimeview_get_selected_part(mimeview)); + /* Force text rendering if possible */ + MimeInfo *mimepart; + + mimepart = mimeview_get_selected_part(mimeview); + if (mimepart == NULL + || (mimepart->type != MIMETYPE_TEXT && mimepart->type != MIMETYPE_MESSAGE)) { + alertpanel_warning(_("Cannot print: the message doesn't " + "contain text.")); + return; + } + mimeview_show_part_as_text(mimeview, mimepart); } } if (sel_start != -1 && sel_end != -1) { diff --git a/src/printing.c b/src/printing.c @@ -1144,16 +1144,18 @@ static void printing_textview_cb_draw_page(GtkPrintOperation *op, GtkPrintContex GdkPixbuf *pixbuf = gtk_image_get_pixbuf(print_data->avatar); gdouble startx, starty; - startx = gtk_print_context_get_width(context)/print_data->zoom; + if (pixbuf != NULL) { + startx = gtk_print_context_get_width(context)/print_data->zoom; - startx -= ((double)gdk_pixbuf_get_width(pixbuf)); + startx -= ((double)gdk_pixbuf_get_width(pixbuf)); - starty = start_pos; + starty = start_pos; - surface = pixbuf_to_surface(pixbuf); - cairo_set_source_surface (cr, surface, startx, starty); - cairo_paint (cr); - cairo_surface_destroy (surface); + surface = pixbuf_to_surface(pixbuf); + cairo_set_source_surface (cr, surface, startx, starty); + cairo_paint (cr); + cairo_surface_destroy (surface); + } } pango_layout_iter_free(iter);