Fix currentIndex in Qml itemView when assigning an empty model

When assigning an empty model to e.g. a ListView after component
initialization has been completed, currentIndex is now correctly
set to -1.

Change-Id: I540c034944009ccb8894bf84f400658ef9f0371f
Task-number: QTBUG-32838
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
This commit is contained in:
Nils Jeisecke 2013-08-06 13:58:15 +02:00 committed by The Qt Project
parent 295b53059d
commit 290dc6caf6
3 changed files with 31 additions and 1 deletions

25
dist/changes-5.1.2 vendored Normal file
View File

@ -0,0 +1,25 @@
Qt 5.1.2 is a bug-fix release. It maintains both forward and backward
compatibility (source and binary) with Qt 5.1.0 and 5.1.1.
For more details, refer to the online documentation included in this
distribution. The documentation is also available online:
http://qt-project.org/doc/qt-5.1/
Some of the changes listed in this file include issue tracking numbers
corresponding to tasks in the Qt Bug Tracker:
http://bugreports.qt-project.org/
Each of these identifiers can be entered in the bug tracker to obtain more
information about a particular change.
****************************************************************************
* Important Behavior Changes *
****************************************************************************
- QTBUG-32838: Setting the model property of ListView, GridView or PathView to
an empty model will now correctly reset currentIndex to -1. In prior versions
currentIndex was set to 0 regardless of the actual number of rows in the model
when the model property was changed after the view's initialization.

View File

@ -326,7 +326,7 @@ void QQuickItemView::setModel(const QVariant &model)
d->updateSectionCriteria();
d->refill();
d->currentIndex = -1;
setCurrentIndex(0);
setCurrentIndex(d->model->count() > 0 ? 0 : -1);
d->updateViewport();
if (d->transitioner && d->transitioner->populateTransition) {

View File

@ -2605,6 +2605,11 @@ void tst_QQuickListView::currentIndex()
listview->setContentY(200);
QTRY_VERIFY(!delegateVisible(listview->currentItem()));
// empty model should reset currentIndex to -1
QaimModel emptyModel;
ctxt->setContextProperty("testModel", &emptyModel);
QCOMPARE(listview->currentIndex(), -1);
delete window;
}