From 133ed2fb65129c8a36f674c06ae693f8ef77f77a Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Mon, 30 Oct 2006 15:45:15 +0000 Subject: Allow printing only odd/even pages. Fixes bug #367289. 2006-10-30 Carlos Garcia Campos * shell/ev-jobs.[ch]: (ev_job_print_new), (ev_print_job_print_page_in_range), (ev_print_job_print_page_in_set), (ev_job_print_do_page): * shell/ev-window.[ch]: (ev_window_print_dialog_response_cb): Allow printing only odd/even pages. Fixes bug #367289. --- diff --git a/ChangeLog b/ChangeLog index 51dd184..2f88c96 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2006-10-30 Carlos Garcia Campos + + * shell/ev-jobs.[ch]: (ev_job_print_new), + (ev_print_job_print_page_in_range), (ev_print_job_print_page_in_set), + (ev_job_print_do_page): + * shell/ev-window.[ch]: (ev_window_print_dialog_response_cb): + + Allow printing only odd/even pages. Fixes bug #367289. + 2006-10-29 Wouter Bolsterlee * test/test1.py: diff --git a/shell/ev-jobs.c b/shell/ev-jobs.c index 1799602..3e2347e 100644 --- a/shell/ev-jobs.c +++ b/shell/ev-jobs.c @@ -527,14 +527,15 @@ ev_job_xfer_run (EvJobXfer *job) } EvJob * -ev_job_print_new (EvDocument *document, - gdouble width, - gdouble height, - EvPrintRange *ranges, - gint n_ranges, - gint copies, - gdouble collate, - gdouble reverse) +ev_job_print_new (EvDocument *document, + gdouble width, + gdouble height, + EvPrintRange *ranges, + gint n_ranges, + EvPrintPageSet page_set, + gint copies, + gdouble collate, + gdouble reverse) { EvJobPrint *job; @@ -550,6 +551,8 @@ ev_job_print_new (EvDocument *document, job->ranges = ranges; job->n_ranges = n_ranges; + + job->page_set = page_set; job->copies = copies; job->collate = collate; @@ -596,8 +599,8 @@ ev_print_job_get_last_page (EvJobPrint *job) } static gboolean -ev_print_job_print_page (EvJobPrint *job, - gint page) +ev_print_job_print_page_in_range (EvJobPrint *job, + gint page) { gint i; @@ -610,6 +613,22 @@ ev_print_job_print_page (EvJobPrint *job, return FALSE; } +static gboolean +ev_print_job_print_page_in_set (EvJobPrint *job, + gint page) +{ + switch (job->page_set) { + case EV_PRINT_PAGE_SET_EVEN: + return page % 2 == 0; + case EV_PRINT_PAGE_SET_ODD: + return page % 2 != 0; + case EV_PRINT_PAGE_SET_ALL: + return TRUE; + } + + return FALSE; +} + static void ev_job_print_do_page (EvJobPrint *job, gint page) { @@ -666,7 +685,13 @@ ev_job_print_run (EvJobPrint *job) gint n_pages = 1; gint j; - if (job->n_ranges > 0 && !ev_print_job_print_page (job, page)) { + if (job->n_ranges > 0 && + !ev_print_job_print_page_in_range (job, page)) { + page += step; + continue; + } + + if (!ev_print_job_print_page_in_set (job, page + 1)) { page += step; continue; } diff --git a/shell/ev-jobs.h b/shell/ev-jobs.h index a8db1e9..b91d822 100644 --- a/shell/ev-jobs.h +++ b/shell/ev-jobs.h @@ -191,6 +191,7 @@ struct _EvJobPrint gchar *temp_file; EvPrintRange *ranges; gint n_ranges; + EvPrintPageSet page_set; gint copies; gboolean collate; gboolean reverse; @@ -253,6 +254,7 @@ EvJob *ev_job_print_new (EvDocument *document, gdouble height, EvPrintRange *ranges, gint n_ranges, + EvPrintPageSet page_set, gint copies, gdouble collate, gdouble reverse); diff --git a/shell/ev-window.c b/shell/ev-window.c index 8443e6b..a88816c 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -1519,17 +1519,18 @@ ev_window_print_dialog_response_cb (GtkDialog *dialog, gint response, EvWindow *window) { - EvPrintRange *ranges = NULL; - EvPageCache *page_cache; - gint n_ranges = 0; - gint copies; - gboolean collate; - gboolean reverse; - gdouble scale; - gint current_page; - gint width; - gint height; - GtkPrintPages print_pages; + EvPrintRange *ranges = NULL; + EvPrintPageSet page_set; + EvPageCache *page_cache; + gint n_ranges = 0; + gint copies; + gboolean collate; + gboolean reverse; + gdouble scale; + gint current_page; + gint width; + gint height; + GtkPrintPages print_pages; if (response != GTK_RESPONSE_OK) { gtk_widget_destroy (GTK_WIDGET (dialog)); @@ -1594,6 +1595,8 @@ ev_window_print_dialog_response_cb (GtkDialog *dialog, break; } + page_set = (EvPrintPageSet)gtk_print_settings_get_page_set (window->priv->print_settings); + scale = gtk_print_settings_get_scale (window->priv->print_settings) * 0.01; page_cache = ev_page_cache_get (window->priv->document); ev_page_cache_get_size (page_cache, @@ -1609,7 +1612,9 @@ ev_window_print_dialog_response_cb (GtkDialog *dialog, (gdouble)width, (gdouble)height, ranges, n_ranges, - copies, collate, reverse); + page_set, + copies, collate, + reverse); g_signal_connect (window->priv->print_job, "finished", G_CALLBACK (ev_window_print_job_cb), diff --git a/shell/ev-window.h b/shell/ev-window.h index 4119965..f624fe5 100644 --- a/shell/ev-window.h +++ b/shell/ev-window.h @@ -43,6 +43,12 @@ typedef struct { gint end; } EvPrintRange; +typedef enum { + EV_PRINT_PAGE_SET_ALL, + EV_PRINT_PAGE_SET_EVEN, + EV_PRINT_PAGE_SET_ODD +} EvPrintPageSet; + typedef struct _EvWindow EvWindow; typedef struct _EvWindowClass EvWindowClass; typedef struct _EvWindowPrivate EvWindowPrivate; -- cgit v0.9.1