summaryrefslogtreecommitdiffstats
path: root/src/webenginewidgets/api
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-04-29 15:28:53 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-04-30 08:42:18 +0000
commite44b509bad1f06d7e257bf09e80dfb5440cdbf9e (patch)
treebcc7e76650eeca4175db2fe664654df47bcdc607 /src/webenginewidgets/api
parent26ac59af2306b4f6f83e791bb3e828b9f7b1a721 (diff)
Handle corner case of assigning an implicit page to a new view
Pass the ownership on to the the new view, so it is still handled like an implicit page. Change-Id: I76ad3cb349a492e60e3ad2bdd4aebaabed07bd4f Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
Diffstat (limited to 'src/webenginewidgets/api')
-rw-r--r--src/webenginewidgets/api/qwebenginepage.cpp22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp
index 85a162383..54006169e 100644
--- a/src/webenginewidgets/api/qwebenginepage.cpp
+++ b/src/webenginewidgets/api/qwebenginepage.cpp
@@ -746,17 +746,26 @@ void QWebEnginePagePrivate::bindPageAndView(QWebEnginePage *page, QWebEngineView
auto oldView = page ? page->d_func()->view : nullptr;
auto oldPage = view ? view->d_func()->page : nullptr;
+ bool ownNewPage = false;
+ bool deleteOldPage = false;
+
// Change pointers first.
if (page && oldView != view) {
- if (oldView)
+ if (oldView) {
+ ownNewPage = oldView->d_func()->m_ownsPage;
oldView->d_func()->page = nullptr;
+ oldView->d_func()->m_ownsPage = false;
+ }
page->d_func()->view = view;
}
if (view && oldPage != page) {
- if (oldPage)
+ if (oldPage) {
oldPage->d_func()->view = nullptr;
+ deleteOldPage = view->d_func()->m_ownsPage;
+ }
+ view->d_func()->m_ownsPage = ownNewPage;
view->d_func()->page = page;
}
@@ -775,14 +784,9 @@ void QWebEnginePagePrivate::bindPageAndView(QWebEnginePage *page, QWebEngineView
view->d_func()->pageChanged(oldPage, page);
if (oldWidget != widget)
view->d_func()->widgetChanged(oldWidget, widget);
-
- // At this point m_ownsPage should still refer to oldPage,
- // it is only set for the new page after binding.
- if (view->d_func()->m_ownsPage) {
- delete oldPage;
- view->d_func()->m_ownsPage = false;
- }
}
+ if (deleteOldPage)
+ delete oldPage;
}
void QWebEnginePagePrivate::bindPageAndWidget(QWebEnginePage *page, RenderWidgetHostViewQtDelegateWidget *widget)