From cbf47b0625c9b67b3608e24600273693bd59462a Mon Sep 17 00:00:00 2001 From: Juraj Oravec Date: Wed, 4 Dec 2024 21:34:31 +0100 Subject: [PATCH] Fix printing to printer other than PDF printer BUG: 497051 FIXED-IN: 24.12 Chery picked from: eaa807023517e1d62dae41f9b1cdd93806d77d64 Signed-off-by: Juraj Oravec --- src/lib/webengine/webview.cpp | 22 ++++++++++++++-------- src/lib/webengine/webview.h | 4 ++++ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/lib/webengine/webview.cpp b/src/lib/webengine/webview.cpp index d2b5d7ee0..4871e8b3f 100644 --- a/src/lib/webengine/webview.cpp +++ b/src/lib/webengine/webview.cpp @@ -67,6 +67,7 @@ WebView::WebView(QWidget* parent) connect(this, &QWebEngineView::iconChanged, this, &WebView::slotIconChanged); connect(this, &QWebEngineView::urlChanged, this, &WebView::slotUrlChanged); connect(this, &QWebEngineView::titleChanged, this, &WebView::slotTitleChanged); + connect(this, &QWebEngineView::printFinished, this, &WebView::slotPrintFinished); m_currentZoomLevel = zoomLevels().indexOf(100); @@ -386,11 +387,11 @@ void WebView::printPage() { Q_ASSERT(m_page); - auto *printer = new QPrinter(); - printer->setCreator(tr("Falkon %1 (%2)").arg(QString::fromLatin1(Qz::VERSION), QString::fromLatin1(Qz::WWWADDRESS))); - printer->setDocName(QzTools::filterCharsFromFilename(title())); + m_printer = new QPrinter(); + m_printer->setCreator(tr("Falkon %1 (%2)").arg(QString::fromLatin1(Qz::VERSION), QString::fromLatin1(Qz::WWWADDRESS))); + m_printer->setDocName(QzTools::filterCharsFromFilename(title())); - auto *dialog = new QPrintDialog(printer, this); + auto *dialog = new QPrintDialog(m_printer, this); dialog->setOptions(QAbstractPrintDialog::PrintToFile | QAbstractPrintDialog::PrintShowPageSize); #ifndef Q_OS_WIN dialog->setOption(QAbstractPrintDialog::PrintPageRange); @@ -402,14 +403,19 @@ void WebView::printPage() m_page->printToPdf(dialog->printer()->outputFileName(), dialog->printer()->pageLayout()); delete dialog; } else { - connect(this, &QWebEngineView::printFinished, this, [&dialog](bool success) { - Q_UNUSED(success); - delete dialog; - }); + print(m_printer); + delete dialog; } } } +void WebView::slotPrintFinished(bool success) +{ + Q_UNUSED(success); + delete m_printer; + m_printer = nullptr; +} + void WebView::slotLoadStarted() { m_progress = 0; diff --git a/src/lib/webengine/webview.h b/src/lib/webengine/webview.h index 37138cd6d..61e7281f8 100644 --- a/src/lib/webengine/webview.h +++ b/src/lib/webengine/webview.h @@ -25,6 +25,7 @@ #include "loadrequest.h" #include "wheelhelper.h" +class QPrinter; class WebPage; class LoadRequest; class WebHitTestResult; @@ -118,6 +119,7 @@ protected Q_SLOTS: void slotIconChanged(); void slotUrlChanged(const QUrl &url); void slotTitleChanged(const QString &title); + void slotPrintFinished(bool success); // Context menu slots void openUrlInNewWindow(); @@ -193,6 +195,8 @@ private: WheelHelper m_wheelHelper; static bool s_forceContextMenuOnMouseRelease; + + QPrinter* m_printer; }; #endif // WEBVIEW_H -- GitLab