diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/render_widget_host_view_qt_delegate_item.cpp | 13 | ||||
| -rw-r--r-- | src/core/render_widget_host_view_qt_delegate_item.h | 2 | ||||
| -rw-r--r-- | src/webenginequick/api/qquickwebengineview.cpp | 38 |
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) |
