talons

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

commit 231d62e1a23f4babd416ae91538a86066b363d19
parent 49a81f6a9c835b42bab774f7e7780b1d904f45fe
Author: Colin Leroy <colin@colino.net>
Date:   Tue, 24 Feb 2009 17:07:06 +0000

2009-02-24 [colin]	3.7.0cvs74

	* src/printing.c
		Don't print separation line if there
		are no headers

Diffstat:
MChangeLog | 6++++++
MPATCHSETS | 1+
Mconfigure.ac | 2+-
Msrc/printing.c | 49+++++++++++++++++++++++++++++++------------------
4 files changed, 39 insertions(+), 19 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,3 +1,9 @@ +2009-02-24 [colin] 3.7.0cvs74 + + * src/printing.c + Don't print separation line if there + are no headers + 2009-02-23 [cleroy] 3.7.0cvs73 * src/account.c diff --git a/PATCHSETS b/PATCHSETS @@ -3735,3 +3735,4 @@ ( cvs diff -u -r 1.179.2.240 -r 1.179.2.241 src/imap.c; ) > 3.7.0cvs71.patchset ( cvs diff -u -r 1.179.2.241 -r 1.179.2.242 src/imap.c; ) > 3.7.0cvs72.patchset ( cvs diff -u -r 1.61.2.93 -r 1.61.2.94 src/account.c; cvs diff -u -r 1.12.2.56 -r 1.12.2.57 src/action.c; cvs diff -u -r 1.27.2.44 -r 1.27.2.45 src/addr_compl.c; cvs diff -u -r 1.22.2.22 -r 1.22.2.23 src/addrbook.c; cvs diff -u -r 1.15.2.15 -r 1.15.2.16 src/addrcache.c; cvs diff -u -r 1.1.4.9 -r 1.1.4.10 src/addrcindex.c; cvs diff -u -r 1.5.2.9 -r 1.5.2.10 src/addrclip.c; cvs diff -u -r 1.1.2.15 -r 1.1.2.16 src/addrduplicates.c; cvs diff -u -r 1.9.2.28 -r 1.9.2.29 src/addressadd.c; cvs diff -u -r 1.60.2.132 -r 1.60.2.133 src/addressbook.c; cvs diff -u -r 1.1.2.16 -r 1.1.2.17 src/addressbook_foldersel.c; cvs diff -u -r 1.6.10.21 -r 1.6.10.22 src/addrharvest.c; cvs diff -u -r 1.28.2.41 -r 1.28.2.42 src/addrindex.c; cvs diff -u -r 1.13.2.19 -r 1.13.2.20 src/addritem.c; cvs diff -u -r 1.1.4.9 -r 1.1.4.10 src/addrquery.c; cvs diff -u -r 1.3.2.9 -r 1.3.2.10 src/addrselect.c; cvs diff -u -r 1.65.2.67 -r 1.65.2.68 src/codeconv.c; cvs diff -u -r 1.382.2.501 -r 1.382.2.502 src/compose.c; cvs diff -u -r 1.5.2.10 -r 1.5.2.11 src/customheader.c; cvs diff -u -r 1.14.2.55 -r 1.14.2.56 src/editaddress.c; cvs diff -u -r 1.1.2.8 -r 1.1.2.9 src/editaddress_other_attributes_ldap.c; cvs diff -u -r 1.11.2.21 -r 1.11.2.22 src/editgroup.c; cvs diff -u -r 1.8.2.34 -r 1.8.2.35 src/editldap.c; cvs diff -u -r 1.3.2.6 -r 1.3.2.7 src/enriched.c; cvs diff -u -r 1.5.2.27 -r 1.5.2.28 src/exporthtml.c; cvs diff -u -r 1.1.4.19 -r 1.1.4.20 src/exportldif.c; cvs diff -u -r 1.60.2.51 -r 1.60.2.52 src/filtering.c; cvs diff -u -r 1.213.2.189 -r 1.213.2.190 src/folder.c; cvs diff -u -r 1.26.2.42 -r 1.26.2.43 src/foldersel.c; cvs diff -u -r 1.3.2.18 -r 1.3.2.19 src/folderutils.c; cvs diff -u -r 1.207.2.212 -r 1.207.2.213 src/folderview.c; cvs diff -u -r 1.1.2.13 -r 1.1.2.14 src/gedit-print.c; cvs diff -u -r 1.12.2.27 -r 1.12.2.28 src/html.c; cvs diff -u -r 1.179.2.242 -r 1.179.2.243 src/imap.c; cvs diff -u -r 1.1.2.63 -r 1.1.2.64 src/imap_gtk.c; cvs diff -u -r 1.149.2.99 -r 1.149.2.100 src/inc.c; cvs diff -u -r 1.18.2.29 -r 1.18.2.30 src/jpilot.c; cvs diff -u -r 1.2.2.18 -r 1.2.2.19 src/ldapctrl.c; cvs diff -u -r 1.3.2.30 -r 1.3.2.31 src/ldapquery.c; cvs diff -u -r 1.4.2.17 -r 1.4.2.18 src/ldapserver.c; cvs diff -u -r 1.1.2.21 -r 1.1.2.22 src/ldapupdate.c; cvs diff -u -r 1.12.2.19 -r 1.12.2.20 src/ldif.c; cvs diff -u -r 1.3.4.6 -r 1.3.4.7 src/localfolder.c; cvs diff -u -r 1.115.2.220 -r 1.115.2.221 src/main.c; cvs diff -u -r 1.274.2.299 -r 1.274.2.300 src/mainwindow.c; cvs diff -u -r 1.75.2.64 -r 1.75.2.65 src/matcher.c; cvs diff -u -r 1.28.2.47 -r 1.28.2.48 src/mbox.c; cvs diff -u -r 1.94.2.199 -r 1.94.2.200 src/messageview.c; cvs diff -u -r 1.79.2.68 -r 1.79.2.69 src/mh.c; cvs diff -u -r 1.2.2.36 -r 1.2.2.37 src/mh_gtk.c; cvs diff -u -r 1.83.2.153 -r 1.83.2.154 src/mimeview.c; cvs diff -u -r 1.16.2.64 -r 1.16.2.65 src/msgcache.c; cvs diff -u -r 1.6.10.16 -r 1.6.10.17 src/mutt.c; cvs diff -u -r 1.101.2.59 -r 1.101.2.60 src/news.c; cvs diff -u -r 1.2.2.30 -r 1.2.2.31 src/news_gtk.c; cvs diff -u -r 1.5.2.22 -r 1.5.2.23 src/noticeview.c; cvs diff -u -r 1.6.2.15 -r 1.6.2.16 src/pine.c; cvs diff -u -r 1.56.2.65 -r 1.56.2.66 src/pop.c; cvs diff -u -r 1.105.2.150 -r 1.105.2.151 src/prefs_account.c; cvs diff -u -r 1.60.2.68 -r 1.60.2.69 src/prefs_actions.c; cvs diff -u -r 1.204.2.187 -r 1.204.2.188 src/prefs_common.c; cvs diff -u -r 1.59.2.77 -r 1.59.2.78 src/prefs_filtering.c; cvs diff -u -r 1.1.4.59 -r 1.1.4.60 src/prefs_filtering_action.c; cvs diff -u -r 1.1.2.15 -r 1.1.2.16 src/prefs_folder_column.c; cvs diff -u -r 1.52.2.73 -r 1.52.2.74 src/prefs_folder_item.c; cvs diff -u -r 1.10.2.40 -r 1.10.2.41 src/prefs_gtk.c; cvs diff -u -r 1.43.2.79 -r 1.43.2.80 src/prefs_matcher.c; cvs diff -u -r 1.1.2.31 -r 1.1.2.32 src/prefs_quote.c; cvs diff -u -r 1.1.2.24 -r 1.1.2.25 src/prefs_send.c; cvs diff -u -r 1.1.2.59 -r 1.1.2.60 src/prefs_summaries.c; cvs diff -u -r 1.10.2.24 -r 1.10.2.25 src/prefs_summary_column.c; cvs diff -u -r 1.12.2.68 -r 1.12.2.69 src/prefs_template.c; cvs diff -u -r 1.3.2.63 -r 1.3.2.64 src/prefs_themes.c; cvs diff -u -r 1.30.2.55 -r 1.30.2.56 src/prefs_toolbar.c; cvs diff -u -r 1.1.2.22 -r 1.1.2.23 src/printing.c; cvs diff -u -r 1.10.2.21 -r 1.10.2.22 src/privacy.c; cvs diff -u -r 1.47.2.50 -r 1.47.2.51 src/procheader.c; cvs diff -u -r 1.49.2.126 -r 1.49.2.127 src/procmime.c; cvs diff -u -r 1.150.2.113 -r 1.150.2.114 src/procmsg.c; cvs diff -u -r 1.8.2.38 -r 1.8.2.39 src/quote_fmt.c; cvs diff -u -r 1.1.4.7 -r 1.1.4.8 src/remotefolder.c; cvs diff -u -r 1.17.2.53 -r 1.17.2.54 src/send_message.c; cvs diff -u -r 1.9.2.24 -r 1.9.2.25 src/sourcewindow.c; cvs diff -u -r 1.5.2.24 -r 1.5.2.25 src/statusbar.c; cvs diff -u -r 1.25.2.65 -r 1.25.2.66 src/stock_pixmap.c; cvs diff -u -r 1.15.2.57 -r 1.15.2.58 src/summary_search.c; cvs diff -u -r 1.395.2.408 -r 1.395.2.409 src/summaryview.c; cvs diff -u -r 1.96.2.216 -r 1.96.2.217 src/textview.c; cvs diff -u -r 1.43.2.106 -r 1.43.2.107 src/toolbar.c; cvs diff -u -r 1.13.2.20 -r 1.13.2.21 src/undo.c; cvs diff -u -r 1.1.2.10 -r 1.1.2.11 src/uri_opener.c; cvs diff -u -r 1.14.2.17 -r 1.14.2.18 src/vcard.c; cvs diff -u -r 1.1.4.8 -r 1.1.4.9 src/common/base64.c; cvs diff -u -r 1.1.2.7 -r 1.1.2.8 src/common/claws.c; cvs diff -u -r 1.10.2.8 -r 1.10.2.9 src/common/hooks.c; cvs diff -u -r 1.13.2.36 -r 1.13.2.37 src/common/plugin.c; cvs diff -u -r 1.5.2.14 -r 1.5.2.15 src/common/prefs.c; cvs diff -u -r 1.23.2.22 -r 1.23.2.23 src/common/session.c; cvs diff -u -r 1.11.2.27 -r 1.11.2.28 src/common/smtp.c; cvs diff -u -r 1.13.2.44 -r 1.13.2.45 src/common/socket.c; cvs diff -u -r 1.1.4.6 -r 1.1.4.7 src/common/string_match.c; cvs diff -u -r 1.2.2.8 -r 1.2.2.9 src/common/stringtable.c; cvs diff -u -r 1.36.2.165 -r 1.36.2.166 src/common/utils.c; cvs diff -u -r 1.20.2.67 -r 1.20.2.68 src/common/utils.h; cvs diff -u -r 1.1.4.25 -r 1.1.4.26 src/common/xml.c; cvs diff -u -r 1.1.4.10 -r 1.1.4.11 src/common/xmlprops.c; cvs diff -u -r 1.2.2.26 -r 1.2.2.27 src/gtk/colorlabel.c; cvs diff -u -r 1.1.2.16 -r 1.1.2.17 src/gtk/combobox.c; cvs diff -u -r 1.1.2.18 -r 1.1.2.19 src/gtk/foldersort.c; cvs diff -u -r 1.9.2.66 -r 1.9.2.67 src/gtk/gtkaspell.c; cvs diff -u -r 1.1.2.8 -r 1.1.2.9 src/gtk/gtkcmclist.c; cvs diff -u -r 1.1.2.11 -r 1.1.2.12 src/gtk/gtkcmctree.c; cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/gtk/gtkcmoptionmenu.c; cvs diff -u -r 1.1.4.55 -r 1.1.4.56 src/gtk/gtksctree.c; cvs diff -u -r 1.1.4.10 -r 1.1.4.11 src/gtk/gtkshruler.c; cvs diff -u -r 1.1.2.11 -r 1.1.2.12 src/gtk/gtksourceprintjob.c; cvs diff -u -r 1.5.2.87 -r 1.5.2.88 src/gtk/gtkutils.c; cvs diff -u -r 1.5.2.16 -r 1.5.2.17 src/gtk/gtkvscrollbutton.c; cvs diff -u -r 1.1.4.34 -r 1.1.4.35 src/gtk/logwindow.c; cvs diff -u -r 1.5.2.40 -r 1.5.2.41 src/gtk/menu.c; cvs diff -u -r 1.5.2.57 -r 1.5.2.58 src/gtk/pluginwindow.c; cvs diff -u -r 1.12.2.52 -r 1.12.2.53 src/gtk/prefswindow.c; cvs diff -u -r 1.1.2.86 -r 1.1.2.87 src/gtk/quicksearch.c; cvs diff -u -r 1.1.2.4 -r 1.1.2.5 src/gtk/spell_entry.c; cvs diff -u -r 1.1.2.26 -r 1.1.2.27 src/plugins/pgpcore/select-keys.c; cvs diff -u -r 1.1.2.43 -r 1.1.2.44 src/plugins/pgpinline/pgpinline.c; cvs diff -u -r 1.1.2.54 -r 1.1.2.55 src/plugins/pgpmime/pgpmime.c; cvs diff -u -r 1.1.2.5 -r 1.1.2.6 src/plugins/smime/smime.c; cvs diff -u -r 1.23.2.53 -r 1.23.2.54 src/plugins/spamassassin/spamassassin_gtk.c; ) > 3.7.0cvs73.patchset +( cvs diff -u -r 1.1.2.23 -r 1.1.2.24 src/printing.c; ) > 3.7.0cvs74.patchset diff --git a/configure.ac b/configure.ac @@ -11,7 +11,7 @@ MINOR_VERSION=7 MICRO_VERSION=0 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=73 +EXTRA_VERSION=74 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/printing.c b/src/printing.c @@ -114,7 +114,7 @@ static GtkPrintSettings *settings = NULL; static GtkPageSetup *page_setup = NULL; /* other static functions */ -static void printing_layout_set_text_attributes(PrintData*, GtkPrintContext *); +static void printing_layout_set_text_attributes(PrintData*, GtkPrintContext *, gboolean *); static gboolean printing_is_pango_gdk_color_equal(PangoColor*, GdkColor*); static gint printing_text_iter_get_offset_bytes(PrintData *, const GtkTextIter*); @@ -844,6 +844,7 @@ static void printing_textview_cb_begin_print(GtkPrintOperation *op, GtkPrintCont gint num_header_lines; gint dummy; gboolean header_done; + gboolean has_headers = FALSE; const gchar *text; double line_height =0.; @@ -869,7 +870,7 @@ static void printing_textview_cb_begin_print(GtkPrintOperation *op, GtkPrintCont pango_layout_set_width(print_data->layout, width * PANGO_SCALE); pango_layout_set_text(print_data->layout, (char *)print_data->to_print, -1); - printing_layout_set_text_attributes(print_data, context); + printing_layout_set_text_attributes(print_data, context, &has_headers); num_lines = pango_layout_get_line_count(print_data->layout); @@ -884,20 +885,25 @@ static void printing_textview_cb_begin_print(GtkPrintOperation *op, GtkPrintCont header_end_pos = 0; header_done = FALSE; text = pango_layout_get_text(print_data->layout); - if(text && *text && *text != '\n') { - do { - if(text[0] == '\n' && (text[1] != '\0') && (text[1] == '\n')) - header_done = TRUE; - else - header_end_pos++; - text++; - } while(*text && !header_done); + + if (has_headers) { + if(text && *text && *text != '\n') { + do { + if(text[0] == '\n' && (text[1] != '\0') && (text[1] == '\n')) + header_done = TRUE; + else + header_end_pos++; + text++; + } while(*text && !header_done); + } + /* find line number for header end */ + pango_layout_index_to_line_x(print_data->layout, header_end_pos, 1, + &num_header_lines, &dummy); + /* line count is zero-based */ + num_header_lines++; + } else { + print_data->ypos_line = -1.0; } - /* find line number for header end */ - pango_layout_index_to_line_x(print_data->layout, header_end_pos, 1, - &num_header_lines, &dummy); - /* line count is zero-based */ - num_header_lines++; do { PangoRectangle logical_rect; @@ -922,7 +928,7 @@ static void printing_textview_cb_begin_print(GtkPrintOperation *op, GtkPrintCont page_height = 0; } - if(ii == num_header_lines) { + if(has_headers && ii == num_header_lines) { int y0, y1; pango_layout_iter_get_line_yrange(iter,&y0,&y1); print_data->ypos_line = (double)y0 + 1./3.*((double)(y1 - y0))/2.; @@ -1069,7 +1075,7 @@ static void printing_textview_cb_draw_page(GtkPrintOperation *op, GtkPrintContex start_pos = ((double)logical_rect.y) / PANGO_SCALE; /* Draw header separator line */ - if(ii == 0) { + if(ii == 0 && print_data->ypos_line >= 0) { cairo_surface_t *surface; surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, gtk_print_context_get_width(context)/print_data->zoom, @@ -1110,7 +1116,7 @@ static void printing_textview_cb_draw_page(GtkPrintOperation *op, GtkPrintContex debug_print("Sent page %d to printer\n", page_nr+1); } -static void printing_layout_set_text_attributes(PrintData *print_data, GtkPrintContext *context) +static void printing_layout_set_text_attributes(PrintData *print_data, GtkPrintContext *context, gboolean *has_headers) { GtkTextIter iter; PangoAttrList *attr_list; @@ -1119,6 +1125,9 @@ static void printing_layout_set_text_attributes(PrintData *print_data, GtkPrintC GtkTextView *text_view = GTK_TEXT_VIEW(print_data->renderer_data); GtkTextBuffer *buffer = gtk_text_view_get_buffer(text_view); + + *has_headers = FALSE; + attr_list = pango_attr_list_new(); if (print_data->sel_start < 0 || print_data->sel_end <= print_data->sel_start) { gtk_text_buffer_get_start_iter(buffer, &iter); @@ -1332,6 +1341,10 @@ static void printing_layout_set_text_attributes(PrintData *print_data, GtkPrintC attr = pango_attr_weight_new(weight); attr->start_index = printing_text_iter_get_offset_bytes(print_data, &iter); open_attrs = g_slist_prepend(open_attrs, attr); + /* Hack to see if the first char is bold -- indicates header */ + if (attr->start_index == 0 && weight == PANGO_WEIGHT_BOLD) { + *has_headers = TRUE; + } } } g_slist_free(tags);