diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-07-21 11:32:35 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-08-09 20:21:12 +0200 |
commit | b405ed26336a44ad4f359cdb4e1909e31c113cd4 (patch) | |
tree | 72e2d03ff73c98e3e3ad42998cdd71df971cd2fa /src/webenginewidgets | |
parent | 47d57eaa2756a108ae28d9e6226577fe66868cee (diff) | |
download | qtwebengine-b405ed26336a44ad4f359cdb4e1909e31c113cd4.tar.gz |
Return printToPdf to QWebEnginePage
It doesn't use QPrinter and can be done using QtGui classes only.
Pick-to: 6.2
Change-Id: I0e14563c1bb5e93d9803bb1a807f702b1a2a5315
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Kirill Burtsev <kirill.burtsev@qt.io>
Diffstat (limited to 'src/webenginewidgets')
-rw-r--r-- | src/webenginewidgets/api/qwebengineview.cpp | 59 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebengineview_p.h | 6 |
2 files changed, 10 insertions, 55 deletions
diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp index aed80427c..d312fe70c 100644 --- a/src/webenginewidgets/api/qwebengineview.cpp +++ b/src/webenginewidgets/api/qwebengineview.cpp @@ -359,9 +359,6 @@ QWebEngineViewPrivate::QWebEngineViewPrivate() , m_dragEntered(false) , m_ownsPage(false) , m_contextRequest(nullptr) -#if QT_CONFIG(webengine_printing_and_pdf) - , currentPrinter(nullptr) -#endif { #ifndef QT_NO_ACCESSIBILITY QAccessible::installFactory(&webAccessibleFactory); @@ -512,19 +509,12 @@ QObject *QWebEngineViewPrivate::accessibilityParentObject() return q; } -void QWebEngineViewPrivate::didPrintPage(quint64 requestId, QSharedPointer<QByteArray> result) +void QWebEngineViewPrivate::didPrintPage(QPrinter *¤tPrinter, QSharedPointer<QByteArray> result) { #if QT_CONFIG(webengine_printing_and_pdf) Q_Q(QWebEngineView); - // If no currentPrinter is set that means that were printing to PDF only. - if (!currentPrinter) { - if (!result.data()) - return; - if (auto callback = m_pdfResultCallbacks.take(requestId)) - callback(*(result.data())); - return; - } + Q_ASSERT(currentPrinter); QThread *printerThread = new QThread; QObject::connect(printerThread, &QThread::finished, printerThread, &QThread::deleteLater); @@ -536,7 +526,7 @@ void QWebEngineViewPrivate::didPrintPage(quint64 requestId, QSharedPointer<QByte printerWorker->m_documentCopies = currentPrinter->copyCount(); printerWorker->m_collateCopies = currentPrinter->collateCopies(); - QObject::connect(printerWorker, &QtWebEngineCore::PrinterWorker::resultReady, q, [this, q](bool success) { + QObject::connect(printerWorker, &QtWebEngineCore::PrinterWorker::resultReady, q, [q, ¤tPrinter](bool success) { currentPrinter = nullptr; Q_EMIT q->printFinished(success); }); @@ -548,17 +538,15 @@ void QWebEngineViewPrivate::didPrintPage(quint64 requestId, QSharedPointer<QByte QMetaObject::invokeMethod(printerWorker, "print"); #else - // we should never enter this branch, but just for safe-keeping... + Q_UNUSED(currentPrinter); Q_UNUSED(result); - if (auto callback = m_pdfResultCallbacks.take(requestId)) - callback(QByteArray()); #endif } void QWebEngineViewPrivate::didPrintPageToPdf(const QString &filePath, bool success) { Q_Q(QWebEngineView); - Q_EMIT q->pdfPrintingFinished(filePath, success); + Q_EMIT q->pdfPrintingFinished(filePath, success); } void QWebEngineViewPrivate::printRequested() @@ -1000,19 +988,7 @@ QWebEngineContextMenuRequest *QWebEngineView::lastContextMenuRequest() const */ void QWebEngineView::printToPdf(const QString &filePath, const QPageLayout &layout, const QPageRanges &ranges) { -#if QT_CONFIG(webengine_printing_and_pdf) - Q_D(QWebEngineView); - if (d->currentPrinter) { - qWarning("Cannot print to PDF while printing at the same time."); - return; - } - page()->d_ptr->ensureInitialized(); - page()->d_ptr->adapter->printToPDF(layout, ranges, filePath); -#else - Q_UNUSED(filePath); - Q_UNUSED(layout); - Q_UNUSED(ranges); -#endif + page()->printToPdf(filePath, layout, ranges); } /*! @@ -1032,23 +1008,7 @@ void QWebEngineView::printToPdf(const QString &filePath, const QPageLayout &layo */ void QWebEngineView::printToPdf(const std::function<void(const QByteArray&)> &resultCallback, const QPageLayout &layout, const QPageRanges &ranges) { - Q_D(QWebEngineView); -#if QT_CONFIG(webengine_printing_and_pdf) - if (d->currentPrinter) { - qWarning("Cannot print to PDF while printing at the same time."); - if (resultCallback) - resultCallback(QByteArray()); - return; - } - page()->d_ptr->ensureInitialized(); - quint64 requestId = page()->d_ptr->adapter->printToPDFCallbackResult(layout, ranges); - d->m_pdfResultCallbacks.insert(requestId, resultCallback); -#else - Q_UNUSED(layout); - Q_UNUSED(ranges); - if (resultCallback) - resultCallback(QByteArray()); -#endif + page()->printToPdf(resultCallback, layout, ranges); } /*! @@ -1093,13 +1053,12 @@ void QWebEngineView::printToPdf(const std::function<void(const QByteArray&)> &re void QWebEngineView::print(QPrinter *printer) { #if QT_CONFIG(webengine_printing_and_pdf) - Q_D(QWebEngineView); - if (d->currentPrinter) { + if (page()->d_ptr->currentPrinter) { qWarning("Cannot print page on printer %ls: Already printing on a device.", qUtf16Printable(printer->printerName())); return; } - d->currentPrinter = printer; + page()->d_ptr->currentPrinter = printer; page()->d_ptr->ensureInitialized(); page()->d_ptr->adapter->printToPDFCallbackResult(printer->pageLayout(), printer->pageRanges(), diff --git a/src/webenginewidgets/api/qwebengineview_p.h b/src/webenginewidgets/api/qwebengineview_p.h index db22c95b5..13b346df9 100644 --- a/src/webenginewidgets/api/qwebengineview_p.h +++ b/src/webenginewidgets/api/qwebengineview_p.h @@ -94,7 +94,7 @@ public: QWebEngineContextMenuRequest *lastContextMenuRequest() const override; QWebEnginePage *createPageForWindow(QWebEnginePage::WebWindowType type) override; QObject *accessibilityParentObject() override; - void didPrintPage(quint64 requestId, QSharedPointer<QByteArray> result) override; + void didPrintPage(QPrinter *&printer, QSharedPointer<QByteArray> result) override; void didPrintPageToPdf(const QString &filePath, bool success) override; void printRequested() override; @@ -114,10 +114,6 @@ public: bool m_dragEntered; mutable bool m_ownsPage; QWebEngineContextMenuRequest *m_contextRequest; -#if QT_CONFIG(webengine_printing_and_pdf) - QPrinter *currentPrinter; -#endif - QMap<quint64, std::function<void(const QByteArray&)>> m_pdfResultCallbacks; }; #ifndef QT_NO_ACCESSIBILITY |