Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/ev-jobs.c
diff options
context:
space:
mode:
authorCarlos 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)
commit133ed2fb65129c8a36f674c06ae693f8ef77f77a (patch)
treed8a889dd4f95c3ea8038a8184622c0e6258f0d1e /shell/ev-jobs.c
parent6375978c4509d62064b9208ad2063c8bb7d4d0e9 (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.c47
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;
}