diff options
author | J-P Nurmi <jpnurmi@theqtcompany.com> | 2015-02-12 15:53:02 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@theqtcompany.com> | 2015-02-12 15:53:02 +0100 |
commit | 1a5413df3d9a0602f074562e2e92751df369d016 (patch) | |
tree | 461a56ee176e873bee441fe4d899d7a683deca9d /src/layouts | |
parent | a2f81b85d5dfa7fbd3b11557fe38de649a1f6914 (diff) | |
parent | 9af9dabe3c88baa87befe5a4591d7f3508888307 (diff) |
Merge remote-tracking branch 'origin/5.4' into dev
Conflicts:
src/controls/TableView.qml
tests/auto/controls/data/tst_gridlayout.qml
Change-Id: I030bc50dc8fcf7b6b00e183dc3a67c3cd012f3fb
Diffstat (limited to 'src/layouts')
-rw-r--r-- | src/layouts/qquicklinearlayout.cpp | 21 | ||||
-rw-r--r-- | src/layouts/qquicklinearlayout_p.h | 5 |
2 files changed, 26 insertions, 0 deletions
diff --git a/src/layouts/qquicklinearlayout.cpp b/src/layouts/qquicklinearlayout.cpp index e22951ac9..0b9c6f546 100644 --- a/src/layouts/qquicklinearlayout.cpp +++ b/src/layouts/qquicklinearlayout.cpp @@ -393,6 +393,11 @@ void QQuickGridLayoutBase::invalidate(QQuickItem *childItem) Q_D(QQuickGridLayoutBase); if (!isReady()) return; + if (d->m_rearranging) { + d->m_invalidateAfterRearrange << childItem; + return; + } + quickLayoutDebug() << "QQuickGridLayoutBase::invalidate()"; if (childItem) { @@ -432,6 +437,11 @@ void QQuickGridLayoutBase::updateLayoutItems() Q_D(QQuickGridLayoutBase); if (!isReady()) return; + if (d->m_rearranging) { + d->m_updateAfterRearrange = true; + return; + } + quickLayoutDebug() << "QQuickGridLayoutBase::updateLayoutItems"; d->engine.deleteItems(); insertLayoutItems(); @@ -540,6 +550,7 @@ void QQuickGridLayoutBase::rearrange(const QSizeF &size) if (!isReady()) return; + d->m_rearranging = true; quickLayoutDebug() << objectName() << "QQuickGridLayoutBase::rearrange()" << size; Qt::LayoutDirection visualDir = effectiveLayoutDirection(); d->engine.setVisualDirection(visualDir); @@ -555,6 +566,16 @@ void QQuickGridLayoutBase::rearrange(const QSizeF &size) // This could happen if there is a binding like implicitWidth: height QQuickLayout::rearrange(size); d->engine.setGeometries(QRectF(QPointF(0,0), size), d->styleInfo); + d->m_rearranging = false; + + foreach (QQuickItem *invalid, d->m_invalidateAfterRearrange) + invalidate(invalid); + d->m_invalidateAfterRearrange.clear(); + + if (d->m_updateAfterRearrange) { + updateLayoutItems(); + d->m_updateAfterRearrange = false; + } } bool QQuickGridLayoutBase::shouldIgnoreItem(QQuickItem *child, QQuickLayoutAttached *&info, QSizeF *sizeHints) diff --git a/src/layouts/qquicklinearlayout_p.h b/src/layouts/qquicklinearlayout_p.h index 322ae93eb..0f43badd7 100644 --- a/src/layouts/qquicklinearlayout_p.h +++ b/src/layouts/qquicklinearlayout_p.h @@ -109,6 +109,8 @@ class QQuickGridLayoutBasePrivate : public QQuickLayoutPrivate public: QQuickGridLayoutBasePrivate() : m_disableRearrange(true) , m_isReady(false) + , m_rearranging(false) + , m_updateAfterRearrange(false) , m_layoutDirection(Qt::LeftToRight) {} @@ -122,6 +124,9 @@ public: Qt::Orientation orientation; unsigned m_disableRearrange : 1; unsigned m_isReady : 1; + unsigned m_rearranging : 1; + unsigned m_updateAfterRearrange : 1; + QVector<QQuickItem *> m_invalidateAfterRearrange; Qt::LayoutDirection m_layoutDirection : 2; QSet<QQuickItem *> m_ignoredItems; |