From ad343ad8ffc1016dd7d2d79603148ab2a07fe713 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Thu, 12 Apr 2018 10:18:06 +0200 Subject: QQuickSwipeDelegate: don't re-position until component complete This avoids a binding loop with implicitBackgroundWidth. The problem is that reposition() calls QQuickControl::background(), which may force an early execution that triggers a whole bunch of expressions to be re-evaluated. Change-Id: I6d780a3ecb78cfb0581fee859a7ead0eb7ecdc1a Reviewed-by: Mitch Curtis --- src/quicktemplates2/qquickswipedelegate.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/quicktemplates2/qquickswipedelegate.cpp') diff --git a/src/quicktemplates2/qquickswipedelegate.cpp b/src/quicktemplates2/qquickswipedelegate.cpp index 9df361ee..ed6da9dc 100644 --- a/src/quicktemplates2/qquickswipedelegate.cpp +++ b/src/quicktemplates2/qquickswipedelegate.cpp @@ -1217,12 +1217,19 @@ void QQuickSwipeDelegate::touchEvent(QTouchEvent *event) event->ignore(); } +void QQuickSwipeDelegate::componentComplete() +{ + Q_D(QQuickSwipeDelegate); + QQuickItemDelegate::componentComplete(); + QQuickSwipePrivate::get(&d->swipe)->reposition(DontAnimatePosition); +} + void QQuickSwipeDelegate::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) { Q_D(QQuickSwipeDelegate); QQuickControl::geometryChanged(newGeometry, oldGeometry); - if (!qFuzzyCompare(newGeometry.width(), oldGeometry.width())) { + if (isComponentComplete() && !qFuzzyCompare(newGeometry.width(), oldGeometry.width())) { QQuickSwipePrivate *swipePrivate = QQuickSwipePrivate::get(&d->swipe); swipePrivate->reposition(DontAnimatePosition); } -- cgit v1.2.3