diff options
author | Aleix Pol <aleixpol@kde.org> | 2018-01-19 17:32:00 +0100 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@qt.io> | 2018-02-13 10:03:53 +0000 |
commit | 0e64bd96fbf26855a65e38847083dbd2c6bee4ac (patch) | |
tree | 1ba5bb7c0d14aa2a5e06466756e17cee195afebd /src/quick/items | |
parent | 520bd458c72f6c1f92290a4153d0cc7a7e58ef1e (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>
Diffstat (limited to 'src/quick/items')
-rw-r--r-- | src/quick/items/qquickitemview.cpp | 7 |
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); |