- Uninitialized types count as one group
- Let the receiver of the signal itemsMoved() decide whether unmoved items
really result in an unchanged visual appearance. This might e.g. be the case
if the grouping is turned on and the group-names change although the items
themselves have not changed their position.
BUG: 289654
FIXED-IN: 4.8.0
}
// Determine the indexes that have been moved
}
// Determine the indexes that have been moved
- bool emitItemsMoved = false;
QList<int> movedToIndexes;
movedToIndexes.reserve(itemCount);
for (int i = 0; i < itemCount; i++) {
const int newIndex = m_items.value(oldUrls.at(i).url());
movedToIndexes.append(newIndex);
QList<int> movedToIndexes;
movedToIndexes.reserve(itemCount);
for (int i = 0; i < itemCount; i++) {
const int newIndex = m_items.value(oldUrls.at(i).url());
movedToIndexes.append(newIndex);
- if (!emitItemsMoved && newIndex != i) {
- emitItemsMoved = true;
- }
- if (emitItemsMoved) {
- emit itemsMoved(KItemRange(0, itemCount), movedToIndexes);
- }
+ // Don't check whether items have really been moved and always emit a
+ // itemsMoved() signal after resorting: In case of grouped items
+ // the groups might change even if the items themselves don't change their
+ // position. Let the receiver of the signal decide whether a check for moved
+ // items makes sense.
+ emit itemsMoved(KItemRange(0, itemCount), movedToIndexes);
#ifdef KFILEITEMMODEL_DEBUG
kDebug() << "[TIME] Resorting of" << itemCount << "items:" << timer.elapsed();
#ifdef KFILEITEMMODEL_DEBUG
kDebug() << "[TIME] Resorting of" << itemCount << "items:" << timer.elapsed();
const int maxIndex = count() - 1;
QList<QPair<int, QVariant> > groups;
const int maxIndex = count() - 1;
QList<QPair<int, QVariant> > groups;
for (int i = 0; i <= maxIndex; ++i) {
if (isChildItem(i)) {
continue;
}
for (int i = 0; i <= maxIndex; ++i) {
if (isChildItem(i)) {
continue;
}
- const int newGroupValue = m_itemData.at(i)->values.value("rating").toInt();
+ const int newGroupValue = m_itemData.at(i)->values.value("rating", 0).toInt();
if (newGroupValue != groupValue) {
groupValue = newGroupValue;
groups.append(QPair<int, QVariant>(i, newGroupValue));
if (newGroupValue != groupValue) {
groupValue = newGroupValue;
groups.append(QPair<int, QVariant>(i, newGroupValue));
const int maxIndex = count() - 1;
QList<QPair<int, QVariant> > groups;
const int maxIndex = count() - 1;
QList<QPair<int, QVariant> > groups;
+ bool isFirstGroupValue = true;
QString groupValue;
for (int i = 0; i <= maxIndex; ++i) {
if (isChildItem(i)) {
continue;
}
const QString newGroupValue = m_itemData.at(i)->values.value(role).toString();
QString groupValue;
for (int i = 0; i <= maxIndex; ++i) {
if (isChildItem(i)) {
continue;
}
const QString newGroupValue = m_itemData.at(i)->values.value(role).toString();
- if (newGroupValue != groupValue) {
+ if (newGroupValue != groupValue || isFirstGroupValue) {
groupValue = newGroupValue;
groups.append(QPair<int, QVariant>(i, newGroupValue));
groupValue = newGroupValue;
groups.append(QPair<int, QVariant>(i, newGroupValue));
+ isFirstGroupValue = false;