summaryrefslogtreecommitdiff
path: root/src/webenginewidgets
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2021-07-21 11:32:35 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2021-08-09 20:21:12 +0200
commitb405ed26336a44ad4f359cdb4e1909e31c113cd4 (patch)
tree72e2d03ff73c98e3e3ad42998cdd71df971cd2fa /src/webenginewidgets
parent47d57eaa2756a108ae28d9e6226577fe66868cee (diff)
downloadqtwebengine-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.cpp59
-rw-r--r--src/webenginewidgets/api/qwebengineview_p.h6
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 *&currentPrinter, 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, &currentPrinter](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