Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorCarlos Garcia Campos <carlosgc@gnome.org>2007-07-29 14:15:17 (GMT)
committer Carlos Garcia Campos <carlosgc@src.gnome.org>2007-07-29 14:15:17 (GMT)
commit85fa11d86616d3a9c5a5cfeba78dd7aa72e7997a (patch)
treec8641298dbaafcb9c5440ed0fa7d0cbc9ed37b92 /shell
parent5f6b1add282b53fc4544d79e9a6fb635c6754058 (diff)
Allow printing multiple pages per sheet. Fixes bug #395573.
2007-07-29 Carlos Garcia Campos <carlosgc@gnome.org> * configure.ac: * backend/pdf/ev-poppler.cc: (pdf_print_context_free), (pdf_document_file_exporter_begin), (pdf_document_file_exporter_do_page), (pdf_document_file_exporter_get_capabilities): * libdocument/ev-file-exporter.h: * shell/ev-jobs.[ch]: (ev_job_print_new), (ev_job_print_run): * shell/ev-window.c: (ev_window_print_send), (ev_window_print_dialog_response_cb): Allow printing multiple pages per sheet. Fixes bug #395573. svn path=/trunk/; revision=2591
Diffstat (limited to 'shell')
-rw-r--r--shell/ev-jobs.c6
-rw-r--r--shell/ev-jobs.h2
-rw-r--r--shell/ev-window.c6
3 files changed, 14 insertions, 0 deletions
diff --git a/shell/ev-jobs.c b/shell/ev-jobs.c
index d5d45f2..8e140f8 100644
--- a/shell/ev-jobs.c
+++ b/shell/ev-jobs.c
@@ -326,6 +326,8 @@ render_finished_cb (EvDocument *document,
/* FIXME: ps backend should be ported to cairo */
job->surface = ev_document_misc_surface_from_pixbuf (pixbuf);
+ job->page_ready = TRUE;
+ g_signal_emit (job, job_render_signals[PAGE_READY], 0);
EV_JOB (job)->finished = TRUE;
ev_job_finished (EV_JOB (job));
}
@@ -562,6 +564,7 @@ ev_job_print_new (EvDocument *document,
EvPrintRange *ranges,
gint n_ranges,
EvPrintPageSet page_set,
+ gint pages_per_sheet,
gint copies,
gdouble collate,
gdouble reverse)
@@ -584,6 +587,8 @@ ev_job_print_new (EvDocument *document,
job->n_ranges = n_ranges;
job->page_set = page_set;
+
+ job->pages_per_sheet = pages_per_sheet;
job->copies = copies;
job->collate = collate;
@@ -711,6 +716,7 @@ ev_job_print_run (EvJobPrint *job)
fc.paper_width = job->width;
fc.paper_height = job->height;
fc.duplex = FALSE;
+ fc.pages_per_sheet = job->pages_per_sheet;
ev_document_doc_mutex_lock ();
ev_file_exporter_begin (EV_FILE_EXPORTER (document), &fc);
diff --git a/shell/ev-jobs.h b/shell/ev-jobs.h
index c0a4036..1f348d8 100644
--- a/shell/ev-jobs.h
+++ b/shell/ev-jobs.h
@@ -199,6 +199,7 @@ struct _EvJobPrint
gint n_ranges;
EvPrintPageSet page_set;
gint copies;
+ gint pages_per_sheet;
gboolean collate;
gboolean reverse;
gdouble width;
@@ -264,6 +265,7 @@ EvJob *ev_job_print_new (EvDocument *document,
EvPrintRange *ranges,
gint n_ranges,
EvPrintPageSet page_set,
+ gint pages_per_sheet,
gint copies,
gdouble collate,
gdouble reverse);
diff --git a/shell/ev-window.c b/shell/ev-window.c
index 7f928a5..233067b 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -2220,6 +2220,8 @@ ev_window_print_send (EvWindow *window,
gtk_print_settings_set_collate (settings, FALSE);
if (capabilities & EV_FILE_EXPORTER_CAN_REVERSE)
gtk_print_settings_set_reverse (settings, FALSE);
+ if (capabilities & EV_FILE_EXPORTER_CAN_NUMBER_UP)
+ gtk_print_settings_set_number_up (settings, 1);
if (window->priv->print_preview) {
gchar *uri;
@@ -2294,6 +2296,7 @@ ev_window_print_dialog_response_cb (GtkDialog *dialog,
EvPrintPageSet page_set;
gint n_ranges = 0;
gint copies;
+ gint pages_per_sheet;
gboolean collate;
gboolean reverse;
gdouble scale;
@@ -2385,6 +2388,8 @@ ev_window_print_dialog_response_cb (GtkDialog *dialog,
height *= scale;
}
+ pages_per_sheet = gtk_print_settings_get_number_up (window->priv->print_settings);
+
copies = gtk_print_settings_get_n_copies (window->priv->print_settings);
collate = gtk_print_settings_get_collate (window->priv->print_settings);
reverse = gtk_print_settings_get_reverse (window->priv->print_settings);
@@ -2394,6 +2399,7 @@ ev_window_print_dialog_response_cb (GtkDialog *dialog,
width, height,
ranges, n_ranges,
page_set,
+ pages_per_sheet,
copies, collate,
reverse);