summaryrefslogtreecommitdiff
path: root/src/webenginewidgets/api/qwebengineview.cpp
diff options
context:
space:
mode:
authorKirill Burtsev <kirill.burtsev@qt.io>2018-08-22 09:53:21 +0200
committerKirill Burtsev <kirill.burtsev@qt.io>2018-10-01 09:47:54 +0000
commit3257ab9ce01b01b667237fd6ad33512739db5b01 (patch)
treedc550c6276444f8077b69319987efd56c00001d4 /src/webenginewidgets/api/qwebengineview.cpp
parent774f8d3d8099286ee1202fb8b809b399b4632fb3 (diff)
downloadqtwebengine-3257ab9ce01b01b667237fd6ad33512739db5b01.tar.gz
Fix QWebEngineView changed properties emit on setPage
QWebEngineView now also emits url, title, icon and selection changes on setPage in the save way when url changes. Before, those updates were only forwarded from current page. Fixes: QTBUG-69300 Change-Id: If827205094423bc00064a123ddb143b6002d2e7c Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Diffstat (limited to 'src/webenginewidgets/api/qwebengineview.cpp')
-rw-r--r--src/webenginewidgets/api/qwebengineview.cpp76
1 files changed, 60 insertions, 16 deletions
diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp
index aa51e5b0e..e6f9fcb49 100644
--- a/src/webenginewidgets/api/qwebengineview.cpp
+++ b/src/webenginewidgets/api/qwebengineview.cpp
@@ -55,33 +55,77 @@
QT_BEGIN_NAMESPACE
-void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page, bool pageBeingDeleted)
+void QWebEngineViewPrivate::notify(QWebEngineView *view, QWebEnginePage *oldPage, QWebEnginePage *newPage)
+{
+ Q_ASSERT(view);
+
+ auto oldUrl = oldPage ? oldPage->url() : QUrl();
+ auto newUrl = newPage ? newPage->url() : QUrl();
+ if (oldUrl != newUrl)
+ Q_EMIT view->urlChanged(newUrl);
+
+ auto oldTitle = oldPage ? oldPage->title() : QString();
+ auto newTitle = newPage ? newPage->title() : QString();
+ if (oldTitle != newTitle)
+ Q_EMIT view->titleChanged(newTitle);
+
+ auto oldIcon = oldPage ? oldPage->iconUrl() : QUrl();
+ auto newIcon = newPage ? newPage->iconUrl() : QUrl();
+ if (oldIcon != newIcon) {
+ Q_EMIT view->iconUrlChanged(newIcon);
+ Q_EMIT view->iconChanged(newPage ? newPage->icon() : QIcon());
+ }
+
+ if ((oldPage && oldPage->hasSelection()) || (newPage && newPage->hasSelection()))
+ Q_EMIT view->selectionChanged();
+}
+
+QWebEnginePage* QWebEngineViewPrivate::removeViewFromPage(QWebEngineView *view)
+{
+ Q_ASSERT(view);
+ QWebEnginePage *oldPage = view->d_func()->page;
+
+ if (oldPage) {
+ oldPage->disconnect(view);
+ oldPage->d_func()->view = nullptr;
+ if (oldPage->parent() != view)
+ oldPage->d_func()->adapter->reattachRWHV();
+ }
+ return oldPage;
+}
+
+void QWebEngineViewPrivate::removePageFromView(QWebEnginePage *page)
+{
+ Q_ASSERT(page);
+ if (QWebEngineView *oldView = page->d_func()->view) {
+ page->disconnect(oldView);
+ page->d_func()->view = nullptr;
+ oldView->d_func()->page = nullptr;
+ notify(oldView, page, nullptr);
+ }
+}
+
+void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page)
{
if (view && page == view->d_func()->page)
return;
if (page) {
// Un-bind page from its current view.
- if (QWebEngineView *oldView = page->d_func()->view) {
- page->disconnect(oldView);
- oldView->d_func()->page = nullptr;
- }
+ removePageFromView(page);
page->d_func()->view = view;
- if (!pageBeingDeleted)
- page->d_func()->adapter->reattachRWHV();
+ page->d_func()->adapter->reattachRWHV();
}
if (view) {
// Un-bind view from its current page.
- if (QWebEnginePage *oldPage = view->d_func()->page) {
- oldPage->disconnect(view);
- oldPage->d_func()->view = nullptr;
- if (oldPage->parent() == view)
- delete oldPage;
- else
- oldPage->d_func()->adapter->reattachRWHV();
- }
+ QWebEnginePage *oldPage = removeViewFromPage(view);
+
view->d_func()->page = page;
+ notify(view, oldPage, page);
+
+ if (oldPage && oldPage->parent() == view)
+ delete oldPage;
}
if (view && page) {
@@ -149,7 +193,7 @@ QWebEngineView::QWebEngineView(QWidget *parent)
QWebEngineView::~QWebEngineView()
{
- QWebEngineViewPrivate::bind(this, nullptr);
+ QWebEngineViewPrivate::removeViewFromPage(this);
}
QWebEnginePage* QWebEngineView::page() const