diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-04-29 15:28:53 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-04-30 08:42:18 +0000 |
commit | e44b509bad1f06d7e257bf09e80dfb5440cdbf9e (patch) | |
tree | bcc7e76650eeca4175db2fe664654df47bcdc607 /src/webenginewidgets/api | |
parent | 26ac59af2306b4f6f83e791bb3e828b9f7b1a721 (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.cpp | 22 |
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) |