X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/9663bfbc23b8a73dade97a520783f101664fcb1d..2b6d8aac0b889fd7740dcb36f3c05b87dd763c8d:/src/kitemviews/kfileitemmodel.cpp diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index e7afa5288..5b7b781a8 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -39,6 +39,7 @@ KFileItemModel::KFileItemModel(QObject *parent) , m_sortDirsFirst(true) , m_sortHiddenLast(false) , m_sortRole(NameRole) + , m_groupRole(NoRole) , m_sortingProgressPercent(-1) , m_roles() , m_itemData() @@ -2439,6 +2440,7 @@ int KFileItemModel::stringCompare(const QString &a, const QString &b, const QCol KFileItemModel::ItemGroupInfo KFileItemModel::nameRoleGroup(const ItemData *itemData, bool withString) const { + static bool oldWithString; static ItemGroupInfo oldGroupInfo; static QChar oldFirstChar; ItemGroupInfo groupInfo; @@ -2450,8 +2452,8 @@ KFileItemModel::ItemGroupInfo KFileItemModel::nameRoleGroup(const ItemData *item // Use the first character of the name as group indication firstChar = name.at(0).toUpper(); - - if (firstChar == oldFirstChar) { + + if (firstChar == oldFirstChar && withString == oldWithString) { return oldGroupInfo; } if (firstChar == QLatin1Char('~') && name.length() > 1) { @@ -2506,6 +2508,7 @@ KFileItemModel::ItemGroupInfo KFileItemModel::nameRoleGroup(const ItemData *item } groupInfo.comparable = (int)'.'; } + oldWithString = withString; oldFirstChar = firstChar; oldGroupInfo = groupInfo; return groupInfo; @@ -2547,6 +2550,7 @@ KFileItemModel::ItemGroupInfo KFileItemModel::sizeRoleGroup(const ItemData *item KFileItemModel::ItemGroupInfo KFileItemModel::timeRoleGroup(const std::function &fileTimeCb, const ItemData *itemData, bool withString) const { + static bool oldWithString; static ItemGroupInfo oldGroupInfo; static QDate oldFileDate; ItemGroupInfo groupInfo; @@ -2556,6 +2560,9 @@ KFileItemModel::timeRoleGroup(const std::function & const QDate fileDate = fileTime.date(); const int daysDistance = fileDate.daysTo(currentDate); + if (fileDate == oldFileDate && withString == oldWithString) { + return oldGroupInfo; + } // Simplified grouping algorithm, preserving dates // but not taking "pretty printing" into account if (currentDate.year() == fileDate.year() && currentDate.month() == fileDate.month()) { @@ -2759,6 +2766,7 @@ KFileItemModel::timeRoleGroup(const std::function & } } } + oldWithString = withString; oldFileDate = fileDate; oldGroupInfo = groupInfo; return groupInfo; @@ -2766,13 +2774,14 @@ KFileItemModel::timeRoleGroup(const std::function & KFileItemModel::ItemGroupInfo KFileItemModel::permissionRoleGroup(const ItemData *itemData, bool withString) const { + static bool oldWithString; static ItemGroupInfo oldGroupInfo; static QFileDevice::Permissions oldPermissions; ItemGroupInfo groupInfo; const QFileInfo info(itemData->item.url().toLocalFile()); const QFileDevice::Permissions permissions = info.permissions(); - if (permissions == oldPermissions) { + if (permissions == oldPermissions && withString == oldWithString) { return oldGroupInfo; } groupInfo.comparable = (int)permissions; @@ -2818,6 +2827,7 @@ KFileItemModel::ItemGroupInfo KFileItemModel::permissionRoleGroup(const ItemData others = others.isEmpty() ? i18nc("@item:intext Access permission, concatenated", "Forbidden") : others.mid(0, others.length() - 2); groupInfo.text = i18nc("@title:group Files and folders by permissions", "User: %1 | Group: %2 | Others: %3", user, group, others); } + oldWithString = withString; oldPermissions = permissions; oldGroupInfo = groupInfo; return groupInfo;