summaryrefslogtreecommitdiffstats
path: root/src/widgets/itemviews
diff options
context:
space:
mode:
authorLuca Beldi <v.ronin@yahoo.it>2021-07-20 15:49:33 +0100
committerLuca Beldi <v.ronin@yahoo.it>2021-07-20 21:27:27 +0100
commit1dcfb09c5bf431bf8b065ac038bd1fc618a68f96 (patch)
treee43a3bb55f4531cf3d2ca6706f3c41522f15cb8c /src/widgets/itemviews
parente1b010ff47ae81067802d9240ea990d6d9187484 (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.cpp12
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);
}
}