Don't give move ids to moved inserts.
authorAndrew den Exter <andrew.den-exter@nokia.com>
Mon, 26 Sep 2011 06:42:17 +0000 (16:42 +1000)
committerQt by Nokia <qt-info@nokia.com>
Mon, 26 Sep 2011 07:37:32 +0000 (09:37 +0200)
Move ids identify a paired remove and insert, an insert that has a
move id but no corresponding remove breaks anything relying on that
identity.

Change-Id: I9512e298bc518c5abf5bca7523a375baf8a39407
Reviewed-on: http://codereview.qt-project.org/5512
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Andrew den Exter <andrew.den-exter@nokia.com>

src/declarative/util/qdeclarativechangeset.cpp
tests/auto/declarative/qdeclarativechangeset/tst_qdeclarativechangeset.cpp

index d941d5e..9e87593 100644 (file)
@@ -219,7 +219,8 @@ void QDeclarativeChangeSet::applyRemovals(QVector<Remove> &removals, QVector<Ins
             }
 
             if (rit->moveId != -1 && difference > 0) {
-                iit = insertions.insert(iit, Insert(iit->index, difference, moveId));
+                iit = insertions.insert(iit, Insert(
+                        iit->index, difference, insert->moveId != -1 ? moveId : -1));
                 ++iit;
                 iit->index += difference;
                 iit->count -= difference;
index 4aaefba..6b3fcf9 100644 (file)
@@ -132,8 +132,13 @@ private slots:
     void sequence();
 };
 
-bool operator ==(const tst_qdeclarativemodelchange::Signal &left, const tst_qdeclarativemodelchange::Signal &right) {
-    return left.index == right.index && left.count == right.count && left.to == right.to; }
+bool operator ==(const tst_qdeclarativemodelchange::Signal &left, const tst_qdeclarativemodelchange::Signal &right)
+{
+    return left.index == right.index
+            && left.count == right.count
+            && left.to == right.to
+            && ((left.moveId == -1 && right.moveId == -1) || left.moveId != -1 && right.moveId != -1);
+}
 
 
 QDebug operator <<(QDebug debug, const tst_qdeclarativemodelchange::Signal &signal)