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. --- (limited to 'shell/ev-jobs.c') 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; } -- cgit v0.9.1