summaryrefslogtreecommitdiffstats
path: root/src/declarative
diff options
context:
space:
mode:
authorNils Jeisecke <jeisecke@saltation.de>2014-02-28 12:53:43 +0100
committerNils Jeisecke <jeisecke@saltation.de>2014-09-10 18:26:05 +0200
commitf09b12cea1143f1b2763064bb0d3e6592081de2b (patch)
tree3589e5aaf0591cda2a9c15f04faf6cf9a73dc736 /src/declarative
parent8898cabfbf84a126257cf537b8172e799501682c (diff)
Make sure that the itemview's count property is reliable
This fixes a missing countChanged signal when model changes happen while the itemview component is not completely initialized. Task-number: QTBUG-37115 Change-Id: I20c749b9e521b0292186adbecd09e1d362520881 Reviewed-by: Alan Alpert <aalpert@blackberry.com>
Diffstat (limited to 'src/declarative')
-rw-r--r--src/declarative/graphicsitems/qdeclarativegridview.cpp8
-rw-r--r--src/declarative/graphicsitems/qdeclarativelistview.cpp8
-rw-r--r--src/declarative/graphicsitems/qdeclarativepathview.cpp14
-rw-r--r--src/declarative/graphicsitems/qdeclarativerepeater.cpp11
4 files changed, 33 insertions, 8 deletions
diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp
index 1285c877..b59eb6af 100644
--- a/src/declarative/graphicsitems/qdeclarativegridview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp
@@ -2767,8 +2767,10 @@ void QDeclarativeGridView::trackedPositionChanged()
void QDeclarativeGridView::itemsInserted(int modelIndex, int count)
{
Q_D(QDeclarativeGridView);
- if (!isComponentComplete())
+ if (!isComponentComplete()) {
+ emit countChanged();
return;
+ }
int index = d->visibleItems.count() ? d->mapFromModel(modelIndex) : 0;
if (index < 0) {
@@ -2903,8 +2905,10 @@ void QDeclarativeGridView::itemsInserted(int modelIndex, int count)
void QDeclarativeGridView::itemsRemoved(int modelIndex, int count)
{
Q_D(QDeclarativeGridView);
- if (!isComponentComplete())
+ if (!isComponentComplete()) {
+ emit countChanged();
return;
+ }
d->itemCount -= count;
bool currentRemoved = d->currentIndex >= modelIndex && d->currentIndex < modelIndex + count;
diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp
index 08e76363..48e6e532 100644
--- a/src/declarative/graphicsitems/qdeclarativelistview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp
@@ -3211,8 +3211,10 @@ void QDeclarativeListView::trackedPositionChanged()
void QDeclarativeListView::itemsInserted(int modelIndex, int count)
{
Q_D(QDeclarativeListView);
- if (!isComponentComplete())
+ if (!isComponentComplete()) {
+ emit countChanged();
return;
+ }
d->updateUnrequestedIndexes();
d->moveReason = QDeclarativeListViewPrivate::Other;
@@ -3364,8 +3366,10 @@ void QDeclarativeListView::itemsInserted(int modelIndex, int count)
void QDeclarativeListView::itemsRemoved(int modelIndex, int count)
{
Q_D(QDeclarativeListView);
- if (!isComponentComplete())
+ if (!isComponentComplete()) {
+ emit countChanged();
return;
+ }
d->moveReason = QDeclarativeListViewPrivate::Other;
d->updateUnrequestedIndexes();
d->itemCount -= count;
diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp
index 9dec9e25..f41d0547 100644
--- a/src/declarative/graphicsitems/qdeclarativepathview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp
@@ -1476,8 +1476,13 @@ void QDeclarativePathView::itemsInserted(int modelIndex, int count)
{
//XXX support animated insertion
Q_D(QDeclarativePathView);
- if (!d->isValid() || !isComponentComplete())
+ if (!d->isValid())
+ return;
+
+ if (!isComponentComplete()) {
+ emit countChanged();
return;
+ }
if (d->modelCount) {
d->itemCache += d->items;
@@ -1506,9 +1511,14 @@ void QDeclarativePathView::itemsRemoved(int modelIndex, int count)
{
//XXX support animated removal
Q_D(QDeclarativePathView);
- if (!d->model || !d->modelCount || !d->model->isValid() || !d->path || !isComponentComplete())
+ if (!d->model || !d->modelCount || !d->model->isValid() || !d->path)
return;
+ if (!isComponentComplete()) {
+ emit countChanged();
+ return;
+ }
+
// fix current
bool currentChanged = false;
if (d->currentIndex >= modelIndex + count) {
diff --git a/src/declarative/graphicsitems/qdeclarativerepeater.cpp b/src/declarative/graphicsitems/qdeclarativerepeater.cpp
index 0e9a9be6..9ac497a9 100644
--- a/src/declarative/graphicsitems/qdeclarativerepeater.cpp
+++ b/src/declarative/graphicsitems/qdeclarativerepeater.cpp
@@ -381,8 +381,10 @@ void QDeclarativeRepeater::regenerate()
void QDeclarativeRepeater::itemsInserted(int index, int count)
{
Q_D(QDeclarativeRepeater);
- if (!isComponentComplete())
+ if (!isComponentComplete()) {
+ emit countChanged();
return;
+ }
for (int i = 0; i < count; ++i) {
int modelIndex = index + i;
QDeclarativeItem *item = d->model->item(modelIndex);
@@ -403,8 +405,13 @@ void QDeclarativeRepeater::itemsInserted(int index, int count)
void QDeclarativeRepeater::itemsRemoved(int index, int count)
{
Q_D(QDeclarativeRepeater);
- if (!isComponentComplete() || count <= 0)
+ if (count <= 0)
return;
+
+ if (!isComponentComplete()) {
+ emit countChanged();
+ return;
+ }
while (count--) {
QDeclarativeItem *item = d->deletables.takeAt(index);
emit itemRemoved(index, item);