summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/api/qwebenginepage.cpp8
-rw-r--r--src/core/api/qwebenginepage_p.h4
-rw-r--r--src/webenginewidgets/api/qwebengineview.cpp48
3 files changed, 23 insertions, 37 deletions
diff --git a/src/core/api/qwebenginepage.cpp b/src/core/api/qwebenginepage.cpp
index 332a612fc..f309e05dd 100644
--- a/src/core/api/qwebenginepage.cpp
+++ b/src/core/api/qwebenginepage.cpp
@@ -159,10 +159,10 @@ QWebEnginePagePrivate::~QWebEnginePagePrivate()
RenderWidgetHostViewQtDelegate *QWebEnginePagePrivate::CreateRenderWidgetHostViewQtDelegate(RenderWidgetHostViewQtDelegateClient *client)
{
- item = view
- ? (QtWebEngineCore::RenderWidgetHostViewQtDelegateItem *)view->CreateRenderWidgetHostViewQtDelegate(client)
- : new QtWebEngineCore::RenderWidgetHostViewQtDelegateItem(client, false);
- return item;
+ if (view)
+ return view->CreateRenderWidgetHostViewQtDelegate(client);
+ delegateItem = new QtWebEngineCore::RenderWidgetHostViewQtDelegateItem(client, false);
+ return delegateItem;
}
RenderWidgetHostViewQtDelegate *QWebEnginePagePrivate::CreateRenderWidgetHostViewQtDelegateForPopup(RenderWidgetHostViewQtDelegateClient *client)
diff --git a/src/core/api/qwebenginepage_p.h b/src/core/api/qwebenginepage_p.h
index 68203ba76..60ab87dfd 100644
--- a/src/core/api/qwebenginepage_p.h
+++ b/src/core/api/qwebenginepage_p.h
@@ -68,7 +68,6 @@ class RenderWidgetHostViewQtDelegateItem;
class TouchHandleDrawableDelegate;
class TouchSelectionMenuController;
class WebContentsAdapter;
-class WidgetDelegate;
}
QT_BEGIN_NAMESPACE
@@ -237,8 +236,7 @@ public:
bool defaultAudioMuted;
qreal defaultZoomFactor;
QTimer wasShownTimer;
- QtWebEngineCore::WidgetDelegate *widget = nullptr;
- QtWebEngineCore::RenderWidgetHostViewQtDelegateItem *item = nullptr;
+ QtWebEngineCore::RenderWidgetHostViewQtDelegateItem *delegateItem = nullptr;
#if QT_CONFIG(webengine_printing_and_pdf)
QPrinter *currentPrinter = nullptr;
#endif
diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp
index 54a1ba0b1..c100a767a 100644
--- a/src/webenginewidgets/api/qwebengineview.cpp
+++ b/src/webenginewidgets/api/qwebengineview.cpp
@@ -142,23 +142,11 @@ public:
void Bind(WebContentsAdapterClient *client) override
{
- BindPage(static_cast<QWebEnginePagePrivate *>(client));
- }
-
- void BindPage(QWebEnginePagePrivate *page)
- {
+ QWebEnginePagePrivate *page = static_cast<QWebEnginePagePrivate *>(client);
if (m_pageDestroyedConnection)
QObject::disconnect(m_pageDestroyedConnection);
QWebEngineViewPrivate::bindPageAndWidget(page, this);
- m_pageDestroyedConnection = QObject::connect(page->q_ptr, &QObject::destroyed, this, &WebEngineQuickWidget::UnbindPage);
- }
-
- void UnbindPage()
- {
- Unbind();
- // In case we are not bound to a WebContentsAdapterClient that would destroy us:
- if (!parent())
- Destroy();
+ m_pageDestroyedConnection = QObject::connect(page->q_ptr, &QObject::destroyed, this, &WebEngineQuickWidget::Unbind);
}
void Unbind() override
@@ -672,6 +660,7 @@ QWebEngineViewPrivate::QWebEngineViewPrivate()
QWebEngineViewPrivate::~QWebEngineViewPrivate() = default;
+// static
void QWebEngineViewPrivate::bindPageAndView(QWebEnginePage *page, QWebEngineView *view)
{
QWebEngineViewPrivate *v =
@@ -705,8 +694,10 @@ void QWebEngineViewPrivate::bindPageAndView(QWebEnginePage *page, QWebEngineView
// Then notify.
- auto widget = page ? static_cast<QtWebEngineCore::WebEngineQuickWidget *>(page->d_func()->widget) : nullptr;
- auto oldWidget = (oldPage && oldPage->d_func()) ? static_cast<QtWebEngineCore::WebEngineQuickWidget *>(oldPage->d_func()->widget) : nullptr;
+ auto item = page ? page->d_func()->delegateItem : nullptr;
+ auto oldItem = (oldPage && oldPage->d_func()) ? oldPage->d_func()->delegateItem : nullptr;
+ auto widget = item ? static_cast<QtWebEngineCore::WebEngineQuickWidget *>(item->m_widgetDelegate) : nullptr;
+ auto oldWidget = oldItem ? static_cast<QtWebEngineCore::WebEngineQuickWidget *>(oldItem->m_widgetDelegate) : nullptr;
// New page/widget moving away from oldView
if (page && oldView != view && oldView) {
@@ -721,9 +712,9 @@ void QWebEngineViewPrivate::bindPageAndView(QWebEnginePage *page, QWebEngineView
view->d_func()->pageChanged(oldPage, page);
else
view->d_func()->pageChanged(nullptr, page);
- if (!widget && page && page->d_func()->item) {
- widget = new QtWebEngineCore::WebEngineQuickWidget(page->d_func()->item, nullptr);
- widget->BindPage(page->d_func());
+ if (!widget && item) {
+ widget = new QtWebEngineCore::WebEngineQuickWidget(item, nullptr);
+ item->setWidgetDelegate(widget);
}
if (oldWidget != widget)
view->d_func()->widgetChanged(oldWidget, widget);
@@ -732,25 +723,22 @@ void QWebEngineViewPrivate::bindPageAndView(QWebEnginePage *page, QWebEngineView
delete oldPage;
}
+// static
void QWebEngineViewPrivate::bindPageAndWidget(QWebEnginePagePrivate *pagePrivate,
QtWebEngineCore::WebEngineQuickWidget *widget)
{
- auto oldAdapterClient = (widget && widget->m_contentItem) ? widget->m_contentItem->m_adapterClient : nullptr;
- auto oldWidget = pagePrivate ? static_cast<QtWebEngineCore::WebEngineQuickWidget *>(pagePrivate->widget) : nullptr;
-
+ auto *oldAdapterClient = (widget && widget->m_contentItem) ? widget->m_contentItem->m_adapterClient : nullptr;
auto *oldPagePrivate = static_cast<QWebEnginePagePrivate *>(oldAdapterClient);
+ auto *oldItem = pagePrivate ? pagePrivate->delegateItem : nullptr;
+ auto *oldWidget = oldItem ? static_cast<QtWebEngineCore::WebEngineQuickWidget *>(oldItem->m_widgetDelegate) : nullptr;
// Change pointers first.
- if (oldPagePrivate && oldPagePrivate != pagePrivate) {
- oldPagePrivate->widget = nullptr;
- oldPagePrivate->item = nullptr;
- }
+ if (oldPagePrivate && oldPagePrivate != pagePrivate)
+ oldPagePrivate->delegateItem = nullptr;
- if (pagePrivate && oldWidget != widget) {
- pagePrivate->widget = widget;
- pagePrivate->item = widget->m_contentItem;
- }
+ if (pagePrivate && oldWidget != widget)
+ pagePrivate->delegateItem = widget->m_contentItem;
// Then notify.