]> www.fi.muni.cz Git - evince.git/commitdiff
Allow printing only odd/even pages. Fixes bug #367289.
authorCarlos Garcia Campos <carlosgc@gnome.org>
Mon, 30 Oct 2006 15:45:15 +0000 (15:45 +0000)
committerCarlos Garcia Campos <carlosgc@src.gnome.org>
Mon, 30 Oct 2006 15:45:15 +0000 (15:45 +0000)
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.

ChangeLog
shell/ev-jobs.c
shell/ev-jobs.h
shell/ev-window.c
shell/ev-window.h

index 51dd184c2f83de3f92c4aa4eea010aef9efec9b3..2f88c96ed24506a5e225b90969a7d2b1dd2f8b2b 100644 (file)
--- 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:
index 1799602f28d1881e92286a4f7dbfebdd4a2442bd..3e2347ee54eee159acaa1021eadf32411026fac1 100644 (file)
@@ -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;
                        }
index a8db1e94b76c1158dea024f2f8a3cb4de0fd6da5..b91d8228f6b67ffceaea5e4ee7619ee80f615318 100644 (file)
@@ -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);
index 8443e6bb969ea37548d675400cf0739a00feccdb..a88816c859f8b66ec623373a7d9e36b263132191 100644 (file)
@@ -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),
index 4119965e70a98eddc271005d9a16f4ed590f1d65..f624fe5f49a84d856b03b32956f0ea36c88f7cde 100644 (file)
@@ -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;