Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
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
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.
-rw-r--r--ChangeLog9
-rw-r--r--shell/ev-jobs.c47
-rw-r--r--shell/ev-jobs.h2
-rw-r--r--shell/ev-window.c29
-rw-r--r--shell/ev-window.h6
5 files changed, 70 insertions, 23 deletions
diff --git a/ChangeLog b/ChangeLog
index 51dd184..2f88c96 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+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.
+
2006-10-29 Wouter Bolsterlee <wbolster@cvs.gnome.org>
* 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;