diff options
Diffstat (limited to 'src/printsupport/dialogs')
-rw-r--r-- | src/printsupport/dialogs/qabstractprintdialog.cpp | 2 | ||||
-rw-r--r-- | src/printsupport/dialogs/qpagesetupdialog_unix.cpp | 3 | ||||
-rw-r--r-- | src/printsupport/dialogs/qpagesetupdialog_win.cpp | 31 | ||||
-rw-r--r-- | src/printsupport/dialogs/qprintdialog_unix.cpp | 13 |
4 files changed, 41 insertions, 8 deletions
diff --git a/src/printsupport/dialogs/qabstractprintdialog.cpp b/src/printsupport/dialogs/qabstractprintdialog.cpp index b0d03037e6..f39b245e6b 100644 --- a/src/printsupport/dialogs/qabstractprintdialog.cpp +++ b/src/printsupport/dialogs/qabstractprintdialog.cpp @@ -483,3 +483,5 @@ void QPrintDialog::open(QObject *receiver, const char *member) } QT_END_NAMESPACE + +#include "moc_qabstractprintdialog.cpp" diff --git a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp index 78e5b8d1ef..92331f89b9 100644 --- a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp +++ b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp @@ -532,6 +532,7 @@ void QPageSetupWidget::updateWidget() void QPageSetupWidget::setupPrinter() const { m_printer->setPageLayout(m_pageLayout); + m_printer->setPageOrientation(m_pageLayout.orientation()); #if QT_CONFIG(cups) QCUPSSupport::PagesPerSheet pagesPerSheet = qvariant_cast<QCUPSSupport::PagesPerSheet>(m_ui.pagesPerSheetCombo->currentData() ); @@ -748,4 +749,6 @@ int QPageSetupDialog::exec() QT_END_NAMESPACE +#include "moc_qpagesetupdialog_unix_p.cpp" + #include "moc_qpagesetupdialog.cpp" diff --git a/src/printsupport/dialogs/qpagesetupdialog_win.cpp b/src/printsupport/dialogs/qpagesetupdialog_win.cpp index 464381bbe4..d1a377d2de 100644 --- a/src/printsupport/dialogs/qpagesetupdialog_win.cpp +++ b/src/printsupport/dialogs/qpagesetupdialog_win.cpp @@ -134,10 +134,35 @@ int QPageSetupDialog::exec() QDialog::setVisible(false); if (result) { engine->setGlobalDevMode(psd.hDevNames, psd.hDevMode); - d->printer->setPageSize(QPageSize(QSizeF(psd.ptPaperSize.x / multiplier, psd.ptPaperSize.y / multiplier), - layout.units() == QPageLayout::Inch ? QPageSize::Inch : QPageSize::Millimeter)); + QPageSize pageSize; + // try to read orientation and paper size ID from the dialog's devmode struct + if (psd.hDevMode) { + DEVMODE *rDevmode = reinterpret_cast<DEVMODE*>(GlobalLock(psd.hDevMode)); + if (rDevmode->dmFields & DM_ORIENTATION) { + layout.setOrientation(rDevmode->dmOrientation == DMORIENT_PORTRAIT + ? QPageLayout::Portrait : QPageLayout::Landscape); + } + if (rDevmode->dmFields & DM_PAPERSIZE) + pageSize = QPageSize::id(rDevmode->dmPaperSize); + GlobalUnlock(rDevmode); + } + // fall back to use our own matching, and assume that paper that's wider than long means landscape + if (!pageSize.isValid() || pageSize.id() == QPageSize::Custom) { + QSizeF unitSize(psd.ptPaperSize.x / multiplier, psd.ptPaperSize.y / multiplier); + if (unitSize.width() > unitSize.height()) { + layout.setOrientation(QPageLayout::Landscape); + unitSize.transpose(); + } else { + layout.setOrientation(QPageLayout::Portrait); + } + pageSize = QPageSize(unitSize, layout.units() == QPageLayout::Inch + ? QPageSize::Inch : QPageSize::Millimeter); + } + layout.setPageSize(pageSize); + const QMarginsF margins(psd.rtMargin.left, psd.rtMargin.top, psd.rtMargin.right, psd.rtMargin.bottom); - d->printer->setPageMargins(margins / multiplier, layout.units()); + layout.setMargins(margins / multiplier); + d->printer->setPageLayout(layout); // copy from our temp DEVMODE struct if (!engine->globalDevMode() && hDevMode) { diff --git a/src/printsupport/dialogs/qprintdialog_unix.cpp b/src/printsupport/dialogs/qprintdialog_unix.cpp index bf77666c41..5a5ba1d0a8 100644 --- a/src/printsupport/dialogs/qprintdialog_unix.cpp +++ b/src/printsupport/dialogs/qprintdialog_unix.cpp @@ -702,13 +702,14 @@ void QPrintDialogPrivate::selectPrinter(const QPrinter::OutputFormat outputForma else options.grayscale->setChecked(true); - // keep duplex value explicitly set by user, if any, and selected printer supports it; - // use device default otherwise + // duplex priorities to be as follows: + // 1) a user-selected duplex value in the dialog has highest prority + // 2) duplex value set in the QPrinter QPrint::DuplexMode duplex; if (explicitDuplexMode != QPrint::DuplexAuto && supportedDuplexMode.contains(explicitDuplexMode)) duplex = explicitDuplexMode; else - duplex = top->d->m_currentPrintDevice.defaultDuplexMode(); + duplex = static_cast<QPrint::DuplexMode>(p->duplex()); switch (duplex) { case QPrint::DuplexNone: options.noDuplex->setChecked(true); break; @@ -1184,6 +1185,8 @@ void QUnixPrintWidgetPrivate::updateWidget() widget.printers->insertSeparator(widget.printers->count()); widget.printers->addItem(QPrintDialog::tr("Print to File (PDF)")); filePrintersAdded = true; + if (widget.printers->count() == 1) + _q_printerChanged(0); } if (!printToFile && filePrintersAdded) { widget.printers->removeItem(widget.printers->count()-1); @@ -1240,10 +1243,10 @@ void QUnixPrintWidgetPrivate::_q_printerChanged(int index) QString filename = widget.filename->text(); widget.filename->setText(filename); widget.lOutput->setEnabled(true); - if (optionsPane) - optionsPane->selectPrinter(QPrinter::PdfFormat); printer->setOutputFormat(QPrinter::PdfFormat); m_currentPrintDevice = QPrintDevice(); + if (optionsPane) + optionsPane->selectPrinter(QPrinter::PdfFormat); return; } } |