summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2025-11-24 14:32:52 +0100
committerMichal Klocek <michal.klocek@qt.io>2025-11-28 11:43:06 +0100
commit9cc1d5087d0ea5e72543e4ad769ce5d81c7663ca (patch)
tree3aa26e78260a3f167cc2edfdb6d8edb676a557d8
parent8b100e6a33134a2649a6838fa2fe58df1d432a96 (diff)
Cleanup QQuickWebView initialization
In case of QQuickWebview with web engine backend, we need to pass qt quick parent item. So far it was was done by setting parent for QWebView and then extracting it on web engine plugin backend's initialization. Add initialize() call instead. For time being use just QObject as parameter as it is only used by webengine to pass parent QQuickItem. Change-Id: I8d84313e93e2ad67ec1f008bee532f20b0d0a68e Reviewed-by: Moss Heim <moss.heim@qt.io> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r--src/plugins/android/qandroidwebview_p.h1
-rw-r--r--src/plugins/darwin/qdarwinwebview_p.h1
-rw-r--r--src/plugins/wasm/qwasmwebview_p.h1
-rw-r--r--src/plugins/webengine/qwebenginewebview.cpp15
-rw-r--r--src/plugins/webengine/qwebenginewebview_p.h3
-rw-r--r--src/plugins/windows/qwebview2webview_p.h1
-rw-r--r--src/quick/qquickwebview.cpp3
-rw-r--r--src/webview/qabstractwebview_p.h1
8 files changed, 17 insertions, 9 deletions
diff --git a/src/plugins/android/qandroidwebview_p.h b/src/plugins/android/qandroidwebview_p.h
index 4f12268..10c79ce 100644
--- a/src/plugins/android/qandroidwebview_p.h
+++ b/src/plugins/android/qandroidwebview_p.h
@@ -59,6 +59,7 @@ public:
explicit QAndroidWebViewPrivate(QWebView *view);
~QAndroidWebViewPrivate() override;
+ void initialize(QObject *context) override { Q_UNUSED(context); };
QString httpUserAgent() const override;
void setHttpUserAgent(const QString &httpUserAgent) override;
QUrl url() const override;
diff --git a/src/plugins/darwin/qdarwinwebview_p.h b/src/plugins/darwin/qdarwinwebview_p.h
index 991a31c..b69791a 100644
--- a/src/plugins/darwin/qdarwinwebview_p.h
+++ b/src/plugins/darwin/qdarwinwebview_p.h
@@ -60,6 +60,7 @@ public:
explicit QDarwinWebViewPrivate(QWebView *view);
~QDarwinWebViewPrivate() override;
+ void initialize(QObject *context) override { Q_UNUSED(context); };
QString httpUserAgent() const override;
void setHttpUserAgent(const QString &httpUserAgent) override;
QUrl url() const override;
diff --git a/src/plugins/wasm/qwasmwebview_p.h b/src/plugins/wasm/qwasmwebview_p.h
index ee0b774..3fdb102 100644
--- a/src/plugins/wasm/qwasmwebview_p.h
+++ b/src/plugins/wasm/qwasmwebview_p.h
@@ -55,6 +55,7 @@ public:
explicit QWasmWebViewPrivate(QWebView *view);
~QWasmWebViewPrivate() override;
+ void initialize(QObject *context) override { Q_UNUSED(context); };
QString httpUserAgent() const final;
void setHttpUserAgent(const QString &httpUserAgent) final;
QUrl url() const override;
diff --git a/src/plugins/webengine/qwebenginewebview.cpp b/src/plugins/webengine/qwebenginewebview.cpp
index 9edeab3..dda92cc 100644
--- a/src/plugins/webengine/qwebenginewebview.cpp
+++ b/src/plugins/webengine/qwebenginewebview.cpp
@@ -38,6 +38,7 @@ static QByteArray qmlSource()
QWebEngineWebViewPrivate::QWebEngineWebViewPrivate(QWebView *p)
: QAbstractWebView(p),
m_profile(nullptr),
+ m_parentItem(nullptr),
m_window(qobject_cast<QQuickWindow *>(p->parent())),
m_ownsWindow(!m_window)
{
@@ -59,6 +60,11 @@ QWebEngineWebViewPrivate::~QWebEngineWebViewPrivate()
}
}
+void QWebEngineWebViewPrivate::initialize(QObject *context)
+{
+ m_parentItem = qobject_cast<QQuickItem *>(context);
+}
+
QString QWebEngineWebViewPrivate::httpUserAgent() const
{
return m_httpUserAgent;
@@ -231,14 +237,7 @@ void QWebEngineWebViewPrivate::QQuickWebEngineViewPtr::init() const
{
Q_ASSERT(!m_webEngineView);
Q_ASSERT(m_parent->m_window);
- QObject *p = qobject_cast<QObject *>(m_parent);
- QQuickItem *parentItem = nullptr;
- while (p) {
- p = p->parent();
- parentItem = qobject_cast<QQuickWebView *>(p);
- if (parentItem)
- break;
- }
+ QQuickItem *parentItem = m_parent->m_parentItem;
if (!parentItem) {
qWarning("Could not find QQuickWebView");
diff --git a/src/plugins/webengine/qwebenginewebview_p.h b/src/plugins/webengine/qwebenginewebview_p.h
index 7f309bf..e4a0730 100644
--- a/src/plugins/webengine/qwebenginewebview_p.h
+++ b/src/plugins/webengine/qwebenginewebview_p.h
@@ -30,6 +30,7 @@
QT_BEGIN_NAMESPACE
+class QQuickItem;
class QQuickWebEngineView;
class QQuickWindow;
class QWebEngineLoadingInfo;
@@ -70,6 +71,7 @@ public:
explicit QWebEngineWebViewPrivate(QWebView *p);
~QWebEngineWebViewPrivate() override;
+ void initialize(QObject *context) override;
QString httpUserAgent() const override;
void setHttpUserAgent(const QString &userAgent) override;
QUrl url() const override;
@@ -139,6 +141,7 @@ private:
QQuickWebEngineViewPtr *m_webEngineViewPtr = nullptr;
mutable QWebEngineCookieStore *m_cookieStore = nullptr;
} m_cookieStore;
+ QQuickItem *m_parentItem;
QQuickWindow *m_window;
bool m_ownsWindow;
};
diff --git a/src/plugins/windows/qwebview2webview_p.h b/src/plugins/windows/qwebview2webview_p.h
index 85bfeda..ad2ff4c 100644
--- a/src/plugins/windows/qwebview2webview_p.h
+++ b/src/plugins/windows/qwebview2webview_p.h
@@ -65,6 +65,7 @@ public:
explicit QWebView2WebViewPrivate(QWebView *view);
~QWebView2WebViewPrivate() override;
+ void initialize(QObject *context) override { Q_UNUSED(context); };
QString httpUserAgent() const override;
void setHttpUserAgent(const QString &userAgent) override;
QUrl url() const override;
diff --git a/src/quick/qquickwebview.cpp b/src/quick/qquickwebview.cpp
index 9e3e554..e1d07d8 100644
--- a/src/quick/qquickwebview.cpp
+++ b/src/quick/qquickwebview.cpp
@@ -64,7 +64,6 @@ QQuickWebView::QQuickWebView(QQuickItem *parent)
m_webView(new QWebView(window())),
m_settings(new QQuickWebViewSettings(m_webView->settings(), this))
{
- m_webView->QObject::setParent(this);
if (QWindow *nativeWindow = m_webView->d->nativeWindow())
setContainedWindow(nativeWindow);
@@ -76,6 +75,8 @@ QQuickWebView::QQuickWebView(QQuickItem *parent)
connect(m_webView, &QWebView::httpUserAgentChanged, this, &QQuickWebView::httpUserAgentChanged);
connect(m_webView, &QWebView::cookieAdded, this, &QQuickWebView::cookieAdded);
connect(m_webView, &QWebView::cookieRemoved, this, &QQuickWebView::cookieRemoved);
+
+ m_webView->d->initialize(this);
}
QQuickWebView::~QQuickWebView() { }
diff --git a/src/webview/qabstractwebview_p.h b/src/webview/qabstractwebview_p.h
index eae92c2..d27affe 100644
--- a/src/webview/qabstractwebview_p.h
+++ b/src/webview/qabstractwebview_p.h
@@ -50,6 +50,7 @@ class Q_WEBVIEW_EXPORT QAbstractWebView
Q_OBJECT
public:
+ virtual void initialize(QObject *context) = 0;
virtual QAbstractWebViewSettings *settings() const = 0;
virtual QString httpUserAgent() const = 0;
virtual void setHttpUserAgent(const QString &httpUserAgent) = 0;