]> www.fi.muni.cz Git - evince.git/commitdiff
[printing] Set page orientation of each page when printing
authorAdrian Johnson <ajohnson@redneon.com>
Sat, 24 Oct 2009 08:14:02 +0000 (18:44 +1030)
committerCarlos Garcia Campos <carlosgc@gnome.org>
Sun, 25 Oct 2009 12:14:55 +0000 (13:14 +0100)
so that documents with mixed portrait/landscape pages print correctly.
Fixes bgo#599470.

shell/ev-print-operation.c

index 8dbe6c5218f880a11834b15de7c05f25ea70733e..9ea42c1b99c0d92e3aab6f9d53b57de5c0dbe6ef 100644 (file)
@@ -1641,6 +1641,23 @@ print_job_cancelled (EvJobPrint            *job,
        gtk_print_operation_cancel (print->op);
 }
 
+static void
+ev_print_operation_print_request_page_setup (EvPrintOperationPrint *print,
+                                            GtkPrintContext       *context,
+                                            gint                   page_nr,
+                                            GtkPageSetup          *setup)
+{
+       EvPrintOperation *op = EV_PRINT_OPERATION (print);
+       gdouble           width, height;
+
+       ev_document_get_page_size (op->document, page_nr,
+                                  &width, &height);
+       if (width > height)
+               gtk_page_setup_set_orientation (setup, GTK_PAGE_ORIENTATION_LANDSCAPE);
+       else
+               gtk_page_setup_set_orientation (setup, GTK_PAGE_ORIENTATION_PORTRAIT);
+}
+
 static void
 ev_print_operation_print_draw_page (EvPrintOperationPrint *print,
                                    GtkPrintContext       *context,
@@ -1727,6 +1744,9 @@ ev_print_operation_print_init (EvPrintOperationPrint *print)
        g_signal_connect_swapped (print->op, "status_changed",
                                  G_CALLBACK (ev_print_operation_print_status_changed),
                                  print);
+       g_signal_connect_swapped (print->op, "request_page_setup",
+                                 G_CALLBACK (ev_print_operation_print_request_page_setup),
+                                 print);
        gtk_print_operation_set_allow_async (print->op, TRUE);
 }