From 547694ef0ec25909e96db2f70b9ed9abd20b5a0f Mon Sep 17 00:00:00 2001 From: Marek Kasik Date: Thu, 21 Aug 2008 11:30:46 +0000 Subject: [PATCH] =?UTF-8?q?Bug=20545875=20=E2=80=93=20evo=20crashed=20when?= =?UTF-8?q?=20trying=20to=20print=20pages=206-7=20of=20a=201=20page?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2008-08-21 Marek Kasik Bug 545875 – evo crashed when trying to print pages 6-7 of a 1 page email * gtk/gtkprintoperation.c: Clamp page ranges to correct ranges svn path=/trunk/; revision=21177 --- ChangeLog | 7 +++++++ gtk/gtkprintoperation.c | 42 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/ChangeLog b/ChangeLog index f0a74c187e..f7fc4b6620 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-08-21 Marek Kasik + + Bug 545875 – evo crashed when trying to print pages 6-7 of a 1 page + email + + * gtk/gtkprintoperation.c: Clamp page ranges to correct ranges + 2008-08-21 Marek Kasik * ChangeLog: changelog update for previous commit diff --git a/gtk/gtkprintoperation.c b/gtk/gtkprintoperation.c index 78505c7fd7..316698da29 100644 --- a/gtk/gtkprintoperation.c +++ b/gtk/gtkprintoperation.c @@ -1926,6 +1926,46 @@ find_range (PrintPagesData *data) } } +static void +clamp_page_ranges (PrintPagesData *data) +{ + GtkPrintOperationPrivate *priv; + gint num_of_correct_ranges; + gint i; + + priv = data->op->priv; + + num_of_correct_ranges = 0; + + for (i = 0; i < data->num_ranges; i++) + if ((data->ranges[i].start >= 0) && + (data->ranges[i].start < priv->nr_of_pages) && + (data->ranges[i].end >= 0) && + (data->ranges[i].end < priv->nr_of_pages)) + { + data->ranges[num_of_correct_ranges] = data->ranges[i]; + num_of_correct_ranges++; + } + else if ((data->ranges[i].start >= 0) && + (data->ranges[i].start < priv->nr_of_pages) && + (data->ranges[i].end >= priv->nr_of_pages)) + { + data->ranges[i].end = priv->nr_of_pages - 1; + data->ranges[num_of_correct_ranges] = data->ranges[i]; + num_of_correct_ranges++; + } + else if ((data->ranges[i].end >= 0) && + (data->ranges[i].end < priv->nr_of_pages) && + (data->ranges[i].start < 0)) + { + data->ranges[i].start = 0; + data->ranges[num_of_correct_ranges] = data->ranges[i]; + num_of_correct_ranges++; + } + + data->num_ranges = num_of_correct_ranges; +} + static gboolean increment_page_sequence (PrintPagesData *data) { @@ -2139,6 +2179,8 @@ print_pages_idle (gpointer user_data) data->ranges[0].end = priv->nr_of_pages - 1; } + clamp_page_ranges (data); + if (priv->manual_reverse) { data->range = data->num_ranges - 1;