summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2022-10-13 10:36:11 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-10-19 17:18:40 +0000
commit2656991bb228b0079b3cd3e2dfae2943032c8421 (patch)
tree92524dcd17faec51f7e68d76d1403c8de24bcb08
parentcca5d9b698e366585a2510c4a4386c3d076a40d9 (diff)
Fix bogus layouting of qwebengineview
We did not really change pointers for doing a widget and a item delegate binding. This at some point was blowing up as we did not remove the old widget before inserting the new widget into the internal webengineview layout. The issue could get unnoticed for a while as the old widget got eventually removed on a destruction. However, at times when on the qlayout activation call the old widget was considered, resize event was triggered which was setting viewport to false value (minimum size to hold two webcontents). Make sure we remove widget before adding the new widget. This fixes the widget and the item bind, however this logic should be rewritten for dev branch as is get more and more complex. Fixes: QTBUG-107529 Change-Id: I31d180b54f52e38b3c335cfa2bf3afa61e449677 Reviewed-by: Martin Negyokru <negyokru@inf.u-szeged.hu> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> (cherry picked from commit 7c5546a78b1cbcf6d811648c003deb219ab6d070) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/webenginewidgets/api/qwebengineview.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp
index ba82b9573..51bd74e4a 100644
--- a/src/webenginewidgets/api/qwebengineview.cpp
+++ b/src/webenginewidgets/api/qwebengineview.cpp
@@ -697,11 +697,19 @@ void QWebEngineViewPrivate::bindPageAndWidget(QWebEnginePagePrivate *pagePrivate
// Change pointers first.
- if (oldPagePrivate && oldPagePrivate != pagePrivate)
- oldPagePrivate->delegateItem = nullptr;
+ if (widget && oldPagePrivate != pagePrivate) {
+ if (oldPagePrivate)
+ oldPagePrivate->delegateItem = nullptr;
+ if (widget->m_contentItem)
+ widget->m_contentItem->m_adapterClient = pagePrivate;
+ }
- if (pagePrivate && oldWidget != widget)
- pagePrivate->delegateItem = widget->m_contentItem;
+ if (pagePrivate && oldWidget != widget) {
+ if (oldWidget && oldWidget->m_contentItem)
+ oldWidget->m_contentItem->m_adapterClient = nullptr;
+ if (widget)
+ pagePrivate->delegateItem = widget->m_contentItem;
+ }
// Then notify.