summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/render_widget_host_view_qt_delegate_item.cpp13
-rw-r--r--src/core/render_widget_host_view_qt_delegate_item.h2
-rw-r--r--src/webenginequick/api/qquickwebengineview.cpp38
3 files changed, 43 insertions, 10 deletions
diff --git a/src/core/render_widget_host_view_qt_delegate_item.cpp b/src/core/render_widget_host_view_qt_delegate_item.cpp
index 8a53636b6..8c7405381 100644
--- a/src/core/render_widget_host_view_qt_delegate_item.cpp
+++ b/src/core/render_widget_host_view_qt_delegate_item.cpp
@@ -321,7 +321,7 @@ void RenderWidgetHostViewQtDelegateItem::inputMethodEvent(QInputMethodEvent *eve
void RenderWidgetHostViewQtDelegateItem::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry)
{
QQuickItem::geometryChange(newGeometry, oldGeometry);
- m_client->visualPropertiesChanged();
+ polish();
}
void RenderWidgetHostViewQtDelegateItem::itemChange(ItemChange change, const ItemChangeData &value)
@@ -352,7 +352,7 @@ void RenderWidgetHostViewQtDelegateItem::itemChange(ItemChange change, const Ite
if (!m_isPopup)
m_windowConnections.append(connect(value.window, SIGNAL(closing(QQuickCloseEvent*)), SLOT(onHide())));
}
- m_client->visualPropertiesChanged();
+ polish();
} else if (change == QQuickItem::ItemVisibleHasChanged) {
if (value.boolValue) {
m_client->notifyShown();
@@ -364,7 +364,7 @@ void RenderWidgetHostViewQtDelegateItem::itemChange(ItemChange change, const Ite
onHide();
}
} else if (change == QQuickItem::ItemDevicePixelRatioHasChanged) {
- m_client->visualPropertiesChanged();
+ polish();
}
}
@@ -490,6 +490,11 @@ QSGNode *RenderWidgetHostViewQtDelegateItem::updatePaintNode(QSGNode *oldNode, U
return node;
}
+void RenderWidgetHostViewQtDelegateItem::updatePolish()
+{
+ m_client->visualPropertiesChanged();
+}
+
void RenderWidgetHostViewQtDelegateItem::onBeforeRendering()
{
auto comp = compositor();
@@ -508,7 +513,7 @@ void RenderWidgetHostViewQtDelegateItem::onAfterFrameEnd()
void RenderWidgetHostViewQtDelegateItem::onWindowPosChanged()
{
- m_client->visualPropertiesChanged();
+ polish();
}
void RenderWidgetHostViewQtDelegateItem::onHide()
diff --git a/src/core/render_widget_host_view_qt_delegate_item.h b/src/core/render_widget_host_view_qt_delegate_item.h
index aceec7912..a4246b8ff 100644
--- a/src/core/render_widget_host_view_qt_delegate_item.h
+++ b/src/core/render_widget_host_view_qt_delegate_item.h
@@ -74,7 +74,7 @@ public:
void setInputMethodHints(Qt::InputMethodHints) override;
void setClearColor(const QColor &color) override;
void unhandledWheelEvent(QWheelEvent *ev) override;
-
+ void updatePolish() override;
void readyToSwap() override;
void setWidgetDelegate(WidgetDelegate *delegate);
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)