From 9aad97763cc42ce29b1d64618d6a250af0795534 Mon Sep 17 00:00:00 2001
From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
Date: Mon, 24 Jan 2022 13:17:45 -0500
Subject: [PATCH] chatview: base previewengine on QWebEnginePage not
 QWebEngineView

Qt6 allows us to set the RHI backend, however QQuickWidget is only
supported when using OpenGL. QWebEngineView instantiation uses
QQuickWidget and isn't required as we wish to use the previewengine
in a headless mode. So it can just be based on QWebEnginePage.

Change-Id: If05ca5c89272704b54c29318803c8773984b087c
---
 src/previewengine.cpp | 26 ++++++++++----------------
 src/previewengine.h   |  5 ++---
 2 files changed, 12 insertions(+), 19 deletions(-)

diff --git a/src/previewengine.cpp b/src/previewengine.cpp
index cce8cba28..b5061c731 100644
--- a/src/previewengine.cpp
+++ b/src/previewengine.cpp
@@ -24,7 +24,7 @@
 #include <QWebEngineSettings>
 
 PreviewEngine::PreviewEngine(QObject* parent)
-    : QWebEngineView(qobject_cast<QWidget*>(parent))
+    : QWebEnginePage(parent)
     , pimpl_(new PreviewEnginePrivate(this))
 {
     QWebEngineProfile* profile = QWebEngineProfile::defaultProfile();
@@ -37,8 +37,6 @@ PreviewEngine::PreviewEngine(QObject* parent)
     profile->setPersistentCookiesPolicy(QWebEngineProfile::NoPersistentCookies);
     profile->setHttpCacheType(QWebEngineProfile::NoCache);
 
-    setPage(new QWebEnginePage(profile, this));
-
     settings()->setAttribute(QWebEngineSettings::JavascriptEnabled, true);
     settings()->setAttribute(QWebEngineSettings::ScrollAnimatorEnabled, false);
     settings()->setAttribute(QWebEngineSettings::ErrorPageEnabled, false);
@@ -51,27 +49,23 @@ PreviewEngine::PreviewEngine(QObject* parent)
     settings()->setAttribute(QWebEngineSettings::XSSAuditingEnabled, false);
     settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true);
 
-    setContextMenuPolicy(Qt::ContextMenuPolicy::NoContextMenu);
-
     channel_ = new QWebChannel(this);
     channel_->registerObject(QStringLiteral("jsbridge"), pimpl_);
 
-    page()->setWebChannel(channel_);
-    page()->runJavaScript(Utils::QByteArrayFromFile(":/linkify.js"), QWebEngineScript::MainWorld);
-    page()->runJavaScript(Utils::QByteArrayFromFile(":/linkify-string.js"),
-                          QWebEngineScript::MainWorld);
-    page()->runJavaScript(Utils::QByteArrayFromFile(":/qwebchannel.js"),
-                          QWebEngineScript::MainWorld);
-    page()->runJavaScript(Utils::QByteArrayFromFile(":/previewInfo.js"),
-                          QWebEngineScript::MainWorld);
-    page()->runJavaScript(Utils::QByteArrayFromFile(":/misc/previewInterop.js"),
-                          QWebEngineScript::MainWorld);
+    setWebChannel(channel_);
+    runJavaScript(Utils::QByteArrayFromFile(":/linkify.js"), QWebEngineScript::MainWorld);
+    runJavaScript(Utils::QByteArrayFromFile(":/linkify-string.js"), QWebEngineScript::MainWorld);
+    runJavaScript(Utils::QByteArrayFromFile(":/qwebchannel.js"), QWebEngineScript::MainWorld);
+    runJavaScript(Utils::QByteArrayFromFile(":/previewInfo.js"), QWebEngineScript::MainWorld);
+    runJavaScript(Utils::QByteArrayFromFile(":/misc/previewInterop.js"),
+                  QWebEngineScript::MainWorld);
 }
 
 void
 PreviewEngine::parseMessage(const QString& messageId, const QString& msg, bool showPreview)
 {
-    page()->runJavaScript(QString("parseMessage(`%1`, `%2`, %3)").arg(messageId, msg, showPreview ? "true" : "false"));
+    runJavaScript(
+        QString("parseMessage(`%1`, `%2`, %3)").arg(messageId, msg, showPreview ? "true" : "false"));
 }
 
 void
diff --git a/src/previewengine.h b/src/previewengine.h
index 3122ad739..ea57f296a 100644
--- a/src/previewengine.h
+++ b/src/previewengine.h
@@ -22,8 +22,7 @@
 #include "utils.h"
 
 #include <QtWebChannel>
-#include <QtWebEngineCore>
-#include <QWebEngineView>
+#include <QWebEnginePage>
 
 class PreviewEngine;
 
@@ -43,7 +42,7 @@ private:
     PreviewEngine* parent_;
 };
 
-class PreviewEngine : public QWebEngineView
+class PreviewEngine : public QWebEnginePage
 {
     Q_OBJECT
 public:
-- 
GitLab