From 8ebfe00f4ab79516a8276929a682c24f4c675b5f Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Mon, 21 Aug 2017 14:34:17 +0200 Subject: [PATCH] Initialize the print engine with the given printer name Originally when the QPrinter was created it would create the engine with the default printer and then change it afterwards even though the desired printer may already be known here. So by passing the printer name we ensure that it is initialized with the desired one right away. Task-number: QTBUG-62221 Change-Id: Iaa90243708b57bf89354a527a982ac45c991f603 Reviewed-by: Friedemann Kleint --- src/plugins/platforms/cocoa/qcocoaprintersupport.h | 2 +- src/plugins/platforms/cocoa/qcocoaprintersupport.mm | 4 ++-- src/plugins/platforms/cocoa/qprintengine_mac.mm | 8 ++++++-- src/plugins/platforms/cocoa/qprintengine_mac_p.h | 2 +- src/plugins/printsupport/cups/qcupsprintengine.cpp | 4 ++-- src/plugins/printsupport/cups/qcupsprintengine_p.h | 2 +- src/plugins/printsupport/cups/qcupsprintersupport.cpp | 4 ++-- src/plugins/printsupport/cups/qcupsprintersupport_p.h | 2 +- .../printsupport/windows/qwindowsprintersupport.cpp | 4 ++-- src/plugins/printsupport/windows/qwindowsprintersupport.h | 2 +- src/printsupport/kernel/qplatformprintersupport.cpp | 2 +- src/printsupport/kernel/qplatformprintersupport.h | 2 +- src/printsupport/kernel/qprintengine_win.cpp | 4 ++-- src/printsupport/kernel/qprintengine_win_p.h | 2 +- src/printsupport/kernel/qprinter.cpp | 3 +-- 15 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/plugins/platforms/cocoa/qcocoaprintersupport.h b/src/plugins/platforms/cocoa/qcocoaprintersupport.h index 371212dae2d..a07bf0ec1bd 100644 --- a/src/plugins/platforms/cocoa/qcocoaprintersupport.h +++ b/src/plugins/platforms/cocoa/qcocoaprintersupport.h @@ -53,7 +53,7 @@ public: QCocoaPrinterSupport(); ~QCocoaPrinterSupport(); - QPrintEngine *createNativePrintEngine(QPrinter::PrinterMode printerMode) Q_DECL_OVERRIDE; + QPrintEngine *createNativePrintEngine(QPrinter::PrinterMode printerMode, const QString &deviceId = QString()) Q_DECL_OVERRIDE; QPaintEngine *createPaintEngine(QPrintEngine *, QPrinter::PrinterMode printerMode) Q_DECL_OVERRIDE; QPrintDevice createPrintDevice(const QString &id) Q_DECL_OVERRIDE; diff --git a/src/plugins/platforms/cocoa/qcocoaprintersupport.mm b/src/plugins/platforms/cocoa/qcocoaprintersupport.mm index c2f7d5b0224..d7eaa469fb9 100644 --- a/src/plugins/platforms/cocoa/qcocoaprintersupport.mm +++ b/src/plugins/platforms/cocoa/qcocoaprintersupport.mm @@ -54,9 +54,9 @@ QCocoaPrinterSupport::QCocoaPrinterSupport() QCocoaPrinterSupport::~QCocoaPrinterSupport() { } -QPrintEngine *QCocoaPrinterSupport::createNativePrintEngine(QPrinter::PrinterMode printerMode) +QPrintEngine *QCocoaPrinterSupport::createNativePrintEngine(QPrinter::PrinterMode printerMode, const QString &deviceId) { - return new QMacPrintEngine(printerMode); + return new QMacPrintEngine(printerMode, deviceId); } QPaintEngine *QCocoaPrinterSupport::createPaintEngine(QPrintEngine *printEngine, QPrinter::PrinterMode printerMode) diff --git a/src/plugins/platforms/cocoa/qprintengine_mac.mm b/src/plugins/platforms/cocoa/qprintengine_mac.mm index 8098c5e829f..c39af870d4b 100644 --- a/src/plugins/platforms/cocoa/qprintengine_mac.mm +++ b/src/plugins/platforms/cocoa/qprintengine_mac.mm @@ -51,11 +51,15 @@ QT_BEGIN_NAMESPACE extern QMarginsF qt_convertMargins(const QMarginsF &margins, QPageLayout::Unit fromUnits, QPageLayout::Unit toUnits); -QMacPrintEngine::QMacPrintEngine(QPrinter::PrinterMode mode) : QPaintEngine(*(new QMacPrintEnginePrivate)) +QMacPrintEngine::QMacPrintEngine(QPrinter::PrinterMode mode, const QString &deviceId) + : QPaintEngine(*(new QMacPrintEnginePrivate)) { Q_D(QMacPrintEngine); d->mode = mode; - d->m_printDevice.reset(new QCocoaPrintDevice(QCocoaPrinterSupport().defaultPrintDeviceId())); + QString id = deviceId; + if (id.isEmpty()) + id = QCocoaPrinterSupport().defaultPrintDeviceId(); + d->m_printDevice.reset(new QCocoaPrintDevice(id)); d->m_pageLayout.setPageSize(d->m_printDevice->defaultPageSize()); d->initialize(); } diff --git a/src/plugins/platforms/cocoa/qprintengine_mac_p.h b/src/plugins/platforms/cocoa/qprintengine_mac_p.h index ee98275b63d..2d46a250d5d 100644 --- a/src/plugins/platforms/cocoa/qprintengine_mac_p.h +++ b/src/plugins/platforms/cocoa/qprintengine_mac_p.h @@ -78,7 +78,7 @@ class QMacPrintEngine : public QPaintEngine, public QPrintEngine { Q_DECLARE_PRIVATE(QMacPrintEngine) public: - QMacPrintEngine(QPrinter::PrinterMode mode); + QMacPrintEngine(QPrinter::PrinterMode mode, const QString &deviceId); Qt::HANDLE handle() const; diff --git a/src/plugins/printsupport/cups/qcupsprintengine.cpp b/src/plugins/printsupport/cups/qcupsprintengine.cpp index a16eb3abb53..e7949d3a0b9 100644 --- a/src/plugins/printsupport/cups/qcupsprintengine.cpp +++ b/src/plugins/printsupport/cups/qcupsprintengine.cpp @@ -57,11 +57,11 @@ QT_BEGIN_NAMESPACE extern QMarginsF qt_convertMargins(const QMarginsF &margins, QPageLayout::Unit fromUnits, QPageLayout::Unit toUnits); -QCupsPrintEngine::QCupsPrintEngine(QPrinter::PrinterMode m) +QCupsPrintEngine::QCupsPrintEngine(QPrinter::PrinterMode m, const QString &deviceId) : QPdfPrintEngine(*new QCupsPrintEnginePrivate(m)) { Q_D(QCupsPrintEngine); - d->setupDefaultPrinter(); + d->changePrinter(deviceId); state = QPrinter::Idle; } diff --git a/src/plugins/printsupport/cups/qcupsprintengine_p.h b/src/plugins/printsupport/cups/qcupsprintengine_p.h index 5956c865518..0ebf6e7a0f2 100644 --- a/src/plugins/printsupport/cups/qcupsprintengine_p.h +++ b/src/plugins/printsupport/cups/qcupsprintengine_p.h @@ -68,7 +68,7 @@ class QCupsPrintEngine : public QPdfPrintEngine { Q_DECLARE_PRIVATE(QCupsPrintEngine) public: - QCupsPrintEngine(QPrinter::PrinterMode m); + QCupsPrintEngine(QPrinter::PrinterMode m, const QString &deviceId); virtual ~QCupsPrintEngine(); // reimplementations QPdfPrintEngine diff --git a/src/plugins/printsupport/cups/qcupsprintersupport.cpp b/src/plugins/printsupport/cups/qcupsprintersupport.cpp index 18876254060..a9c992a2e18 100644 --- a/src/plugins/printsupport/cups/qcupsprintersupport.cpp +++ b/src/plugins/printsupport/cups/qcupsprintersupport.cpp @@ -63,9 +63,9 @@ QCupsPrinterSupport::~QCupsPrinterSupport() { } -QPrintEngine *QCupsPrinterSupport::createNativePrintEngine(QPrinter::PrinterMode printerMode) +QPrintEngine *QCupsPrinterSupport::createNativePrintEngine(QPrinter::PrinterMode printerMode, const QString &deviceId) { - return new QCupsPrintEngine(printerMode); + return new QCupsPrintEngine(printerMode, (deviceId.isEmpty() ? defaultPrintDeviceId() : deviceId)); } QPaintEngine *QCupsPrinterSupport::createPaintEngine(QPrintEngine *engine, QPrinter::PrinterMode printerMode) diff --git a/src/plugins/printsupport/cups/qcupsprintersupport_p.h b/src/plugins/printsupport/cups/qcupsprintersupport_p.h index 13f64b5e697..df6507d324b 100644 --- a/src/plugins/printsupport/cups/qcupsprintersupport_p.h +++ b/src/plugins/printsupport/cups/qcupsprintersupport_p.h @@ -64,7 +64,7 @@ public: QCupsPrinterSupport(); ~QCupsPrinterSupport(); - QPrintEngine *createNativePrintEngine(QPrinter::PrinterMode printerMode) Q_DECL_OVERRIDE; + QPrintEngine *createNativePrintEngine(QPrinter::PrinterMode printerMode, const QString &deviceId = QString()) Q_DECL_OVERRIDE; QPaintEngine *createPaintEngine(QPrintEngine *printEngine, QPrinter::PrinterMode) Q_DECL_OVERRIDE; QPrintDevice createPrintDevice(const QString &id) Q_DECL_OVERRIDE; diff --git a/src/plugins/printsupport/windows/qwindowsprintersupport.cpp b/src/plugins/printsupport/windows/qwindowsprintersupport.cpp index 875ee589c77..a7eabc2622e 100644 --- a/src/plugins/printsupport/windows/qwindowsprintersupport.cpp +++ b/src/plugins/printsupport/windows/qwindowsprintersupport.cpp @@ -55,9 +55,9 @@ QWindowsPrinterSupport::~QWindowsPrinterSupport() { } -QPrintEngine *QWindowsPrinterSupport::createNativePrintEngine(QPrinter::PrinterMode printerMode) +QPrintEngine *QWindowsPrinterSupport::createNativePrintEngine(QPrinter::PrinterMode printerMode, const QString &deviceId) { - return new QWin32PrintEngine(printerMode); + return new QWin32PrintEngine(printerMode, deviceId); } QPaintEngine *QWindowsPrinterSupport::createPaintEngine(QPrintEngine *engine, QPrinter::PrinterMode printerMode) diff --git a/src/plugins/printsupport/windows/qwindowsprintersupport.h b/src/plugins/printsupport/windows/qwindowsprintersupport.h index 50db810f341..84b60a8207f 100644 --- a/src/plugins/printsupport/windows/qwindowsprintersupport.h +++ b/src/plugins/printsupport/windows/qwindowsprintersupport.h @@ -50,7 +50,7 @@ public: QWindowsPrinterSupport(); ~QWindowsPrinterSupport(); - QPrintEngine *createNativePrintEngine(QPrinter::PrinterMode printerMode) Q_DECL_OVERRIDE; + QPrintEngine *createNativePrintEngine(QPrinter::PrinterMode printerMode, const QString &deviceId = QString()) Q_DECL_OVERRIDE; QPaintEngine *createPaintEngine(QPrintEngine *printEngine, QPrinter::PrinterMode) Q_DECL_OVERRIDE; QPrintDevice createPrintDevice(const QString &id) Q_DECL_OVERRIDE; diff --git a/src/printsupport/kernel/qplatformprintersupport.cpp b/src/printsupport/kernel/qplatformprintersupport.cpp index 5397c43b331..388dd5ff8ea 100644 --- a/src/printsupport/kernel/qplatformprintersupport.cpp +++ b/src/printsupport/kernel/qplatformprintersupport.cpp @@ -68,7 +68,7 @@ QPlatformPrinterSupport::~QPlatformPrinterSupport() { } -QPrintEngine *QPlatformPrinterSupport::createNativePrintEngine(QPrinter::PrinterMode) +QPrintEngine *QPlatformPrinterSupport::createNativePrintEngine(QPrinter::PrinterMode, const QString &) { return 0; } diff --git a/src/printsupport/kernel/qplatformprintersupport.h b/src/printsupport/kernel/qplatformprintersupport.h index d3da4295a1a..6a4246adc02 100644 --- a/src/printsupport/kernel/qplatformprintersupport.h +++ b/src/printsupport/kernel/qplatformprintersupport.h @@ -72,7 +72,7 @@ public: QPlatformPrinterSupport(); virtual ~QPlatformPrinterSupport(); - virtual QPrintEngine *createNativePrintEngine(QPrinter::PrinterMode printerMode); + virtual QPrintEngine *createNativePrintEngine(QPrinter::PrinterMode printerMode, const QString &deviceId = QString()); virtual QPaintEngine *createPaintEngine(QPrintEngine *, QPrinter::PrinterMode printerMode); virtual QPrintDevice createPrintDevice(const QString &id); diff --git a/src/printsupport/kernel/qprintengine_win.cpp b/src/printsupport/kernel/qprintengine_win.cpp index 37f2290d945..e399118cc95 100644 --- a/src/printsupport/kernel/qprintengine_win.cpp +++ b/src/printsupport/kernel/qprintengine_win.cpp @@ -79,7 +79,7 @@ extern QMarginsF qt_convertMargins(const QMarginsF &margins, QPageLayout::Unit f static void draw_text_item_win(const QPointF &_pos, const QTextItemInt &ti, HDC hdc, const QTransform &xform, const QPointF &topLeft); -QWin32PrintEngine::QWin32PrintEngine(QPrinter::PrinterMode mode) +QWin32PrintEngine::QWin32PrintEngine(QPrinter::PrinterMode mode, const QString &deviceId) : QAlphaPaintEngine(*(new QWin32PrintEnginePrivate), PaintEngineFeatures(PrimitiveTransform | PixmapTransform @@ -92,7 +92,7 @@ QWin32PrintEngine::QWin32PrintEngine(QPrinter::PrinterMode mode) d->mode = mode; QPlatformPrinterSupport *ps = QPlatformPrinterSupportPlugin::get(); if (ps) - d->m_printDevice = ps->createDefaultPrintDevice(); + d->m_printDevice = ps->createPrintDevice(deviceId.isEmpty() ? ps->defaultPrintDeviceId() : deviceId); d->m_pageLayout.setPageSize(d->m_printDevice.defaultPageSize()); d->initialize(); } diff --git a/src/printsupport/kernel/qprintengine_win_p.h b/src/printsupport/kernel/qprintengine_win_p.h index 196263df749..876155a3a57 100644 --- a/src/printsupport/kernel/qprintengine_win_p.h +++ b/src/printsupport/kernel/qprintengine_win_p.h @@ -73,7 +73,7 @@ class Q_PRINTSUPPORT_EXPORT QWin32PrintEngine : public QAlphaPaintEngine, public { Q_DECLARE_PRIVATE(QWin32PrintEngine) public: - QWin32PrintEngine(QPrinter::PrinterMode mode); + QWin32PrintEngine(QPrinter::PrinterMode mode, const QString &deviceId); // override QWin32PaintEngine bool begin(QPaintDevice *dev); diff --git a/src/printsupport/kernel/qprinter.cpp b/src/printsupport/kernel/qprinter.cpp index 83ebb15a12c..e2138512cc3 100644 --- a/src/printsupport/kernel/qprinter.cpp +++ b/src/printsupport/kernel/qprinter.cpp @@ -146,7 +146,7 @@ void QPrinterPrivate::initEngines(QPrinter::OutputFormat format, const QPrinterI } if (outputFormat == QPrinter::NativeFormat) { - printEngine = ps->createNativePrintEngine(printerMode); + printEngine = ps->createNativePrintEngine(printerMode, printerName); paintEngine = ps->createPaintEngine(printEngine, printerMode); } else { QPdfPrintEngine *pdfEngine = new QPdfPrintEngine(printerMode); @@ -156,7 +156,6 @@ void QPrinterPrivate::initEngines(QPrinter::OutputFormat format, const QPrinterI use_default_engine = true; had_default_engines = true; - setProperty(QPrintEngine::PPK_PrinterName, printerName); validPrinter = true; }