summaryrefslogtreecommitdiffstats
path: root/src/layouts
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@theqtcompany.com>2015-02-12 15:53:02 +0100
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2015-02-12 15:53:02 +0100
commit1a5413df3d9a0602f074562e2e92751df369d016 (patch)
tree461a56ee176e873bee441fe4d899d7a683deca9d /src/layouts
parenta2f81b85d5dfa7fbd3b11557fe38de649a1f6914 (diff)
parent9af9dabe3c88baa87befe5a4591d7f3508888307 (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.cpp21
-rw-r--r--src/layouts/qquicklinearlayout_p.h5
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;