summaryrefslogtreecommitdiffstats
path: root/src/webenginequick/api/qquickwebengineview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/webenginequick/api/qquickwebengineview.cpp')
-rw-r--r--src/webenginequick/api/qquickwebengineview.cpp38
1 files changed, 33 insertions, 5 deletions
diff --git a/src/webenginequick/api/qquickwebengineview.cpp b/src/webenginequick/api/qquickwebengineview.cpp
index a2c8816bf..bb573609f 100644
--- a/src/webenginequick/api/qquickwebengineview.cpp
+++ b/src/webenginequick/api/qquickwebengineview.cpp
@@ -1859,19 +1859,47 @@ void QQuickWebEngineView::geometryChange(const QRectF &newGeometry, const QRectF
{
QQuickItem::geometryChange(newGeometry, oldGeometry);
Q_D(QQuickWebEngineView);
- if (d->delegateItem)
+ if (d->delegateItem) {
d->delegateItem->setSize(newGeometry.size());
+ // this handles notifications of local offset changes
+ d->delegateItem->polish();
+ }
}
void QQuickWebEngineView::itemChange(ItemChange change, const ItemChangeData &value)
{
- Q_D(QQuickWebEngineView);
- if (d && d->profileInitialized() && d->adapter->isInitialized()
+ QQuickItem::itemChange(change, value);
+ if (!d_ptr) // see releaseProfile()
+ return;
+ if (d_ptr->profileInitialized() && d_ptr->adapter->isInitialized()
&& (change == ItemSceneChange || change == ItemVisibleHasChanged)) {
if (window())
- d->adapter->setVisible(isVisible());
+ d_ptr->adapter->setVisible(isVisible());
+ }
+ if (change == ItemParentHasChanged) {
+ // track global offset changes
+ QQuickItem *item = value.item;
+ // detach
+ while (item) {
+ disconnect(item, nullptr, this, nullptr);
+ item = item->parentItem();
+ }
+ // attach
+ item = parentItem();
+ while (item) {
+ connect(item, &QQuickItem::xChanged, this, [this]() {
+ if (d_ptr && d_ptr->delegateItem)
+ d_ptr->delegateItem->polish();
+ });
+ connect(item, &QQuickItem::yChanged, this, [this]() {
+ if (d_ptr && d_ptr->delegateItem)
+ d_ptr->delegateItem->polish();
+ });
+ item = item->parentItem();
+ }
+ if (d_ptr->delegateItem)
+ d_ptr->delegateItem->polish();
}
- QQuickItem::itemChange(change, value);
}
void QQuickWebEngineView::acceptAsNewWindow(QWebEngineNewWindowRequest *request)