[kdegraphics] * Mon Jun 06 2011 Kevin Kofler <Kevin at tigcc.ticalc.org> 4.6.3-2 - fix printing of landscape document

Kevin Kofler kkofler at fedoraproject.org
Sun Jun 5 23:12:43 UTC 2011


commit b1e217c2df42e8d7d9a0ebfecdb0043a075e9f5a
Author: Kevin Kofler <Kevin at tigcc.ticalc.org>
Date:   Mon Jun 6 01:12:21 2011 +0200

    * Mon Jun 06 2011 Kevin Kofler <Kevin at tigcc.ticalc.org> 4.6.3-2
    - fix printing of landscape documents in Okular (#509645, kde#181290)

 kdegraphics-4.6.3-okular-landscape.patch |  317 ++++++++++++++++++++++++++++++
 kdegraphics.spec                         |    9 +-
 2 files changed, 325 insertions(+), 1 deletions(-)
---
diff --git a/kdegraphics-4.6.3-okular-landscape.patch b/kdegraphics-4.6.3-okular-landscape.patch
new file mode 100644
index 0000000..e61b266
--- /dev/null
+++ b/kdegraphics-4.6.3-okular-landscape.patch
@@ -0,0 +1,317 @@
+diff -ur kdegraphics-4.6.3/okular/core/document.cpp kdegraphics-4.6.3-okular-landscape/okular/core/document.cpp
+--- kdegraphics-4.6.3/okular/core/document.cpp	2011-02-12 15:48:53.000000000 +0100
++++ kdegraphics-4.6.3-okular-landscape/okular/core/document.cpp	2011-06-06 01:07:43.000000000 +0200
+@@ -3456,6 +3456,28 @@
+     return true;
+ }
+ 
++QPrinter::Orientation Document::orientation() const
++{
++    double width, height;
++    int landscape, portrait;
++    const Okular::Page *currentPage;
++
++    // if some pages are landscape and others are not, the most common wins, as
++    // QPrinter does not accept a per-page setting
++    landscape = 0;
++    portrait = 0;
++    for (uint i = 0; i < pages(); i++)
++    {
++        currentPage = page(i);
++        width = currentPage->width();
++        height = currentPage->height();
++        if (currentPage->orientation() == Okular::Rotation90 || currentPage->orientation() == Okular::Rotation270) qSwap(width, height);
++        if (width > height) landscape++;
++        else portrait++;
++    }
++    return (landscape > portrait) ? QPrinter::Landscape : QPrinter::Portrait;
++}
++
+ void DocumentPrivate::requestDone( PixmapRequest * req )
+ {
+     if ( !req )
+diff -ur kdegraphics-4.6.3/okular/core/document.h kdegraphics-4.6.3-okular-landscape/okular/core/document.h
+--- kdegraphics-4.6.3/okular/core/document.h	2010-08-11 23:01:33.000000000 +0200
++++ kdegraphics-4.6.3-okular-landscape/okular/core/document.h	2011-06-06 01:07:43.000000000 +0200
+@@ -19,11 +19,11 @@
+ #include <QtCore/QObject>
+ #include <QtCore/QStringList>
+ #include <QtCore/QVector>
++#include <QtGui/QPrinter>
+ #include <QtXml/QDomDocument>
+ 
+ #include <kmimetype.h>
+ 
+-class QPrinter;
+ class QPrintDialog;
+ class KComponentData;
+ class KBookmark;
+@@ -604,6 +604,15 @@
+         */
+         const SourceReference * dynamicSourceReference( int pageNr, double absX, double absY );
+ 
++        /**
++         * Returns the orientation of the document (for printing purposes). This
++         * is used in the KPart to initialize the print dialog and in the
++         * generators to check whether the document needs to be rotated or not.
++         *
++         * @since 0.13 (KDE 4.7)
++        */
++        QPrinter::Orientation orientation() const;
++
+ 
+     public Q_SLOTS:
+         /**
+diff -ur kdegraphics-4.6.3/okular/core/fileprinter.cpp kdegraphics-4.6.3-okular-landscape/okular/core/fileprinter.cpp
+--- kdegraphics-4.6.3/okular/core/fileprinter.cpp	2010-06-04 21:04:05.000000000 +0200
++++ kdegraphics-4.6.3-okular-landscape/okular/core/fileprinter.cpp	2011-06-06 01:07:43.000000000 +0200
+@@ -34,20 +34,26 @@
+ using namespace Okular;
+ 
+ int FilePrinter::printFile( QPrinter &printer, const QString file, FileDeletePolicy fileDeletePolicy,
+-                            PageSelectPolicy pageSelectPolicy, const QString &pageRange )
++                            PageSelectPolicy pageSelectPolicy, const QString &pageRange,  
++                            QPrinter::Orientation documentOrientation )
+ {
+     FilePrinter fp;
+-    return fp.doPrintFiles( printer, QStringList( file ), fileDeletePolicy, pageSelectPolicy, pageRange );
++    return fp.doPrintFiles( printer, QStringList( file ), fileDeletePolicy, pageSelectPolicy, pageRange, 
++                            documentOrientation );
+ }
+ 
+ int FilePrinter::printFiles( QPrinter &printer, const QStringList &fileList, FileDeletePolicy fileDeletePolicy )
+ {
+     FilePrinter fp;
+-    return fp.doPrintFiles( printer, fileList, fileDeletePolicy, FilePrinter::ApplicationSelectsPages, QString() );
++    // FIXME: Does anything actually use this function? If so, we need to fix it
++    //        to support a list of orientations for each document.
++    return fp.doPrintFiles( printer, fileList, fileDeletePolicy, FilePrinter::ApplicationSelectsPages, QString(),
++                            QPrinter::Portrait );
+ }
+ 
+ int FilePrinter::doPrintFiles( QPrinter &printer, QStringList fileList, FileDeletePolicy fileDeletePolicy,
+-                               PageSelectPolicy pageSelectPolicy, const QString &pageRange )
++                               PageSelectPolicy pageSelectPolicy, const QString &pageRange,
++                               QPrinter::Orientation documentOrientation )
+ {
+ 
+     if ( fileList.size() < 1 ) {
+@@ -135,7 +141,7 @@
+ 
+         bool useCupsOptions = cupsAvailable();
+         argList = printArguments( printer, fileDeletePolicy, pageSelectPolicy, 
+-                                  useCupsOptions, pageRange, exe ) << fileList;
++                                  useCupsOptions, pageRange, exe, documentOrientation ) << fileList;
+         kDebug(OkularDebug) << "Executing" << exe << "with arguments" << argList;
+ 
+         ret = KProcess::execute( exe, argList );
+@@ -360,7 +366,8 @@
+ 
+ QStringList FilePrinter::printArguments( QPrinter &printer, FileDeletePolicy fileDeletePolicy,
+                                          PageSelectPolicy pageSelectPolicy, bool useCupsOptions,
+-                                         const QString &pageRange, const QString &version )
++                                         const QString &pageRange, const QString &version, 
++                                         QPrinter::Orientation documentOrientation )
+ {
+     QStringList argList;
+ 
+@@ -380,8 +387,8 @@
+         argList << pages( printer, pageSelectPolicy, pageRange, useCupsOptions, version );
+     }
+ 
+-    if ( useCupsOptions && ! cupsOptions( printer ).isEmpty() ) {
+-        argList << cupsOptions( printer );
++    if ( useCupsOptions && ! cupsOptions( printer, documentOrientation ).isEmpty() ) {
++        argList << cupsOptions( printer, documentOrientation);
+     }
+ 
+     if ( ! deleteFile( printer, fileDeletePolicy, version ).isEmpty() ) {
+@@ -484,7 +491,7 @@
+     return QStringList(); // AllPages
+ }
+ 
+-QStringList FilePrinter::cupsOptions( QPrinter &printer )
++QStringList FilePrinter::cupsOptions( QPrinter &printer, QPrinter::Orientation documentOrientation )
+ {
+     QStringList optionList;
+ 
+@@ -492,8 +499,8 @@
+         optionList << optionMedia( printer );
+     }
+ 
+-    if ( ! optionOrientation( printer ).isEmpty() ) {
+-        optionList << optionOrientation( printer );
++    if ( ! optionOrientation( printer, documentOrientation ).isEmpty() ) {
++        optionList << optionOrientation( printer, documentOrientation );
+     }
+ 
+     if ( ! optionDoubleSidedPrinting( printer ).isEmpty() ) {
+@@ -597,12 +604,17 @@
+     }
+ }
+ 
+-QStringList FilePrinter::optionOrientation( QPrinter &printer )
++QStringList FilePrinter::optionOrientation( QPrinter &printer, QPrinter::Orientation documentOrientation )
+ {
+-    switch ( printer.orientation() ) {
+-    case QPrinter::Portrait:   return QStringList("-o") << "portrait";
+-    case QPrinter::Landscape:  return QStringList("-o") << "landscape";
+-    default:                   return QStringList();
++    // portrait and landscape options rotate the document according to the document orientation
++    // If we want to print a landscape document as one would expect it, we have to pass the
++    // portrait option so that the document is not rotated additionaly
++    if ( printer.orientation() == documentOrientation ) {
++        // the user wants the document printed as is
++        return QStringList("-o") << "portrait";
++    } else {
++        // the user expects the document being rotated by 90 degrees
++        return QStringList("-o") << "landscape";
+     }
+ }
+ 
+diff -ur kdegraphics-4.6.3/okular/core/fileprinter.h kdegraphics-4.6.3-okular-landscape/okular/core/fileprinter.h
+--- kdegraphics-4.6.3/okular/core/fileprinter.h	2010-06-04 21:04:05.000000000 +0200
++++ kdegraphics-4.6.3-okular-landscape/okular/core/fileprinter.h	2011-06-06 01:08:32.000000000 +0200
+@@ -16,11 +16,11 @@
+ 
+ #include <QtCore/QList>
+ #include <QtCore/QString>
++#include <QtGui/QPrinter>
+ 
+ #include <okular/core/okular_export.h>
+ #include <okular/core/generator.h>
+ 
+-class QPrinter;
+ class QSize;
+ 
+ namespace Okular {
+@@ -58,6 +58,7 @@
+      * @param fileDeletePolicy if the application or system deletes the file
+      * @param pageSelectPolicy if the application or system selects the pages to print
+      * @param pageRange page range to print if SystemSlectsPages and user chooses Selection in Print Dialog
++     * @param documentOrientation the orientation stored in the document itself (Default is Portrait)
+      *
+      * @returns Returns exit code:
+      *          -9 if lpr not found
+@@ -73,7 +74,9 @@
+     static int printFile( QPrinter &printer, const QString file,
+                           FileDeletePolicy fileDeletePolicy = FilePrinter::ApplicationDeletesFiles,
+                           PageSelectPolicy pageSelectPolicy = FilePrinter::ApplicationSelectsPages,
+-                          const QString &pageRange = QString() );
++                          const QString &pageRange = QString(),
++                          QPrinter::Orientation documentOrientation = QPrinter::Portrait
++                        );
+ 
+     /** Print a list of files using the settings in QPrinter
+      *
+@@ -171,11 +174,13 @@
+ 
+     int doPrintFiles( QPrinter &printer, const QStringList fileList,
+                              FileDeletePolicy fileDeletePolicy, PageSelectPolicy pageSelectPolicy,
+-                             const QString &pageRange );
++                             const QString &pageRange,
++                             QPrinter::Orientation documentOrientation);
+ 
+     QStringList printArguments( QPrinter &printer,
+                                        FileDeletePolicy fileDeletePolicy, PageSelectPolicy pageSelectPolicy,
+-                                       bool useCupsOptions, const QString &pageRange, const QString &version );
++                                       bool useCupsOptions, const QString &pageRange, const QString &version,
++                                       QPrinter::Orientation documentOrientation);
+ 
+     QStringList destination( QPrinter &printer, const QString &version );
+     QStringList copies( QPrinter &printer, const QString &version );
+@@ -185,11 +190,11 @@
+     QStringList pages( QPrinter &printer, PageSelectPolicy pageSelectPolicy,
+                               const QString &pageRange, bool useCupsOptions, const QString &version );
+ 
+-    QStringList cupsOptions( QPrinter &printer );
++    QStringList cupsOptions( QPrinter &printer, QPrinter::Orientation documentOrientation );
+     QStringList optionMedia( QPrinter &printer );
+     QString mediaPageSize( QPrinter &printer );
+     QString mediaPaperSource( QPrinter &printer );
+-    QStringList optionOrientation( QPrinter &printer );
++    QStringList optionOrientation( QPrinter &printer, QPrinter::Orientation documentOrientation );
+     QStringList optionDoubleSidedPrinting( QPrinter &printer );
+     QStringList optionPageOrder( QPrinter &printer );
+     QStringList optionCollateCopies( QPrinter &printer );
+diff -ur kdegraphics-4.6.3/okular/generators/djvu/generator_djvu.cpp kdegraphics-4.6.3-okular-landscape/okular/generators/djvu/generator_djvu.cpp
+--- kdegraphics-4.6.3/okular/generators/djvu/generator_djvu.cpp	2011-01-06 00:46:08.000000000 +0100
++++ kdegraphics-4.6.3-okular-landscape/okular/generators/djvu/generator_djvu.cpp	2011-06-06 01:07:43.000000000 +0200
+@@ -220,7 +220,8 @@
+         int ret = Okular::FilePrinter::printFile( printer, fileName,
+                                                   Okular::FilePrinter::SystemDeletesFiles,
+                                                   Okular::FilePrinter::ApplicationSelectsPages,
+-                                                  document()->bookmarkedPageRange() );
++                                                  document()->bookmarkedPageRange(),
++                                                  document()->orientation() );
+         result = ( ret >=0 );
+     }
+ 
+diff -ur kdegraphics-4.6.3/okular/generators/dvi/dviexport.cpp kdegraphics-4.6.3-okular-landscape/okular/generators/dvi/dviexport.cpp
+--- kdegraphics-4.6.3/okular/generators/dvi/dviexport.cpp	2009-10-08 23:55:51.000000000 +0200
++++ kdegraphics-4.6.3-okular-landscape/okular/generators/dvi/dviexport.cpp	2011-06-06 01:07:43.000000000 +0200
+@@ -460,7 +460,8 @@
+         Okular::FilePrinter::printFile( (*printer_), output_name_,
+                                 Okular::FilePrinter::ApplicationDeletesFiles,
+                                 Okular::FilePrinter::ApplicationSelectsPages,
+-                                QString() );
++                                QString(),
++                                document()->orientation() );
+     }
+   }
+ 
+diff -ur kdegraphics-4.6.3/okular/generators/poppler/generator_pdf.cpp kdegraphics-4.6.3-okular-landscape/okular/generators/poppler/generator_pdf.cpp
+--- kdegraphics-4.6.3/okular/generators/poppler/generator_pdf.cpp	2011-03-31 22:02:04.000000000 +0200
++++ kdegraphics-4.6.3-okular-landscape/okular/generators/poppler/generator_pdf.cpp	2011-06-06 01:07:43.000000000 +0200
+@@ -964,7 +964,8 @@
+         int ret = Okular::FilePrinter::printFile( printer, tempfilename,
+                                                   Okular::FilePrinter::SystemDeletesFiles,
+                                                   Okular::FilePrinter::ApplicationSelectsPages,
+-                                                  document()->bookmarkedPageRange() );
++                                                  document()->bookmarkedPageRange(),
++                                                  document()->orientation() );
+ 
+         lastPrintError = Okular::FilePrinter::printError( ret );
+ 
+diff -ur kdegraphics-4.6.3/okular/generators/spectre/generator_ghostview.cpp kdegraphics-4.6.3-okular-landscape/okular/generators/spectre/generator_ghostview.cpp
+--- kdegraphics-4.6.3/okular/generators/spectre/generator_ghostview.cpp	2010-06-04 10:25:25.000000000 +0200
++++ kdegraphics-4.6.3-okular-landscape/okular/generators/spectre/generator_ghostview.cpp	2011-06-06 01:07:43.000000000 +0200
+@@ -148,7 +148,8 @@
+         int ret = Okular::FilePrinter::printFile( printer, fileName,
+                                                   Okular::FilePrinter::SystemDeletesFiles,
+                                                   Okular::FilePrinter::ApplicationSelectsPages,
+-                                                  document()->bookmarkedPageRange() );
++                                                  document()->bookmarkedPageRange(),
++                                                  document()->orientation() );
+         if ( ret >= 0 ) result = true;
+     }
+ 
+diff -ur kdegraphics-4.6.3/okular/part.cpp kdegraphics-4.6.3-okular-landscape/okular/part.cpp
+--- kdegraphics-4.6.3/okular/part.cpp	2011-03-20 14:47:58.000000000 +0100
++++ kdegraphics-4.6.3-okular-landscape/okular/part.cpp	2011-06-06 01:07:43.000000000 +0200
+@@ -2057,24 +2057,7 @@
+ 
+ void Part::setupPrint( QPrinter &printer )
+ {
+-    double width, height;
+-    int landscape, portrait;
+-    const Okular::Page *page;
+-
+-    // if some pages are landscape and others are not the most common win as QPrinter does
+-    // not accept a per page setting
+-    landscape = 0;
+-    portrait = 0;
+-    for (uint i = 0; i < m_document->pages(); i++)
+-    {
+-        page = m_document->page(i);
+-        width = page->width();
+-        height = page->height();
+-        if (page->orientation() == Okular::Rotation90 || page->orientation() == Okular::Rotation270) qSwap(width, height);
+-        if (width > height) landscape++;
+-        else portrait++;
+-    }
+-    if (landscape > portrait) printer.setOrientation(QPrinter::Landscape);
++    printer.setOrientation(m_document->orientation());
+ 
+     // title
+     QString title = m_document->metaData( "DocumentTitle" ).toString();
diff --git a/kdegraphics.spec b/kdegraphics.spec
index a231715..9d7627a 100644
--- a/kdegraphics.spec
+++ b/kdegraphics.spec
@@ -13,7 +13,7 @@
 Summary:        KDE Graphics Applications
 Epoch:          7
 Version:        4.6.3
-Release:        1%{?dist}
+Release:        2%{?dist}
 
 Name:           kdegraphics
 #Obsoletes:     kdegraphics4 < %{version}-%{release}
@@ -33,6 +33,9 @@ Patch51: kdegraphics-4.5.80-OkularConfig-dont-hardcode-paths.patch
 # fix libjpeg-turbo detection, see also https://bugs.kde.org/show_bug.cgi?id=265431
 # use cmake_try_compile to grok version
 Patch53: kdegraphics-4.6.2-libjpeg_version.patch
+# fix printing of landscape documents in Okular (#509645, kde#181290)
+# https://git.reviewboard.kde.org/r/101513/
+Patch54: kdegraphics-4.6.3-okular-landscape.patch
 
 ## upstream patches
 
@@ -128,6 +131,7 @@ Summary: A kioslave for displaying WinHelp files
 %patch50 -p1 -b .okular_dt
 %patch51 -p1 -b .OkularConfig
 %patch53 -p1 -b .libjpeg_version
+%patch54 -p1 -b .okular-landscape
 
 
 %build
@@ -277,6 +281,9 @@ fi
 
 
 %changelog
+* Mon Jun 06 2011 Kevin Kofler <Kevin at tigcc.ticalc.org> 4.6.3-2
+- fix printing of landscape documents in Okular (#509645, kde#181290)
+
 * Thu Apr 28 2011 Rex Dieter <rdieter at fedoraproject.org> 4.6.3-1
 - 4.6.3
 


More information about the scm-commits mailing list