diff options
author | Carlos Garcia Campos <carlosgc@gnome.org> | 2006-10-30 15:45:15 (GMT) |
---|---|---|
committer | Carlos Garcia Campos <carlosgc@src.gnome.org> | 2006-10-30 15:45:15 (GMT) |
commit | 133ed2fb65129c8a36f674c06ae693f8ef77f77a (patch) | |
tree | d8a889dd4f95c3ea8038a8184622c0e6258f0d1e /shell/ev-jobs.c | |
parent | 6375978c4509d62064b9208ad2063c8bb7d4d0e9 (diff) |
Allow printing only odd/even pages. Fixes bug #367289.
2006-10-30 Carlos Garcia Campos <carlosgc@gnome.org>
* 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.
Diffstat (limited to 'shell/ev-jobs.c')
-rw-r--r-- | shell/ev-jobs.c | 47 |
1 files changed, 36 insertions, 11 deletions
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; } |