aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleix Pol <aleixpol@kde.org>2018-01-19 17:32:00 +0100
committerFrederik Gladhorn <frederik.gladhorn@qt.io>2018-02-13 10:03:53 +0000
commit0e64bd96fbf26855a65e38847083dbd2c6bee4ac (patch)
tree1ba5bb7c0d14aa2a5e06466756e17cee195afebd
parent520bd458c72f6c1f92290a4153d0cc7a7e58ef1e (diff)
QQuickItemView::currentItemChanged called upon currentItem destruction
There were some cases where the signal wasn't emitted and we ended up with events being delivered to objects that didn't exist anymore. Task-number: QTBUG-65881 Change-Id: I847669a978e82a0332907b029a8295bb993d2850 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
-rw-r--r--src/quick/items/qquickitemview.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp
index 17a1d124ab..21aca04fdc 100644
--- a/src/quick/items/qquickitemview.cpp
+++ b/src/quick/items/qquickitemview.cpp
@@ -1750,6 +1750,7 @@ void QQuickItemViewPrivate::updateCurrent(int modelIndex)
void QQuickItemViewPrivate::clear()
{
+ Q_Q(QQuickItemView);
currentChanges.reset();
bufferedChanges.reset();
timeline.clear();
@@ -1763,8 +1764,11 @@ void QQuickItemViewPrivate::clear()
}
releasePendingTransition.clear();
+ auto oldCurrentItem = currentItem;
releaseItem(currentItem);
currentItem = 0;
+ if (oldCurrentItem)
+ emit q->currentItemChanged();
createHighlight();
trackedItem = 0;
@@ -2120,8 +2124,11 @@ bool QQuickItemViewPrivate::applyModelChanges(ChangeResult *totalInsertionResult
if (currentChanges.currentRemoved && currentItem) {
if (currentItem->item && currentItem->attached)
currentItem->attached->setIsCurrentItem(false);
+ auto oldCurrentItem = currentItem;
releaseItem(currentItem);
currentItem = 0;
+ if (oldCurrentItem)
+ emit q->currentItemChanged();
}
if (!currentIndexCleared)
updateCurrent(currentChanges.newCurrentIndex);