diff options
author | Michal Klocek <michal.klocek@qt.io> | 2022-10-13 10:36:11 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-10-19 17:18:40 +0000 |
commit | 2656991bb228b0079b3cd3e2dfae2943032c8421 (patch) | |
tree | 92524dcd17faec51f7e68d76d1403c8de24bcb08 | |
parent | cca5d9b698e366585a2510c4a4386c3d076a40d9 (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.cpp | 16 |
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. |