diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-06-10 15:21:49 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-06-11 08:32:44 +0200 |
commit | d12adcd84d9246e029b9a8340da4545a1f1797ec (patch) | |
tree | b4a90008efef6de190600312d18854eb30d44a72 /src/webenginewidgets/api | |
parent | 4ffc841ba7e9de4be8b2a2eed95cff5278a708ca (diff) |
Avoid extra window after change of page
A widget created for an item in a viewless page, still needs to be
tracked as a widget.
Pick-to: 6.4
Change-Id: I9d571916b28b1cb2b8bd184d008255b9af105c33
Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
Diffstat (limited to 'src/webenginewidgets/api')
-rw-r--r-- | src/webenginewidgets/api/qwebengineview.cpp | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp index cf8af53e3..9fa5f11fc 100644 --- a/src/webenginewidgets/api/qwebengineview.cpp +++ b/src/webenginewidgets/api/qwebengineview.cpp @@ -139,17 +139,31 @@ public: void Bind(WebContentsAdapterClient *client) override { + BindPage(static_cast<QWebEnginePagePrivate *>(client)->q_func()); + } + + void BindPage(QWebEnginePage *page) + { if (m_pageDestroyedConnection) QObject::disconnect(m_pageDestroyedConnection); - QWebEnginePage *page = static_cast<QWebEnginePagePrivate *>(client)->q_func(); QWebEngineViewPrivate::bindPageAndWidget(page, this); - m_pageDestroyedConnection = QObject::connect(page, &QWebEnginePage::_q_aboutToDelete, this, &WebEngineQuickWidget::Unbind); + m_pageDestroyedConnection = QObject::connect(page, &QObject::destroyed, this, &WebEngineQuickWidget::UnbindPage); + } + + void UnbindPage() + { + Unbind(); + // In case we are not bound to a WebContentsAdapterClient that would destroy us: + if (!parent()) + Destroy(); } void Unbind() override { - if (m_pageDestroyedConnection) + if (m_pageDestroyedConnection) { QObject::disconnect(m_pageDestroyedConnection); + m_pageDestroyedConnection = {}; + } QWebEngineViewPrivate::bindPageAndWidget(nullptr, this); } @@ -639,7 +653,7 @@ static QAccessibleInterface *webAccessibleFactory(const QString &, QObject *obje #endif // QT_CONFIG(accessibility) QWebEngineViewPrivate::QWebEngineViewPrivate() - : page(0) + : page(nullptr) , m_dragEntered(false) , m_ownsPage(false) , m_contextRequest(nullptr) @@ -700,8 +714,10 @@ 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) + if (!widget && page && page->d_func()->item) { widget = new QtWebEngineCore::WebEngineQuickWidget(page->d_func()->item, nullptr); + widget->BindPage(page); + } if (oldWidget != widget) view->d_func()->widgetChanged(oldWidget, widget); } |