diff options
| author | Michal Klocek <michal.klocek@qt.io> | 2025-11-24 14:32:52 +0100 |
|---|---|---|
| committer | Michal Klocek <michal.klocek@qt.io> | 2025-11-28 11:43:06 +0100 |
| commit | 9cc1d5087d0ea5e72543e4ad769ce5d81c7663ca (patch) | |
| tree | 3aa26e78260a3f167cc2edfdb6d8edb676a557d8 | |
| parent | 8b100e6a33134a2649a6838fa2fe58df1d432a96 (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.h | 1 | ||||
| -rw-r--r-- | src/plugins/darwin/qdarwinwebview_p.h | 1 | ||||
| -rw-r--r-- | src/plugins/wasm/qwasmwebview_p.h | 1 | ||||
| -rw-r--r-- | src/plugins/webengine/qwebenginewebview.cpp | 15 | ||||
| -rw-r--r-- | src/plugins/webengine/qwebenginewebview_p.h | 3 | ||||
| -rw-r--r-- | src/plugins/windows/qwebview2webview_p.h | 1 | ||||
| -rw-r--r-- | src/quick/qquickwebview.cpp | 3 | ||||
| -rw-r--r-- | src/webview/qabstractwebview_p.h | 1 |
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; |
