diff options
author | Luca Beldi <v.ronin@yahoo.it> | 2021-07-20 15:49:33 +0100 |
---|---|---|
committer | Luca Beldi <v.ronin@yahoo.it> | 2021-07-20 21:27:27 +0100 |
commit | 1dcfb09c5bf431bf8b065ac038bd1fc618a68f96 (patch) | |
tree | e43a3bb55f4531cf3d2ca6706f3c41522f15cb8c /src/widgets/itemviews | |
parent | e1b010ff47ae81067802d9240ea990d6d9187484 (diff) |
emit layoutAboutToBeChanged timely
layoutAboutToBeChanged must be called before
persistentIndexList as the user might create persistent indexes
as a response to the signal
Fixes: QTBUG-93466
Pick-to: 6.2 5.15
Change-Id: I73c24501f536ef9b6092c3374821497f0a8f0de4
Reviewed-by: David Faure <david.faure@kdab.com>
Diffstat (limited to 'src/widgets/itemviews')
-rw-r--r-- | src/widgets/itemviews/qlistwidget.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/widgets/itemviews/qlistwidget.cpp b/src/widgets/itemviews/qlistwidget.cpp index ca7439b08c..f04cfe45d9 100644 --- a/src/widgets/itemviews/qlistwidget.cpp +++ b/src/widgets/itemviews/qlistwidget.cpp @@ -373,7 +373,7 @@ void QListModel::ensureSorted(int column, Qt::SortOrder order, int start, int en if (column != 0) return; - int count = end - start + 1; + const int count = end - start + 1; QList<QPair<QListWidgetItem *, int>> sorting(count); for (int i = 0; i < count; ++i) { sorting[i].first = items.at(start + i); @@ -399,7 +399,12 @@ void QListModel::ensureSorted(int column, Qt::SortOrder order, int start, int en int newRow = qMax<qsizetype>(lit - tmp.begin(), 0); lit = tmp.insert(lit, item); if (newRow != oldRow) { - changed = true; + if (!changed) { + emit layoutAboutToBeChanged({}, QAbstractItemModel::VerticalSortHint); + oldPersistentIndexes = persistentIndexList(); + newPersistentIndexes = oldPersistentIndexes; + changed = true; + } for (int j = i + 1; j < count; ++j) { int otherRow = sorting.at(j).second; if (oldRow < otherRow && newRow >= otherRow) @@ -425,10 +430,9 @@ void QListModel::ensureSorted(int column, Qt::SortOrder order, int start, int en } if (changed) { - emit layoutAboutToBeChanged(); items = tmp; changePersistentIndexList(oldPersistentIndexes, newPersistentIndexes); - emit layoutChanged(); + emit layoutChanged({}, QAbstractItemModel::VerticalSortHint); } } |