From 900137ea6a593f612e091cf629fc3a0ec929fb5f Mon Sep 17 00:00:00 2001 From: Andrew den Exter Date: Fri, 25 Nov 2011 13:33:09 +1000 Subject: Fix searchs for insert positions in QDeclarativeListCompositor. When scanning for a start range don't stop on ranges that don't have an group flags unless that range is the terminal range. This fixes a couple of issues where moving an item to the end of the list would position it after a prepend only range instead of before it, or would miscalculate the iterator offset resulting in invalid indexes in the insert range. Change-Id: Ic4aa001edf43ec86a65d432cd8f80abf0b44d276 Reviewed-by: Martin Jones --- src/declarative/util/qdeclarativelistcompositor.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/declarative') diff --git a/src/declarative/util/qdeclarativelistcompositor.cpp b/src/declarative/util/qdeclarativelistcompositor.cpp index 02db70f09d..d73d76e386 100644 --- a/src/declarative/util/qdeclarativelistcompositor.cpp +++ b/src/declarative/util/qdeclarativelistcompositor.cpp @@ -199,7 +199,7 @@ QDeclarativeListCompositor::iterator &QDeclarativeListCompositor::iterator::oper QDeclarativeListCompositor::insert_iterator &QDeclarativeListCompositor::insert_iterator::operator +=(int difference) { Q_ASSERT(difference >= 0); - while (!(range->flags & groupFlag) && (range->flags & (GroupMask | CacheFlag))) { + while (!(range->flags & groupFlag)) { incrementIndexes(range->count - offset); offset = 0; range = range->next; @@ -221,10 +221,10 @@ QDeclarativeListCompositor::insert_iterator &QDeclarativeListCompositor::insert_ QDeclarativeListCompositor::insert_iterator &QDeclarativeListCompositor::insert_iterator::operator -=(int difference) { Q_ASSERT(difference >= 0); - while (!(range->flags & groupFlag) && (range->flags & (GroupMask | CacheFlag))) { + while (!(range->flags & groupFlag) && range->previous->flags) { decrementIndexes(offset); range = range->previous; - offset = range->count; + offset = (range->flags & (GroupMask | CacheFlag)) ? range->count : 0; } decrementIndexes(offset); offset -= difference; -- cgit v1.2.3