Skip to content

Commit

Permalink
QQuickItemView::currentItemChanged called upon currentItem destruction
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
aleixpol authored and gladhorn committed Feb 13, 2018
1 parent 520bd45 commit 0e64bd9
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/quick/items/qquickitemview.cpp
Expand Up @@ -1750,6 +1750,7 @@ void QQuickItemViewPrivate::updateCurrent(int modelIndex)

void QQuickItemViewPrivate::clear()
{
Q_Q(QQuickItemView);
currentChanges.reset();
bufferedChanges.reset();
timeline.clear();
Expand All @@ -1763,8 +1764,11 @@ void QQuickItemViewPrivate::clear()
}
releasePendingTransition.clear();

auto oldCurrentItem = currentItem;
releaseItem(currentItem);
currentItem = 0;
if (oldCurrentItem)
emit q->currentItemChanged();
createHighlight();
trackedItem = 0;

Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 0e64bd9

Please sign in to comment.