diff options
51 files changed, 558 insertions, 5198 deletions
diff --git a/examples/quick/demos/clocks/clocks.qmlproject b/examples/quick/demos/clocks/clocks.qmlproject new file mode 100644 index 0000000000..b15654600e --- /dev/null +++ b/examples/quick/demos/clocks/clocks.qmlproject @@ -0,0 +1,8 @@ +import QmlProject 1.1 + +Project { + mainFile: "clocks.qml" + QmlFiles { directory: "." } + JavaScriptFiles { directory: "." } + ImageFiles { directory: "." } +} diff --git a/examples/quick/tutorials/gettingStartedQml/core/FileDialog.qml b/examples/quick/tutorials/gettingStartedQml/core/FileDialog.qml index 3564b0d06d..dc3ad09c9c 100644 --- a/examples/quick/tutorials/gettingStartedQml/core/FileDialog.qml +++ b/examples/quick/tutorials/gettingStartedQml/core/FileDialog.qml @@ -102,8 +102,8 @@ Rectangle { anchors.centerIn: parent text: name color: "#BDCACD" - font.weight: GridView.view.currentIndex == index ? Font.DemiBold : Font.Normal - font.pointSize: GridView.view.currentIndex == index ? 12 : 10 + font.weight: dirView.currentIndex == index ? Font.DemiBold : Font.Normal + font.pointSize: dirView.currentIndex == index ? 12 : 10 elide: Text.ElideMiddle horizontalAlignment: Text.AlignHCenter } @@ -113,8 +113,8 @@ Rectangle { anchors.centerIn: parent radius: 10 antialiasing: true - scale: GridView.view.currentIndex == index ? 1 : 0.5 - opacity: GridView.view.currentIndex == index ? 1 : 0 + scale: dirView.currentIndex == index ? 1 : 0.5 + opacity: dirView.currentIndex == index ? 1 : 0 Text { id: overlay width: parent.width @@ -141,7 +141,7 @@ Rectangle { hoverEnabled: true onClicked: { - GridView.view.currentIndex = index + dirView.currentIndex = index selectedFile = directory.files[index].name selectChanged() } diff --git a/src/imports/localstorage/plugin.cpp b/src/imports/localstorage/plugin.cpp index 11886050d1..d40433e96b 100644 --- a/src/imports/localstorage/plugin.cpp +++ b/src/imports/localstorage/plugin.cpp @@ -503,7 +503,7 @@ using the Offline Storage API. \section3 Open or create a databaseData \code -import QtQuick.LocalStorage 2.0 as LS +import QtQuick.LocalStorage 2.0 as Sql db = Sql.openDatabaseSync(identifier, version, description, estimated_size, callback(db)) \endcode diff --git a/src/qml/doc/src/whatsnew.qdoc b/src/qml/doc/src/whatsnew.qdoc index e6c02c06e9..361f6e61ee 100644 --- a/src/qml/doc/src/whatsnew.qdoc +++ b/src/qml/doc/src/whatsnew.qdoc @@ -30,10 +30,10 @@ \page qtqml-releasenotes.html \inqmlmodule QtQuick 2.0 -\section1 Qt 5.0 +\section1 Qt QML in Qt 5 -The QtQml C++ module is new in Qt 5. It provides the QML engine and implements -the QML language supporting infrastructure. +The \l{Qt QML} module is new in Qt 5.0. It provides the QML engine and +implements the QML language supporting infrastructure. (Prior to Qt 5, this functionality was provided by the QtDeclarative module, which has now been replaced by the new QtQml and QtQuick C++ modules. See the @@ -100,4 +100,3 @@ has now been replaced by the new QtQml and QtQuick C++ modules. See the \endlist */ - diff --git a/src/qml/util/qqmlpropertymap.h b/src/qml/util/qqmlpropertymap.h index cd3516a907..5c79f08926 100644 --- a/src/qml/util/qqmlpropertymap.h +++ b/src/qml/util/qqmlpropertymap.h @@ -83,8 +83,8 @@ protected: virtual QVariant updateValue(const QString &key, const QVariant &input); template<class DerivedType> - QQmlPropertyMap(DerivedType *derived, QObject *parent) - : QObject(*allocatePrivate(), parent) + QQmlPropertyMap(DerivedType *derived, QObject *parentObj) + : QObject(*allocatePrivate(), parentObj) { Q_UNUSED(derived) init(&DerivedType::staticMetaObject); diff --git a/src/quick/items/qquickflickable.cpp b/src/quick/items/qquickflickable.cpp index c1e8dd378c..dd7357822a 100644 --- a/src/quick/items/qquickflickable.cpp +++ b/src/quick/items/qquickflickable.cpp @@ -1031,23 +1031,20 @@ void QQuickFlickablePrivate::handleMouseMoveEvent(QMouseEvent *event) newY = minY + (newY - minY) / 2; if (newY < maxY && maxY - minY <= 0) newY = maxY + (newY - maxY) / 2; - if (boundsBehavior == QQuickFlickable::StopAtBounds && (newY > minY || newY < maxY)) { - rejectY = true; - if (newY < maxY) { - newY = maxY; - rejectY = false; - } - if (newY > minY) { - newY = minY; - rejectY = false; - } + if (boundsBehavior == QQuickFlickable::StopAtBounds && newY <= maxY) { + newY = maxY; + rejectY = vData.pressPos == maxY && dy < 0; + } + if (boundsBehavior == QQuickFlickable::StopAtBounds && newY >= minY) { + newY = minY; + rejectY = vData.pressPos == minY && dy > 0; } if (!rejectY && stealMouse && dy != 0.0) { clearTimeline(); vData.move.setValue(newY); vMoved = true; } - if (overThreshold) + if (!rejectY && overThreshold) stealY = true; } } @@ -1065,24 +1062,22 @@ void QQuickFlickablePrivate::handleMouseMoveEvent(QMouseEvent *event) newX = minX + (newX - minX) / 2; if (newX < maxX && maxX - minX <= 0) newX = maxX + (newX - maxX) / 2; - if (boundsBehavior == QQuickFlickable::StopAtBounds && (newX > minX || newX < maxX)) { - rejectX = true; - if (newX < maxX) { - newX = maxX; - rejectX = false; - } - if (newX > minX) { - newX = minX; - rejectX = false; - } + if (boundsBehavior == QQuickFlickable::StopAtBounds && newX <= maxX) { + newX = maxX; + rejectX = hData.pressPos == maxX && dx < 0; + } + if (boundsBehavior == QQuickFlickable::StopAtBounds && newX >= minX) { + newX = minX; + rejectX = hData.pressPos == minX && dx > 0; } + if (!rejectX && stealMouse && dx != 0.0) { clearTimeline(); hData.move.setValue(newX); hMoved = true; } - if (overThreshold) + if (!rejectX && overThreshold) stealX = true; } } diff --git a/src/quick/items/qquickgridview.cpp b/src/quick/items/qquickgridview.cpp index fd9ce9ffcd..c376f01c46 100644 --- a/src/quick/items/qquickgridview.cpp +++ b/src/quick/items/qquickgridview.cpp @@ -463,7 +463,7 @@ void QQuickGridViewPrivate::resetColumns() { Q_Q(QQuickGridView); qreal length = flow == QQuickGridView::FlowLeftToRight ? q->width() : q->height(); - columns = (int)qMax((length + colSize()/2) / colSize(), qreal(1.)); + columns = qMax(1, qFloor(length / colSize())); } FxViewItem *QQuickGridViewPrivate::newViewItem(int modelIndex, QQuickItem *item) diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp index b73fb8c5b6..be056d13fd 100644 --- a/src/quick/items/qquickitemview.cpp +++ b/src/quick/items/qquickitemview.cpp @@ -248,10 +248,8 @@ QQuickItemView::~QQuickItemView() QQuickItem *QQuickItemView::currentItem() const { Q_D(const QQuickItemView); - if (!d->currentItem) - return 0; const_cast<QQuickItemViewPrivate*>(d)->applyPendingChanges(); - return d->currentItem->item; + return d->currentItem ? d->currentItem->item : 0; } QVariant QQuickItemView::model() const diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp index 57f1b99456..63528ff702 100644 --- a/src/quick/items/qquicklistview.cpp +++ b/src/quick/items/qquicklistview.cpp @@ -172,7 +172,9 @@ public: , highlightMoveVelocity(400), highlightResizeVelocity(400), highlightResizeDuration(-1) , sectionCriteria(0), currentSectionItem(0), nextSectionItem(0) , overshootDist(0.0), correctFlick(false), inFlickCorrection(false) - {} + { + highlightMoveDuration = -1; //override default value set in base class + } ~QQuickListViewPrivate() { delete highlightPosAnimator; delete highlightSizeAnimator; diff --git a/src/quick/items/qquickloader.cpp b/src/quick/items/qquickloader.cpp index 61f9a27d3b..0434c2af41 100644 --- a/src/quick/items/qquickloader.cpp +++ b/src/quick/items/qquickloader.cpp @@ -335,41 +335,42 @@ bool QQuickLoader::active() const void QQuickLoader::setActive(bool newVal) { Q_D(QQuickLoader); - if (d->active != newVal) { - d->active = newVal; - if (newVal == true) { - if (d->loadingFromSource) { - loadFromSource(); - } else { - loadFromSourceComponent(); - } + if (d->active == newVal) + return; + + d->active = newVal; + if (newVal == true) { + if (d->loadingFromSource) { + loadFromSource(); } else { - // cancel any current incubation - if (d->incubator) { - d->incubator->clear(); - delete d->itemContext; - d->itemContext = 0; - } + loadFromSourceComponent(); + } + } else { + // cancel any current incubation + if (d->incubator) { + d->incubator->clear(); + delete d->itemContext; + d->itemContext = 0; + } - if (d->item) { - QQuickItemPrivate *p = QQuickItemPrivate::get(d->item); - p->removeItemChangeListener(d, watchedChanges); + if (d->item) { + QQuickItemPrivate *p = QQuickItemPrivate::get(d->item); + p->removeItemChangeListener(d, watchedChanges); - // We can't delete immediately because our item may have triggered - // the Loader to load a different item. - d->item->setParentItem(0); - d->item->setVisible(false); - d->item = 0; - } - if (d->object) { - d->object->deleteLater(); - d->object = 0; - emit itemChanged(); - } - emit statusChanged(); + // We can't delete immediately because our item may have triggered + // the Loader to load a different item. + d->item->setParentItem(0); + d->item->setVisible(false); + d->item = 0; + } + if (d->object) { + d->object->deleteLater(); + d->object = 0; + emit itemChanged(); } - emit activeChanged(); + emit statusChanged(); } + emit activeChanged(); } diff --git a/src/quick/items/qquickmousearea.cpp b/src/quick/items/qquickmousearea.cpp index e75a60181f..ad0a265035 100644 --- a/src/quick/items/qquickmousearea.cpp +++ b/src/quick/items/qquickmousearea.cpp @@ -797,9 +797,6 @@ void QQuickMouseArea::mouseMoveEvent(QMouseEvent *event) curLocalPos = event->windowPos(); } - qreal dx = qAbs(curLocalPos.x() - startLocalPos.x()); - qreal dy = qAbs(curLocalPos.y() - startLocalPos.y()); - if (keepMouseGrab() && d->stealMouse && !d->drag->active()) d->drag->setActive(true); @@ -807,38 +804,31 @@ void QQuickMouseArea::mouseMoveEvent(QMouseEvent *event) ? d->drag->target()->parentItem()->mapFromScene(d->targetStartPos) : d->targetStartPos; - QPointF dragPos = d->drag->target()->position(); - bool dragX = drag()->axis() & QQuickDrag::XAxis; bool dragY = drag()->axis() & QQuickDrag::YAxis; - if (dragX && d->drag->active()) { - qreal x = (curLocalPos.x() - startLocalPos.x()) + startPos.x(); - if (x < drag()->xmin()) - x = drag()->xmin(); - else if (x > drag()->xmax()) - x = drag()->xmax(); - dragPos.setX(x); + QPointF dragPos = d->drag->target()->position(); + if (dragX) { + dragPos.setX(qBound( + d->drag->xmin(), + startPos.x() + curLocalPos.x() - startLocalPos.x(), + d->drag->xmax())); } - if (dragY && d->drag->active()) { - qreal y = (curLocalPos.y() - startLocalPos.y()) + startPos.y(); - if (y < drag()->ymin()) - y = drag()->ymin(); - else if (y > drag()->ymax()) - y = drag()->ymax(); - dragPos.setY(y); + if (dragY) { + dragPos.setY(qBound( + d->drag->ymin(), + startPos.y() + curLocalPos.y() - startLocalPos.y(), + d->drag->ymax())); } - d->drag->target()->setPosition(dragPos); - - if (!keepMouseGrab()) { - bool xDragged = QQuickWindowPrivate::dragOverThreshold(dx, Qt::XAxis, event); - bool yDragged = QQuickWindowPrivate::dragOverThreshold(dy, Qt::YAxis, event); - if ((!dragY && !yDragged && dragX && xDragged) - || (!dragX && !xDragged && dragY && yDragged) - || (dragX && dragY && (xDragged || yDragged))) { - setKeepMouseGrab(true); - d->stealMouse = true; - } + if (d->drag->active()) + d->drag->target()->setPosition(dragPos); + + if (!keepMouseGrab() + && (QQuickWindowPrivate::dragOverThreshold(dragPos.x() - startPos.x(), Qt::XAxis, event) + || QQuickWindowPrivate::dragOverThreshold(dragPos.y() - startPos.y(), Qt::YAxis, event))) { + setKeepMouseGrab(true); + d->stealMouse = true; + d->startScene = event->windowPos(); } d->moved = true; diff --git a/src/quick/items/qquicktextcontrol.cpp b/src/quick/items/qquicktextcontrol.cpp index 02aeaa7e35..6cce3cc25a 100644 --- a/src/quick/items/qquicktextcontrol.cpp +++ b/src/quick/items/qquicktextcontrol.cpp @@ -359,7 +359,7 @@ void QQuickTextControlPrivate::setCursorPosition(int pos, QTextCursor::MoveMode if (mode != QTextCursor::KeepAnchor) { selectedWordOnDoubleClick = QTextCursor(); - selectedBlockOnTrippleClick = QTextCursor(); + selectedBlockOnTripleClick = QTextCursor(); } } @@ -527,18 +527,18 @@ void QQuickTextControlPrivate::extendBlockwiseSelection(int suggestedNewPosition Q_Q(QQuickTextControl); // if inside the initial selected line keep that - if (suggestedNewPosition >= selectedBlockOnTrippleClick.selectionStart() - && suggestedNewPosition <= selectedBlockOnTrippleClick.selectionEnd()) { - q->setTextCursor(selectedBlockOnTrippleClick); + if (suggestedNewPosition >= selectedBlockOnTripleClick.selectionStart() + && suggestedNewPosition <= selectedBlockOnTripleClick.selectionEnd()) { + q->setTextCursor(selectedBlockOnTripleClick); return; } - if (suggestedNewPosition < selectedBlockOnTrippleClick.position()) { - cursor.setPosition(selectedBlockOnTrippleClick.selectionEnd()); + if (suggestedNewPosition < selectedBlockOnTripleClick.position()) { + cursor.setPosition(selectedBlockOnTripleClick.selectionEnd()); cursor.setPosition(suggestedNewPosition, QTextCursor::KeepAnchor); cursor.movePosition(QTextCursor::StartOfBlock, QTextCursor::KeepAnchor); } else { - cursor.setPosition(selectedBlockOnTrippleClick.selectionStart()); + cursor.setPosition(selectedBlockOnTripleClick.selectionStart()); cursor.setPosition(suggestedNewPosition, QTextCursor::KeepAnchor); cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor); cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor); @@ -791,8 +791,8 @@ void QQuickTextControl::timerEvent(QTimerEvent *e) d->cursorOn = !d->cursorOn; d->repaintCursor(); - } else if (e->timerId() == d->trippleClickTimer.timerId()) { - d->trippleClickTimer.stop(); + } else if (e->timerId() == d->tripleClickTimer.timerId()) { + d->tripleClickTimer.stop(); } } @@ -1022,17 +1022,17 @@ void QQuickTextControlPrivate::mousePressEvent(QMouseEvent *e, const QPointF &po commitPreedit(); #endif - if (trippleClickTimer.isActive() - && ((pos - trippleClickPoint).toPoint().manhattanLength() < qApp->styleHints()->startDragDistance())) { + if (tripleClickTimer.isActive() + && ((pos - tripleClickPoint).toPoint().manhattanLength() < qApp->styleHints()->startDragDistance())) { cursor.movePosition(QTextCursor::StartOfBlock); cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor); cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor); - selectedBlockOnTrippleClick = cursor; + selectedBlockOnTripleClick = cursor; anchorOnMousePress = QString(); - trippleClickTimer.stop(); + tripleClickTimer.stop(); } else { int cursorPos = q->hitTest(pos, Qt::FuzzyHit); if (cursorPos == -1) { @@ -1046,7 +1046,7 @@ void QQuickTextControlPrivate::mousePressEvent(QMouseEvent *e, const QPointF &po selectedWordOnDoubleClick.select(QTextCursor::WordUnderCursor); } - if (selectedBlockOnTrippleClick.hasSelection()) + if (selectedBlockOnTripleClick.hasSelection()) extendBlockwiseSelection(cursorPos); else if (selectedWordOnDoubleClick.hasSelection()) extendWordwiseSelection(cursorPos, pos.x()); @@ -1079,7 +1079,7 @@ void QQuickTextControlPrivate::mouseMoveEvent(QMouseEvent *e, const QPointF &mou if (!(mousePressed || editable || selectedWordOnDoubleClick.hasSelection() - || selectedBlockOnTrippleClick.hasSelection())) + || selectedBlockOnTripleClick.hasSelection())) return; const QTextCursor oldSelection = cursor; @@ -1114,7 +1114,7 @@ void QQuickTextControlPrivate::mouseMoveEvent(QMouseEvent *e, const QPointF &mou selectedWordOnDoubleClick.select(QTextCursor::WordUnderCursor); } - if (selectedBlockOnTrippleClick.hasSelection()) + if (selectedBlockOnTripleClick.hasSelection()) extendBlockwiseSelection(newCursorPos); else if (selectedWordOnDoubleClick.hasSelection()) extendWordwiseSelection(newCursorPos, mouseX); @@ -1219,8 +1219,8 @@ void QQuickTextControlPrivate::mouseDoubleClickEvent(QMouseEvent *e, const QPoin cursorIsFocusIndicator = false; selectedWordOnDoubleClick = cursor; - trippleClickPoint = pos; - trippleClickTimer.start(qApp->styleHints()->mouseDoubleClickInterval(), q); + tripleClickPoint = pos; + tripleClickTimer.start(qApp->styleHints()->mouseDoubleClickInterval(), q); if (doEmit) { selectionChanged(); #ifndef QT_NO_CLIPBOARD diff --git a/src/quick/items/qquicktextcontrol_p_p.h b/src/quick/items/qquicktextcontrol_p_p.h index 059ccd36bf..a0727c7a71 100644 --- a/src/quick/items/qquicktextcontrol_p_p.h +++ b/src/quick/items/qquicktextcontrol_p_p.h @@ -126,7 +126,7 @@ public: void cancelPreedit(); #endif - QPointF trippleClickPoint; + QPointF tripleClickPoint; QPointF mousePressPos; QTextCharFormat lastCharFormat; @@ -134,12 +134,12 @@ public: QTextDocument *doc; QTextCursor cursor; QTextCursor selectedWordOnDoubleClick; - QTextCursor selectedBlockOnTrippleClick; + QTextCursor selectedBlockOnTripleClick; QString anchorOnMousePress; QString linkToCopy; QBasicTimer cursorBlinkTimer; - QBasicTimer trippleClickTimer; + QBasicTimer tripleClickTimer; #ifndef QT_NO_IM int preeditCursor; diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp index d543b6bd41..d087a1b8f3 100644 --- a/src/quick/items/qquicktextedit.cpp +++ b/src/quick/items/qquicktextedit.cpp @@ -1089,7 +1089,7 @@ void QQuickTextEdit::setFocusOnPress(bool on) \qmlproperty bool QtQuick2::TextEdit::persistentSelection Whether the TextEdit should keep the selection visible when it loses active focus to another - item in the scene. By default this is set to true; + item in the scene. By default this is set to false. */ bool QQuickTextEdit::persistentSelection() const { diff --git a/src/quick/scenegraph/coreapi/qsggeometry.h b/src/quick/scenegraph/coreapi/qsggeometry.h index c9b44e86b0..cfed30cb36 100644 --- a/src/quick/scenegraph/coreapi/qsggeometry.h +++ b/src/quick/scenegraph/coreapi/qsggeometry.h @@ -44,7 +44,7 @@ #include <QtQuick/qtquickglobal.h> #include <QtGui/qopengl.h> -#include <QRectF> +#include <QtCore/QRectF> QT_BEGIN_HEADER diff --git a/src/quick/scenegraph/coreapi/qsgmaterial.h b/src/quick/scenegraph/coreapi/qsgmaterial.h index 062311e2e3..56109d32a0 100644 --- a/src/quick/scenegraph/coreapi/qsgmaterial.h +++ b/src/quick/scenegraph/coreapi/qsgmaterial.h @@ -43,7 +43,7 @@ #define MATERIAL_H #include <QtQuick/qtquickglobal.h> -#include <qopenglshaderprogram.h> +#include <QtGui/qopenglshaderprogram.h> QT_BEGIN_HEADER diff --git a/src/quick/scenegraph/qsgdefaultglyphnode_p.cpp b/src/quick/scenegraph/qsgdefaultglyphnode_p.cpp index 6b8f9927c4..210e9f23f5 100644 --- a/src/quick/scenegraph/qsgdefaultglyphnode_p.cpp +++ b/src/quick/scenegraph/qsgdefaultglyphnode_p.cpp @@ -96,7 +96,7 @@ const char *QSGTextMaskMaterialData::fragmentShader() const { "uniform sampler2D texture; \n" "uniform lowp vec4 color; \n" "void main() { \n" - " gl_FragColor = vec4(texture2D(texture, sampleCoord).rgb, 1.0); \n" + " gl_FragColor = vec4(texture2D(texture, sampleCoord).rgb * color.a, 1.0); \n" "}"; } diff --git a/src/quick/scenegraph/util/qsgflatcolormaterial.h b/src/quick/scenegraph/util/qsgflatcolormaterial.h index 97b8c14a9b..b24e5e7205 100644 --- a/src/quick/scenegraph/util/qsgflatcolormaterial.h +++ b/src/quick/scenegraph/util/qsgflatcolormaterial.h @@ -43,7 +43,7 @@ #define FLATCOLORMATERIAL_H #include <QtQuick/qsgmaterial.h> -#include <qcolor.h> +#include <QtGui/qcolor.h> QT_BEGIN_HEADER diff --git a/src/quick/scenegraph/util/qsgsimplematerial.h b/src/quick/scenegraph/util/qsgsimplematerial.h index 25ac93b2c5..877ea1c4b5 100644 --- a/src/quick/scenegraph/util/qsgsimplematerial.h +++ b/src/quick/scenegraph/util/qsgsimplematerial.h @@ -142,8 +142,8 @@ class QSGSimpleMaterial : public QSGMaterial { public: #ifndef qdoc - QSGSimpleMaterial(const State &state, PtrShaderCreateFunc func) - : m_state(state) + QSGSimpleMaterial(const State &aState, PtrShaderCreateFunc func) + : m_state(aState) , m_func(func) { } diff --git a/src/quick/scenegraph/util/qsgtexture.h b/src/quick/scenegraph/util/qsgtexture.h index 9d91d4e81c..4dcea63175 100644 --- a/src/quick/scenegraph/util/qsgtexture.h +++ b/src/quick/scenegraph/util/qsgtexture.h @@ -43,8 +43,8 @@ #define QSGTEXTURE_H #include <QtQuick/qtquickglobal.h> -#include <QObject> -#include <QImage> +#include <QtCore/QObject> +#include <QtGui/QImage> QT_BEGIN_HEADER diff --git a/src/quick/scenegraph/util/qsgtexturematerial.h b/src/quick/scenegraph/util/qsgtexturematerial.h index 7fc06c7927..822084b463 100644 --- a/src/quick/scenegraph/util/qsgtexturematerial.h +++ b/src/quick/scenegraph/util/qsgtexturematerial.h @@ -61,10 +61,10 @@ public: void setTexture(QSGTexture *texture); QSGTexture *texture() const { return m_texture; } - void setMipmapFiltering(QSGTexture::Filtering filtering) { m_mipmap_filtering = filtering; } + void setMipmapFiltering(QSGTexture::Filtering filteringType) { m_mipmap_filtering = filteringType; } QSGTexture::Filtering mipmapFiltering() const { return (QSGTexture::Filtering) m_mipmap_filtering; } - void setFiltering(QSGTexture::Filtering filtering) { m_filtering = filtering; } + void setFiltering(QSGTexture::Filtering filteringType) { m_filtering = filteringType; } QSGTexture::Filtering filtering() const { return (QSGTexture::Filtering) m_filtering; } void setHorizontalWrapMode(QSGTexture::WrapMode mode) { m_horizontal_wrap = mode; } diff --git a/src/quick/util/qquicksmoothedanimation.cpp b/src/quick/util/qquicksmoothedanimation.cpp index 021ff75f03..9dd9aa2e6d 100644 --- a/src/quick/util/qquicksmoothedanimation.cpp +++ b/src/quick/util/qquicksmoothedanimation.cpp @@ -153,10 +153,10 @@ bool QSmoothedAnimation::recalc() s = (invert? -1.0: 1.0) * s; - if (userDuration > 0 && velocity > 0) { + if (userDuration >= 0 && velocity > 0) { tf = s / velocity; if (tf > (userDuration / 1000.)) tf = (userDuration / 1000.); - } else if (userDuration > 0) { + } else if (userDuration >= 0) { tf = userDuration / 1000.; } else if (velocity > 0) { tf = s / velocity; diff --git a/sync.profile b/sync.profile index aa5cc8ff2a..180ef01430 100644 --- a/sync.profile +++ b/sync.profile @@ -17,7 +17,7 @@ # - any git symbolic ref resolvable from the module's repository (e.g. "refs/heads/master" to track master branch) # %dependencies = ( - "qtbase" => "refs/heads/release", - "qtxmlpatterns" => "refs/heads/release", - "qtjsbackend" => "refs/heads/release", + "qtbase" => "refs/heads/old/5.0", + "qtxmlpatterns" => "refs/heads/old/5.0", + "qtjsbackend" => "refs/heads/old/5.0", ); diff --git a/tests/auto/cmake/CMakeLists.txt b/tests/auto/cmake/CMakeLists.txt index a88564e0b7..f62d2f3bdb 100644 --- a/tests/auto/cmake/CMakeLists.txt +++ b/tests/auto/cmake/CMakeLists.txt @@ -9,8 +9,6 @@ find_package(Qt5Core REQUIRED) include("${_Qt5CTestMacros}") -set(Qt5_MODULE_TEST_DEPENDS Network Gui) - test_module_includes( Qml QQmlEngine Quick QQuickWindow diff --git a/tests/auto/cmake/cmake.pro b/tests/auto/cmake/cmake.pro index bf2dbcb772..0a5e7e75fc 100644 --- a/tests/auto/cmake/cmake.pro +++ b/tests/auto/cmake/cmake.pro @@ -2,4 +2,6 @@ # Cause make to do nothing. TEMPLATE = subdirs +CMAKE_QT_MODULES_UNDER_TEST = quick qml + CONFIG += ctest_testcase diff --git a/tests/auto/headersclean/headersclean.pro b/tests/auto/headersclean/headersclean.pro index 6d2f74a6bc..4457fe1c38 100644 --- a/tests/auto/headersclean/headersclean.pro +++ b/tests/auto/headersclean/headersclean.pro @@ -1,4 +1,2 @@ QT = qml quick qmltest qmldevtools load(qt_headersclean) -# shadowing problems in scenegraph, allow it for now -*-g++*: QMAKE_CXXFLAGS -= -Wshadow diff --git a/tests/auto/qml/debugger/qv8profilerservice/qv8profilerservice.pro b/tests/auto/qml/debugger/qv8profilerservice/qv8profilerservice.pro index 8780f64946..e4d588dc9a 100644 --- a/tests/auto/qml/debugger/qv8profilerservice/qv8profilerservice.pro +++ b/tests/auto/qml/debugger/qv8profilerservice/qv8profilerservice.pro @@ -13,3 +13,5 @@ TESTDATA = data/* QT += qml testlib gui-private DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 + +mac:CONFIG+=insignificant_test #QTBUG-29975 diff --git a/tests/auto/qml/debugger/shared/debugutil.cpp b/tests/auto/qml/debugger/shared/debugutil.cpp index 0069131bcf..7df753df03 100644 --- a/tests/auto/qml/debugger/shared/debugutil.cpp +++ b/tests/auto/qml/debugger/shared/debugutil.cpp @@ -111,7 +111,7 @@ QString QQmlDebugProcess::state() if (m_process.exitStatus() == QProcess::CrashExit) stateStr += " (crashed!)"; else - stateStr += ", return value" + m_process.exitCode(); + stateStr += ", return value " + QString::number(m_process.exitCode()); break; } case QProcess::Starting: stateStr = "starting"; break; diff --git a/tests/auto/qml/debugger/shared/qqmlenginedebugclient.cpp b/tests/auto/qml/debugger/shared/qqmlenginedebugclient.cpp index d066c84efe..610d80d559 100644 --- a/tests/auto/qml/debugger/shared/qqmlenginedebugclient.cpp +++ b/tests/auto/qml/debugger/shared/qqmlenginedebugclient.cpp @@ -91,7 +91,7 @@ QQmlEngineDebugClient::QQmlEngineDebugClient( quint32 QQmlEngineDebugClient::addWatch( const QmlDebugPropertyReference &property, bool *success) { - quint32 id; + quint32 id = -1; *success = false; if (state() == QQmlDebugClient::Enabled) { id = getId(); @@ -117,7 +117,7 @@ quint32 QQmlEngineDebugClient::addWatch( const QmlDebugObjectReference &object, const QString &expr, bool *success) { - quint32 id; + quint32 id = -1; *success = false; if (state() == QQmlDebugClient::Enabled) { id = getId(); @@ -133,7 +133,7 @@ quint32 QQmlEngineDebugClient::addWatch( quint32 QQmlEngineDebugClient::addWatch( const QmlDebugObjectReference &object, bool *success) { - quint32 id; + quint32 id = -1; *success = false; if (state() == QQmlDebugClient::Enabled) { id = getId(); @@ -169,7 +169,7 @@ void QQmlEngineDebugClient::removeWatch(quint32 id, bool *success) quint32 QQmlEngineDebugClient::queryAvailableEngines(bool *success) { m_engines.clear(); - quint32 id; + quint32 id = -1; *success = false; if (state() == QQmlDebugClient::Enabled) { id = getId(); @@ -186,7 +186,7 @@ quint32 QQmlEngineDebugClient::queryRootContexts( const QmlDebugEngineReference &engine, bool *success) { m_rootContext = QmlDebugContextReference(); - quint32 id; + quint32 id = -1; *success = false; if (state() == QQmlDebugClient::Enabled && engine.debugId != -1) { id = getId(); @@ -203,7 +203,7 @@ quint32 QQmlEngineDebugClient::queryObject( const QmlDebugObjectReference &object, bool *success) { m_object = QmlDebugObjectReference(); - quint32 id; + quint32 id = -1; *success = false; if (state() == QQmlDebugClient::Enabled && object.debugId != -1) { id = getId(); @@ -221,7 +221,7 @@ quint32 QQmlEngineDebugClient::queryObjectsForLocation( const QString &file, int lineNumber, int columnNumber, bool *success) { m_objects.clear(); - quint32 id; + quint32 id = -1; *success = false; if (state() == QQmlDebugClient::Enabled) { id = getId(); @@ -239,7 +239,7 @@ quint32 QQmlEngineDebugClient::queryObjectRecursive( const QmlDebugObjectReference &object, bool *success) { m_object = QmlDebugObjectReference(); - quint32 id; + quint32 id = -1; *success = false; if (state() == QQmlDebugClient::Enabled && object.debugId != -1) { id = getId(); @@ -257,7 +257,7 @@ quint32 QQmlEngineDebugClient::queryObjectsForLocationRecursive(const QString &f int lineNumber, int columnNumber, bool *success) { m_objects.clear(); - quint32 id; + quint32 id = -1; *success = false; if (state() == QQmlDebugClient::Enabled) { id = getId(); @@ -275,7 +275,7 @@ quint32 QQmlEngineDebugClient::queryExpressionResult( int objectDebugId, const QString &expr, bool *success) { m_exprResult = QVariant(); - quint32 id; + quint32 id = -1; *success = false; if (state() == QQmlDebugClient::Enabled) { id = getId(); @@ -293,7 +293,7 @@ quint32 QQmlEngineDebugClient::queryExpressionResultBC( int objectDebugId, const QString &expr, bool *success) { m_exprResult = QVariant(); - quint32 id; + quint32 id = -1; *success = false; if (state() == QQmlDebugClient::Enabled) { id = getId(); @@ -314,7 +314,7 @@ quint32 QQmlEngineDebugClient::setBindingForObject( QString source, int line, bool *success) { - quint32 id; + quint32 id = -1; *success = false; if (state() == QQmlDebugClient::Enabled && objectDebugId != -1) { id = getId(); @@ -333,7 +333,7 @@ quint32 QQmlEngineDebugClient::resetBindingForObject( const QString &propertyName, bool *success) { - quint32 id; + quint32 id = -1; *success = false; if (state() == QQmlDebugClient::Enabled && objectDebugId != -1) { id = getId(); @@ -350,7 +350,7 @@ quint32 QQmlEngineDebugClient::setMethodBody( int objectDebugId, const QString &methodName, const QString &methodBody, bool *success) { - quint32 id; + quint32 id = -1; *success = false; if (state() == QQmlDebugClient::Enabled && objectDebugId != -1) { id = getId(); diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp index fee66695fc..cc49f234c1 100644 --- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp +++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp @@ -1491,7 +1491,7 @@ void tst_qqmlecmascript::componentCreation() if (creationError.isEmpty()) { QVERIFY(created); - QObject *expectedParent; + QObject *expectedParent = reinterpret_cast<QObject *>(quintptr(-1)); if (createdParent == QLatin1String("obj")) { expectedParent = object; } else if ((createdParent == QLatin1String("null")) || createdParent.isEmpty()) { diff --git a/tests/auto/qml/qqmlxmlhttprequest/tst_qqmlxmlhttprequest.cpp b/tests/auto/qml/qqmlxmlhttprequest/tst_qqmlxmlhttprequest.cpp index 29c7909267..3ae27fe9c3 100644 --- a/tests/auto/qml/qqmlxmlhttprequest/tst_qqmlxmlhttprequest.cpp +++ b/tests/auto/qml/qqmlxmlhttprequest/tst_qqmlxmlhttprequest.cpp @@ -1173,6 +1173,7 @@ void tst_qqmlxmlhttprequest::stateChangeCallingContext() QQmlComponent component(&engine, testFileUrl("stateChangeCallingContext.qml")); QObject *object = component.create(); QVERIFY(object != 0); + server.sendDelayedItem(); QTRY_VERIFY(object->property("success").toBool() == true); delete object; } diff --git a/tests/auto/qmltest/events/tst_drag.qml b/tests/auto/qmltest/events/tst_drag.qml index 7a17007495..70e0ea2096 100644 --- a/tests/auto/qmltest/events/tst_drag.qml +++ b/tests/auto/qmltest/events/tst_drag.qml @@ -47,6 +47,10 @@ Rectangle{ width:200 height:200 + TestUtil { + id: util + } + Rectangle { id:container width:20 @@ -67,8 +71,8 @@ Rectangle{ when:windowShown function test_mouseDrag() { mouseDrag(container, 10, 10, 20, 30); - compare(container.x, 20); - compare(container.y, 30); + compare(container.x, 20 - util.dragThreshold - 1); + compare(container.y, 30 - util.dragThreshold - 1); } } -}
\ No newline at end of file +} diff --git a/tests/auto/quick/qquickborderimage/tst_qquickborderimage.cpp b/tests/auto/quick/qquickborderimage/tst_qquickborderimage.cpp index 9ba0cf189d..b795d23da4 100644 --- a/tests/auto/quick/qquickborderimage/tst_qquickborderimage.cpp +++ b/tests/auto/quick/qquickborderimage/tst_qquickborderimage.cpp @@ -451,6 +451,8 @@ void tst_qquickborderimage::statusChanges() QSignalSpy spy(obj, SIGNAL(statusChanged(QQuickImageBase::Status))); QVERIFY(obj != 0); obj->setSource(source); + if (remote) + server->sendDelayedItem(); QTRY_VERIFY(obj->status() == finalStatus); QCOMPARE(spy.count(), emissions); diff --git a/tests/auto/quick/qquickflickable/data/flickable03.qml b/tests/auto/quick/qquickflickable/data/flickable03.qml index a3e9d6fd59..1549034576 100644 --- a/tests/auto/quick/qquickflickable/data/flickable03.qml +++ b/tests/auto/quick/qquickflickable/data/flickable03.qml @@ -1,9 +1,23 @@ import QtQuick 2.0 Flickable { + property bool movingInContentX: true + property bool movingInContentY: true + property bool draggingInContentX: true + property bool draggingInContentY: true + width: 100; height: 400 contentWidth: column.width; contentHeight: column.height + onContentXChanged: { + movingInContentX = movingInContentX && movingHorizontally + draggingInContentX = draggingInContentX && draggingHorizontally + } + onContentYChanged: { + movingInContentY = movingInContentY && movingVertically + draggingInContentY = draggingInContentY && draggingVertically + } + Column { id: column Repeater { diff --git a/tests/auto/quick/qquickflickable/data/nestedStopAtBounds.qml b/tests/auto/quick/qquickflickable/data/nestedStopAtBounds.qml new file mode 100644 index 0000000000..59318e5b95 --- /dev/null +++ b/tests/auto/quick/qquickflickable/data/nestedStopAtBounds.qml @@ -0,0 +1,37 @@ +import QtQuick 2.0 + +Flickable { + id: outer + objectName: "outerFlickable" + width: 400 + height: 400 + contentX: 50 + contentY: 50 + contentWidth: 500 + contentHeight: 500 + flickableDirection: inner.flickableDirection + + Rectangle { + x: 100 + y: 100 + width: 300 + height: 300 + + color: "yellow" + Flickable { + id: inner + objectName: "innerFlickable" + anchors.fill: parent + contentX: 100 + contentY: 100 + contentWidth: 400 + contentHeight: 400 + boundsBehavior: Flickable.StopAtBounds + Rectangle { + anchors.fill: parent + anchors.margins: 100 + color: "blue" + } + } + } +} diff --git a/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp b/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp index 784988b913..c4f871fc11 100644 --- a/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp +++ b/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp @@ -91,6 +91,8 @@ private slots: void cancelOnMouseGrab(); void clickAndDragWhenTransformed(); void flickTwiceUsingTouches(); + void nestedStopAtBounds(); + void nestedStopAtBounds_data(); private: void flickWithTouch(QWindow *window, QTouchDevice *touchDevice); @@ -645,6 +647,9 @@ void tst_qquickflickable::movingAndFlicking() QVERIFY(flickable->isFlicking()); QCOMPARE(flickable->isFlickingHorizontally(), horizontalEnabled); QCOMPARE(flickable->isFlickingVertically(), verticalEnabled); + // contentX/contentY are either unchanged, or moving is true when the value changed. + QCOMPARE(flickable->property("movingInContentX").value<bool>(), true); + QCOMPARE(flickable->property("movingInContentY").value<bool>(), true); QCOMPARE(moveSpy.count(), 1); QCOMPARE(vMoveSpy.count(), verticalEnabled ? 1 : 0); @@ -808,6 +813,11 @@ void tst_qquickflickable::movingAndDragging() QVERIFY(flickable->isDragging()); QCOMPARE(flickable->isDraggingHorizontally(), horizontalEnabled); QCOMPARE(flickable->isDraggingVertically(), verticalEnabled); + // contentX/contentY are either unchanged, or moving and dragging are true when the value changes. + QCOMPARE(flickable->property("movingInContentX").value<bool>(), true); + QCOMPARE(flickable->property("movingInContentY").value<bool>(), true); + QCOMPARE(flickable->property("draggingInContentX").value<bool>(), true); + QCOMPARE(flickable->property("draggingInContentY").value<bool>(), true); QCOMPARE(moveSpy.count(), 1); QCOMPARE(vMoveSpy.count(), verticalEnabled ? 1 : 0); @@ -1311,6 +1321,75 @@ void tst_qquickflickable::flickWithTouch(QWindow *window, QTouchDevice *touchDev QTest::qWait(1); } +void tst_qquickflickable::nestedStopAtBounds_data() +{ + QTest::addColumn<bool>("transpose"); + QTest::addColumn<bool>("invert"); + + QTest::newRow("left") << false << false; + QTest::newRow("right") << false << true; + QTest::newRow("top") << true << false; + QTest::newRow("bottom") << true << true; +} + +void tst_qquickflickable::nestedStopAtBounds() +{ + QFETCH(bool, transpose); + QFETCH(bool, invert); + + QQuickView view; + view.setSource(testFileUrl("nestedStopAtBounds.qml")); + view.show(); + view.requestActivate(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); + QVERIFY(view.rootObject()); + + QQuickFlickable *outer = qobject_cast<QQuickFlickable*>(view.rootObject()); + QVERIFY(outer); + + QQuickFlickable *inner = outer->findChild<QQuickFlickable*>("innerFlickable"); + QVERIFY(inner); + inner->setFlickableDirection(transpose ? QQuickFlickable::VerticalFlick : QQuickFlickable::HorizontalFlick); + inner->setContentX(invert ? 0 : 100); + inner->setContentY(invert ? 0 : 100); + + const int threshold = qApp->styleHints()->startDragDistance(); + + QPoint position(200, 200); + int &axis = transpose ? position.ry() : position.rx(); + + // drag toward the aligned boundary. Outer flickable dragged. + QTest::mousePress(&view, Qt::LeftButton, 0, position); + QTest::qWait(10); + axis += invert ? threshold * 2 : -threshold * 2; + QTest::mouseMove(&view, position); + axis += invert ? threshold : -threshold; + QTest::mouseMove(&view, position); + QCOMPARE(outer->isDragging(), true); + QCOMPARE(inner->isDragging(), false); + QTest::mouseRelease(&view, Qt::LeftButton, 0, position); + + QVERIFY(!outer->isDragging()); + QTRY_VERIFY(!outer->isMoving()); + + axis = 200; + outer->setContentX(50); + outer->setContentY(50); + + // drag away from the aligned boundary. Inner flickable dragged. + QTest::mousePress(&view, Qt::LeftButton, 0, position); + QTest::qWait(10); + axis += invert ? -threshold * 2 : threshold * 2; + QTest::mouseMove(&view, position); + axis += invert ? -threshold : threshold; + QTest::mouseMove(&view, position); + QCOMPARE(outer->isDragging(), false); + QCOMPARE(inner->isDragging(), true); + QTest::mouseRelease(&view, Qt::LeftButton, 0, position); + + QTRY_VERIFY(!outer->isMoving()); +} + QTEST_MAIN(tst_qquickflickable) #include "tst_qquickflickable.moc" diff --git a/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp b/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp index 802cc0a4c9..3c30f9e887 100644 --- a/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp +++ b/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp @@ -4308,22 +4308,22 @@ void tst_QQuickGridView::snapOneRow_data() QTest::addColumn<qreal>("startExtent"); QTest::newRow("vertical, left to right") << QQuickGridView::FlowLeftToRight << Qt::LeftToRight << int(QQuickItemView::NoHighlightRange) - << QPoint(20, 200) << QPoint(20, 20) << 100.0 << 240.0 << 0.0; + << QPoint(20, 160) << QPoint(20, 20) << 100.0 << 240.0 << 0.0; QTest::newRow("horizontal, left to right") << QQuickGridView::FlowTopToBottom << Qt::LeftToRight << int(QQuickItemView::NoHighlightRange) - << QPoint(200, 20) << QPoint(20, 20) << 100.0 << 240.0 << 0.0; + << QPoint(160, 20) << QPoint(20, 20) << 100.0 << 240.0 << 0.0; QTest::newRow("horizontal, right to left") << QQuickGridView::FlowTopToBottom << Qt::RightToLeft << int(QQuickItemView::NoHighlightRange) - << QPoint(20, 20) << QPoint(200, 20) << -340.0 << -240.0 - 240.0 << -240.0; + << QPoint(20, 20) << QPoint(160, 20) << -340.0 << -240.0 - 240.0 << -240.0; QTest::newRow("vertical, left to right, enforce range") << QQuickGridView::FlowLeftToRight << Qt::LeftToRight << int(QQuickItemView::StrictlyEnforceRange) - << QPoint(20, 200) << QPoint(20, 20) << 100.0 << 340.0 << -20.0; + << QPoint(20, 160) << QPoint(20, 20) << 100.0 << 340.0 << -20.0; QTest::newRow("horizontal, left to right, enforce range") << QQuickGridView::FlowTopToBottom << Qt::LeftToRight << int(QQuickItemView::StrictlyEnforceRange) - << QPoint(200, 20) << QPoint(20, 20) << 100.0 << 340.0 << -20.0; + << QPoint(160, 20) << QPoint(20, 20) << 100.0 << 340.0 << -20.0; QTest::newRow("horizontal, right to left, enforce range") << QQuickGridView::FlowTopToBottom << Qt::RightToLeft << int(QQuickItemView::StrictlyEnforceRange) - << QPoint(20, 20) << QPoint(200, 20) << -340.0 << -240.0 - 240.0 - 100.0 << -220.0; + << QPoint(20, 20) << QPoint(160, 20) << -340.0 << -240.0 - 240.0 - 100.0 << -220.0; } void tst_QQuickGridView::snapOneRow() diff --git a/tests/auto/quick/qquickimage/tst_qquickimage.cpp b/tests/auto/quick/qquickimage/tst_qquickimage.cpp index 51ac5c640a..531bf1202e 100644 --- a/tests/auto/quick/qquickimage/tst_qquickimage.cpp +++ b/tests/auto/quick/qquickimage/tst_qquickimage.cpp @@ -701,7 +701,7 @@ void tst_qquickimage::imageCrash_QTBUG_22125() } // shouldn't crash when deleting cancelled QQmlPixmapReplys. - QTest::qWait(520); // Delay mode delays for 500 ms. + server.sendDelayedItem(); QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete); QCoreApplication::processEvents(); } diff --git a/tests/auto/quick/qquicklistview/data/emptymodel.qml b/tests/auto/quick/qquicklistview/data/emptymodel.qml new file mode 100644 index 0000000000..16bcd3f9ae --- /dev/null +++ b/tests/auto/quick/qquicklistview/data/emptymodel.qml @@ -0,0 +1,23 @@ +import QtQuick 2.0 +Rectangle { + ListModel { + id: model + ListElement { name: "hello"} + } + ListView { + id: list + model: model + delegate: Item { + } + } + function remove() { + model.remove(0) + isCurrentItemNull = list.currentItem === null //check no seg fault + } + + function add() { + model.append({name: "hello"}) + isCurrentItemNull = list.currentItem === null + } + property bool isCurrentItemNull +} diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp index 9fad01ef40..3b4a41e203 100644 --- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp +++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp @@ -206,6 +206,8 @@ private slots: void destroyItemOnCreation(); void parentBinding(); + void defaultHighlightMoveDuration(); + void accessEmptyCurrentItem_QTBUG_30227(); private: template <class T> void items(const QUrl &source, bool forceLayout); @@ -6801,6 +6803,33 @@ void tst_QQuickListView::parentBinding() delete window; } +void tst_QQuickListView::defaultHighlightMoveDuration() +{ + QQmlEngine engine; + QQmlComponent component(&engine); + component.setData("import QtQuick 2.0; ListView {}", QUrl::fromLocalFile("")); + + QObject *obj = component.create(); + QVERIFY(obj); + + QCOMPARE(obj->property("highlightMoveDuration").toInt(), -1); +} + +void tst_QQuickListView::accessEmptyCurrentItem_QTBUG_30227() +{ + QQuickView *window = createView(); + window->setSource(testFileUrl("emptymodel.qml")); + + QQuickListView *listview = window->rootObject()->findChild<QQuickListView*>(); + QTRY_VERIFY(listview != 0); + + QMetaObject::invokeMethod(window->rootObject(), "remove"); + QVERIFY(window->rootObject()->property("isCurrentItemNull").toBool()); + + QMetaObject::invokeMethod(window->rootObject(), "add"); + QVERIFY(!window->rootObject()->property("isCurrentItemNull").toBool()); +} + QTEST_MAIN(tst_QQuickListView) #include "tst_qquicklistview.moc" diff --git a/tests/auto/quick/qquickloader/data/BigComponent.qml b/tests/auto/quick/qquickloader/data/BigComponent.qml index df92532c43..490079ed34 100644 --- a/tests/auto/quick/qquickloader/data/BigComponent.qml +++ b/tests/auto/quick/qquickloader/data/BigComponent.qml @@ -1,5015 +1,6 @@ import QtQuick 2.0 +import LoaderTest 1.0 Item { - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} - Item {} + SlowComponent {} } diff --git a/tests/auto/quick/qquickloader/tst_qquickloader.cpp b/tests/auto/quick/qquickloader/tst_qquickloader.cpp index a28db9eaf8..d01e8aae52 100644 --- a/tests/auto/quick/qquickloader/tst_qquickloader.cpp +++ b/tests/auto/quick/qquickloader/tst_qquickloader.cpp @@ -52,6 +52,15 @@ #define SERVER_PORT 14458 #define SERVER_ADDR "http://localhost:14458" +class SlowComponent : public QQmlComponent +{ + Q_OBJECT +public: + SlowComponent() { + QTest::qSleep(500); + } +}; + class PeriodicIncubationController : public QObject, public QQmlIncubationController { @@ -81,6 +90,8 @@ public: tst_QQuickLoader(); private slots: + void cleanup(); + void sourceOrComponent(); void sourceOrComponent_data(); void clear(); @@ -120,9 +131,15 @@ private: QQmlEngine engine; }; +void tst_QQuickLoader::cleanup() +{ + // clear components. otherwise we even bypass the test server by using the cache. + engine.clearComponentCache(); +} tst_QQuickLoader::tst_QQuickLoader() { + qmlRegisterType<SlowComponent>("LoaderTest", 1, 0, "SlowComponent"); } void tst_QQuickLoader::sourceOrComponent() @@ -462,12 +479,14 @@ void tst_QQuickLoader::networkComponent() " Component { id: comp; NW.Rect120x60 {} }\n" " Loader { sourceComponent: comp } }") , dataDirectory()); + QCOMPARE(component.status(), QQmlComponent::Loading); + server.sendDelayedItem(); QTRY_COMPARE(component.status(), QQmlComponent::Ready); QQuickItem *item = qobject_cast<QQuickItem*>(component.create()); QVERIFY(item); - QQuickLoader *loader = qobject_cast<QQuickLoader*>(item->QQuickItem::children().at(1)); + QQuickLoader *loader = qobject_cast<QQuickLoader*>(item->children().at(1)); QVERIFY(loader); QTRY_VERIFY(loader->status() == QQuickLoader::Ready); @@ -1024,6 +1043,11 @@ void tst_QQuickLoader::simultaneousSyncAsync() void tst_QQuickLoader::loadedSignal() { + PeriodicIncubationController *controller = new PeriodicIncubationController; + QQmlIncubationController *previous = engine.incubationController(); + engine.setIncubationController(controller); + delete previous; + { // ensure that triggering loading (by setting active = true) // and then immediately setting active to false, causes the @@ -1042,8 +1066,9 @@ void tst_QQuickLoader::loadedSignal() QVERIFY(obj->property("success").toBool()); QMetaObject::invokeMethod(obj, "triggerMultipleLoad"); + controller->start(); QTest::qWait(100); - QCOMPARE(obj->property("loadCount").toInt(), 1); // only one loaded signal should be emitted. + QTRY_COMPARE(obj->property("loadCount").toInt(), 1); // only one loaded signal should be emitted. QVERIFY(obj->property("success").toBool()); delete obj; diff --git a/tests/auto/quick/qquickmousearea/data/nestedStopAtBounds.qml b/tests/auto/quick/qquickmousearea/data/nestedStopAtBounds.qml new file mode 100644 index 0000000000..1fd39bb321 --- /dev/null +++ b/tests/auto/quick/qquickmousearea/data/nestedStopAtBounds.qml @@ -0,0 +1,44 @@ +import QtQuick 2.0 + +Rectangle { + width: 400 + height: 400 + + MouseArea { + id: outer + objectName: "outer" + x: 50 + y: 50 + width: 300 + height: 300 + + drag.target: outer + drag.filterChildren: true + + Rectangle { + anchors.fill: parent + color: "yellow" + } + + MouseArea { + id: inner + objectName: "inner" + + x: 0 + y: 0 + width: 200 + height: 200 + + drag.target: inner + drag.minimumX: 0 + drag.maximumX: 100 + drag.minimumY: 0 + drag.maximumY: 100 + + Rectangle { + anchors.fill: parent + color: "blue" + } + } + } +} diff --git a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp index 37ce0fd394..055facc9e1 100644 --- a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp +++ b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp @@ -89,6 +89,8 @@ private slots: void cursorShape(); #endif void moveAndReleaseWithoutPress(); + void nestedStopAtBounds(); + void nestedStopAtBounds_data(); private: void acceptedButton_data(); @@ -274,20 +276,22 @@ void tst_QQuickMouseArea::dragging() // First move event triggers drag, second is acted upon. // This is due to possibility of higher stacked area taking precedence. - + // The item is moved relative to the position of the mouse when the drag + // was triggered, this prevents a sudden change in position when the drag + // threshold is exceeded. QTest::mouseMove(window, QPoint(111,111), 50); QTest::mouseMove(window, QPoint(116,116), 50); QTest::mouseMove(window, QPoint(122,122), 50); QTRY_VERIFY(drag->active()); - QTRY_COMPARE(blackRect->x(), 72.0); - QCOMPARE(blackRect->y(), 72.0); + QTRY_COMPARE(blackRect->x(), 61.0); + QCOMPARE(blackRect->y(), 61.0); QTest::mouseRelease(window, button, 0, QPoint(122,122)); QTRY_VERIFY(!drag->active()); - QCOMPARE(blackRect->x(), 72.0); - QCOMPARE(blackRect->y(), 72.0); + QCOMPARE(blackRect->x(), 61.0); + QCOMPARE(blackRect->y(), 61.0); delete window; } @@ -382,14 +386,14 @@ void tst_QQuickMouseArea::setDragOnPressed() QTest::qWait(50); QVERIFY(drag->active()); - QCOMPARE(target->x(), 72.0); + QCOMPARE(target->x(), 61.0); QCOMPARE(target->y(), 50.0); QTest::mouseRelease(window, Qt::LeftButton, 0, QPoint(122,122)); QTest::qWait(50); QVERIFY(!drag->active()); - QCOMPARE(target->x(), 72.0); + QCOMPARE(target->x(), 61.0); QCOMPARE(target->y(), 50.0); delete window; @@ -1050,8 +1054,8 @@ void tst_QQuickMouseArea::disableAfterPress() QTRY_COMPARE(mousePositionSpy.count(), 2); QVERIFY(drag->active()); - QCOMPARE(blackRect->x(), 72.0); - QCOMPARE(blackRect->y(), 72.0); + QCOMPARE(blackRect->x(), 61.0); + QCOMPARE(blackRect->y(), 61.0); mouseArea->setEnabled(false); @@ -1063,8 +1067,8 @@ void tst_QQuickMouseArea::disableAfterPress() QTRY_COMPARE(mousePositionSpy.count(), 4); QVERIFY(drag->active()); - QCOMPARE(blackRect->x(), 94.0); - QCOMPARE(blackRect->y(), 94.0); + QCOMPARE(blackRect->x(), 83.0); + QCOMPARE(blackRect->y(), 83.0); QVERIFY(mouseArea->pressed()); QVERIFY(mouseArea->hovered()); @@ -1074,8 +1078,8 @@ void tst_QQuickMouseArea::disableAfterPress() QTRY_COMPARE(mouseReleaseSpy.count(), 1); QVERIFY(!drag->active()); - QCOMPARE(blackRect->x(), 94.0); - QCOMPARE(blackRect->y(), 94.0); + QCOMPARE(blackRect->x(), 83.0); + QCOMPARE(blackRect->y(), 83.0); QVERIFY(!mouseArea->pressed()); QVERIFY(!mouseArea->hovered()); // since hover is not enabled @@ -1346,25 +1350,25 @@ void tst_QQuickMouseArea::changeAxis() QTest::mouseMove(view, QPoint(122, 122)); QTRY_VERIFY(drag->active()); - QCOMPARE(blackRect->x(), 72.0); - QCOMPARE(blackRect->y(), 72.0); + QCOMPARE(blackRect->x(), 61.0); + QCOMPARE(blackRect->y(), 61.0); QCOMPARE(drag->axis(), QQuickDrag::XAndYAxis); /* When blackRect.x becomes bigger than 75, the drag axis is changed to * Drag.YAxis by the QML code. Verify that this happens, and that the drag * movement is effectively constrained to the Y axis. */ - QTest::mouseMove(view, QPoint(133, 133)); + QTest::mouseMove(view, QPoint(144, 144)); QTRY_COMPARE(blackRect->x(), 83.0); QTRY_COMPARE(blackRect->y(), 83.0); QTRY_COMPARE(drag->axis(), QQuickDrag::YAxis); - QTest::mouseMove(view, QPoint(144, 144)); + QTest::mouseMove(view, QPoint(155, 155)); QTRY_COMPARE(blackRect->y(), 94.0); QCOMPARE(blackRect->x(), 83.0); - QTest::mouseRelease(view, Qt::LeftButton, 0, QPoint(144, 144)); + QTest::mouseRelease(view, Qt::LeftButton, 0, QPoint(155, 155)); QTRY_VERIFY(!drag->active()); QCOMPARE(blackRect->x(), 83.0); @@ -1426,6 +1430,72 @@ void tst_QQuickMouseArea::moveAndReleaseWithoutPress() delete window; } +void tst_QQuickMouseArea::nestedStopAtBounds_data() +{ + QTest::addColumn<bool>("transpose"); + QTest::addColumn<bool>("invert"); + + QTest::newRow("left") << false << false; + QTest::newRow("right") << false << true; + QTest::newRow("top") << true << false; + QTest::newRow("bottom") << true << true; +} + +void tst_QQuickMouseArea::nestedStopAtBounds() +{ + QFETCH(bool, transpose); + QFETCH(bool, invert); + + QQuickView view; + view.setSource(testFileUrl("nestedStopAtBounds.qml")); + view.show(); + view.requestActivate(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); + QVERIFY(view.rootObject()); + + QQuickMouseArea *outer = view.rootObject()->findChild<QQuickMouseArea*>("outer"); + QVERIFY(outer); + + QQuickMouseArea *inner = outer->findChild<QQuickMouseArea*>("inner"); + QVERIFY(inner); + inner->drag()->setAxis(transpose ? QQuickDrag::YAxis : QQuickDrag::XAxis); + inner->setX(invert ? 100 : 0); + inner->setY(invert ? 100 : 0); + + const int threshold = qApp->styleHints()->startDragDistance(); + + QPoint position(200, 200); + int &axis = transpose ? position.ry() : position.rx(); + + // drag toward the aligned boundary. Outer mouse area dragged. + QTest::mousePress(&view, Qt::LeftButton, 0, position); + QTest::qWait(10); + axis += invert ? threshold * 2 : -threshold * 2; + QTest::mouseMove(&view, position); + axis += invert ? threshold : -threshold; + QTest::mouseMove(&view, position); + QCOMPARE(outer->drag()->active(), true); + QCOMPARE(inner->drag()->active(), false); + QTest::mouseRelease(&view, Qt::LeftButton, 0, position); + + QVERIFY(!outer->drag()->active()); + + axis = 200; + outer->setX(50); + outer->setY(50); + + // drag away from the aligned boundary. Inner mouse area dragged. + QTest::mousePress(&view, Qt::LeftButton, 0, position); + QTest::qWait(10); + axis += invert ? -threshold * 2 : threshold * 2; + QTest::mouseMove(&view, position); + axis += invert ? -threshold : threshold; + QTest::mouseMove(&view, position); + QCOMPARE(outer->drag()->active(), false); + QCOMPARE(inner->drag()->active(), true); + QTest::mouseRelease(&view, Qt::LeftButton, 0, position); +} + QTEST_MAIN(tst_QQuickMouseArea) #include "tst_qquickmousearea.moc" diff --git a/tests/auto/quick/qquickpixmapcache/tst_qquickpixmapcache.cpp b/tests/auto/quick/qquickpixmapcache/tst_qquickpixmapcache.cpp index f52d5281a2..75bd468aef 100644 --- a/tests/auto/quick/qquickpixmapcache/tst_qquickpixmapcache.cpp +++ b/tests/auto/quick/qquickpixmapcache/tst_qquickpixmapcache.cpp @@ -419,6 +419,7 @@ void tst_qquickpixmapcache::lockingCrash() p->clear(); QVERIFY(p->isNull()); delete p; + server.sendDelayedItem(); } } diff --git a/tests/auto/quick/qquicksmoothedanimation/data/smoothedanimationZeroDuration.qml b/tests/auto/quick/qquicksmoothedanimation/data/smoothedanimationZeroDuration.qml new file mode 100644 index 0000000000..d0183ad00c --- /dev/null +++ b/tests/auto/quick/qquicksmoothedanimation/data/smoothedanimationZeroDuration.qml @@ -0,0 +1,12 @@ +import QtQuick 2.0 + +Rectangle { + width: 300; height: 300; + Rectangle { + objectName: "theRect" + color: "red" + width: 60; height: 60; + x: 100; y: 100; + SmoothedAnimation on x { objectName: "easeX"; to: 200; duration: 0 } + } +} diff --git a/tests/auto/quick/qquicksmoothedanimation/tst_qquicksmoothedanimation.cpp b/tests/auto/quick/qquicksmoothedanimation/tst_qquicksmoothedanimation.cpp index 935543cc34..705ee5cf46 100644 --- a/tests/auto/quick/qquicksmoothedanimation/tst_qquicksmoothedanimation.cpp +++ b/tests/auto/quick/qquicksmoothedanimation/tst_qquicksmoothedanimation.cpp @@ -60,6 +60,7 @@ private slots: void valueSource(); void behavior(); void deleteOnUpdate(); + void zeroDuration(); private: QQmlEngine engine; @@ -237,6 +238,28 @@ void tst_qquicksmoothedanimation::deleteOnUpdate() delete rect; } +void tst_qquicksmoothedanimation::zeroDuration() +{ + QQmlEngine engine; + + QQmlComponent c(&engine, testFileUrl("smoothedanimationZeroDuration.qml")); + + QQuickRectangle *rect = qobject_cast<QQuickRectangle*>(c.create()); + QVERIFY(rect); + + QQuickRectangle *theRect = rect->findChild<QQuickRectangle*>("theRect"); + QVERIFY(theRect); + + QQuickSmoothedAnimation *easeX = rect->findChild<QQuickSmoothedAnimation*>("easeX"); + QVERIFY(easeX); + QVERIFY(easeX->isRunning()); + + QTRY_VERIFY(!easeX->isRunning()); + QTRY_COMPARE(theRect->x(), qreal(200)); + + delete rect; +} + QTEST_MAIN(tst_qquicksmoothedanimation) #include "tst_qquicksmoothedanimation.moc" diff --git a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp index 78ae94e53e..c0fd1e94a5 100644 --- a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp +++ b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp @@ -1872,6 +1872,8 @@ void tst_qquicktextedit::mouseSelection() QTest::mouseRelease(&window, Qt::LeftButton, Qt::NoModifier, p2); QTRY_COMPARE(textEditObject->selectedText(), selectedText); + QTest::qWait(QGuiApplication::styleHints()->mouseDoubleClickInterval() + 10); + // Clicking and shift to clicking between the same points should select the same text. textEditObject->setCursorPosition(0); if (clicks > 1) @@ -2351,6 +2353,7 @@ void tst_qquicktextedit::remoteCursorDelegate() QCOMPARE(component.status(), QQmlComponent::Loading); QVERIFY(!textEditObject->findChild<QQuickItem*>("cursorInstance")); + server.sendDelayedItem(); // Wait for component to load. QTRY_COMPARE(component.status(), QQmlComponent::Ready); diff --git a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp index 86a05c3d3b..339aa5854d 100644 --- a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp +++ b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp @@ -2774,7 +2774,7 @@ void tst_qquicktextinput::cursorDelegate() void tst_qquicktextinput::remoteCursorDelegate() { TestHTTPServer server(SERVER_PORT); - server.serveDirectory(dataDirectory()); + server.serveDirectory(dataDirectory(), TestHTTPServer::Delay); QQuickView view; @@ -2797,6 +2797,7 @@ void tst_qquicktextinput::remoteCursorDelegate() QCOMPARE(component.status(), QQmlComponent::Loading); QVERIFY(!textInputObject->findChild<QQuickItem*>("cursorInstance")); + server.sendDelayedItem(); // Wait for component to load. QTRY_COMPARE(component.status(), QQmlComponent::Ready); diff --git a/tests/auto/shared/testhttpserver.cpp b/tests/auto/shared/testhttpserver.cpp index 461e0e70d2..205d5cec5d 100644 --- a/tests/auto/shared/testhttpserver.cpp +++ b/tests/auto/shared/testhttpserver.cpp @@ -284,6 +284,11 @@ bool TestHTTPServer::reply(QTcpSocket *socket, const QByteArray &fileName) return true; } +void TestHTTPServer::sendDelayedItem() +{ + sendOne(); +} + void TestHTTPServer::sendOne() { if (!toSend.isEmpty()) { diff --git a/tests/auto/shared/testhttpserver.h b/tests/auto/shared/testhttpserver.h index 1abf37e438..15e08afd0c 100644 --- a/tests/auto/shared/testhttpserver.h +++ b/tests/auto/shared/testhttpserver.h @@ -64,6 +64,9 @@ public: void addAlias(const QString &filename, const QString &aliasName); void addRedirect(const QString &filename, const QString &redirectName); + // In Delay mode, each item needs one call to this function to be sent + void sendDelayedItem(); + private slots: void newConnection(); void disconnected(); |
