From 272aa65bb55dd31f58e8a8e24ea7bc8bd2712daa Mon Sep 17 00:00:00 2001 From: Heiko Becker Date: Fri, 6 Aug 2021 00:36:50 +0200 Subject: Revert "Disable Hidden Files Last sort by default" This reverts commit fd2203bb3925edb5d657d49a706e26ea736362d2. --- src/kitemviews/kfileitemmodel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/kitemviews/kfileitemmodel.cpp') diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index af8cfc131..ef80b4edb 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -34,7 +34,7 @@ KFileItemModel::KFileItemModel(QObject* parent) : KItemModelBase("text", parent), m_dirLister(nullptr), m_sortDirsFirst(true), - m_sortHiddenLast(false), + m_sortHiddenLast(true), m_sortRole(NameRole), m_sortingProgressPercent(-1), m_roles(), -- cgit v1.3 From bb67def173f31819bb9a696627f9af71c7037dcd Mon Sep 17 00:00:00 2001 From: Heiko Becker Date: Fri, 6 Aug 2021 00:36:57 +0200 Subject: Revert "Configurable Show hidden files and folders last toggle" This reverts commit 50149d6abb8a0a978db3c6afb5238bc42a4a89c8. It breaks the string freeze and I don't think it can count as a bug fix, so it breaks the feature freeze, too. CCMAIL: zrenfire@gmail.com --- src/kitemviews/kfileitemmodel.cpp | 28 +++++---------------- src/kitemviews/kfileitemmodel.h | 7 ------ .../dolphin_directoryviewpropertysettings.kcfg | 5 ---- src/settings/viewpropertiesdialog.cpp | 14 ----------- src/settings/viewpropertiesdialog.h | 2 -- src/views/dolphinview.cpp | 29 ---------------------- src/views/dolphinview.h | 15 ----------- src/views/dolphinviewactionhandler.cpp | 19 -------------- src/views/dolphinviewactionhandler.h | 10 -------- src/views/viewproperties.cpp | 14 ----------- src/views/viewproperties.h | 3 --- 11 files changed, 6 insertions(+), 140 deletions(-) (limited to 'src/kitemviews/kfileitemmodel.cpp') diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index ef80b4edb..e03ec7c0e 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -34,7 +34,6 @@ KFileItemModel::KFileItemModel(QObject* parent) : KItemModelBase("text", parent), m_dirLister(nullptr), m_sortDirsFirst(true), - m_sortHiddenLast(true), m_sortRole(NameRole), m_sortingProgressPercent(-1), m_roles(), @@ -213,19 +212,6 @@ bool KFileItemModel::sortDirectoriesFirst() const return m_sortDirsFirst; } -void KFileItemModel::setSortHiddenLast(bool hiddenLast) -{ - if (hiddenLast != m_sortHiddenLast) { - m_sortHiddenLast = hiddenLast; - resortAllItems(); - } -} - -bool KFileItemModel::sortHiddenLast() const -{ - return m_sortHiddenLast; -} - void KFileItemModel::setShowHiddenFiles(bool show) { m_dirLister->setShowingDotFiles(show); @@ -1748,14 +1734,12 @@ bool KFileItemModel::lessThan(const ItemData* a, const ItemData* b, const QColla } // Show hidden files and folders last - if (m_sortHiddenLast) { - const bool isHiddenA = a->item.isHidden(); - const bool isHiddenB = b->item.isHidden(); - if (isHiddenA && !isHiddenB) { - return false; - } else if (!isHiddenA && isHiddenB) { - return true; - } + const bool isHiddenA = a->item.isHidden(); + const bool isHiddenB = b->item.isHidden(); + if (isHiddenA && !isHiddenB) { + return false; + } else if (!isHiddenA && isHiddenB) { + return true; } if (m_sortDirsFirst || (DetailsModeSettings::directorySizeCount() && m_sortRole == SizeRole)) { diff --git a/src/kitemviews/kfileitemmodel.h b/src/kitemviews/kfileitemmodel.h index 33838853d..acf4b761c 100644 --- a/src/kitemviews/kfileitemmodel.h +++ b/src/kitemviews/kfileitemmodel.h @@ -80,12 +80,6 @@ public: void setSortDirectoriesFirst(bool dirsFirst); bool sortDirectoriesFirst() const; - /** - * Sets a separate sorting with hidden files and folders last (true) or not (false). - */ - void setSortHiddenLast(bool hiddenLast); - bool sortHiddenLast() const; - void setShowHiddenFiles(bool show); bool showHiddenFiles() const; @@ -469,7 +463,6 @@ private: QCollator m_collator; bool m_naturalSorting; bool m_sortDirsFirst; - bool m_sortHiddenLast; RoleType m_sortRole; int m_sortingProgressPercent; // Value of directorySortingProgress() signal diff --git a/src/settings/dolphin_directoryviewpropertysettings.kcfg b/src/settings/dolphin_directoryviewpropertysettings.kcfg index 9846326b9..6bcf3cd02 100644 --- a/src/settings/dolphin_directoryviewpropertysettings.kcfg +++ b/src/settings/dolphin_directoryviewpropertysettings.kcfg @@ -57,11 +57,6 @@ true - - - true - - diff --git a/src/settings/viewpropertiesdialog.cpp b/src/settings/viewpropertiesdialog.cpp index 6659d79b6..82d182d1d 100644 --- a/src/settings/viewpropertiesdialog.cpp +++ b/src/settings/viewpropertiesdialog.cpp @@ -44,7 +44,6 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView* dolphinView) : m_sortOrder(nullptr), m_sorting(nullptr), m_sortFoldersFirst(nullptr), - m_sortHiddenLast(nullptr), m_previewsShown(nullptr), m_showInGroups(nullptr), m_showHiddenFiles(nullptr), @@ -83,7 +82,6 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView* dolphinView) : } m_sortFoldersFirst = new QCheckBox(i18nc("@option:check", "Show folders first")); - m_sortHiddenLast = new QCheckBox(i18nc("@option:check", "Show hidden files last")); m_previewsShown = new QCheckBox(i18nc("@option:check", "Show preview")); m_showInGroups = new QCheckBox(i18nc("@option:check", "Show in groups")); m_showHiddenFiles = new QCheckBox(i18nc("@option:check", "Show hidden files")); @@ -148,7 +146,6 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView* dolphinView) : layout->addRow(QString(), m_previewsShown); layout->addRow(QString(), m_showInGroups); layout->addRow(QString(), m_showHiddenFiles); - layout->addRow(QString(), m_sortHiddenLast); connect(m_viewMode, QOverload::of(&QComboBox::currentIndexChanged), this, &ViewPropertiesDialog::slotViewModeChanged); @@ -158,8 +155,6 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView* dolphinView) : this, &ViewPropertiesDialog::slotSortOrderChanged); connect(m_sortFoldersFirst, &QCheckBox::clicked, this, &ViewPropertiesDialog::slotSortFoldersFirstChanged); - connect(m_sortHiddenLast, &QCheckBox::clicked, - this, &ViewPropertiesDialog::slotSortHiddenLastChanged); connect(m_previewsShown, &QCheckBox::clicked, this, &ViewPropertiesDialog::slotShowPreviewChanged); connect(m_showInGroups, &QCheckBox::clicked, @@ -287,13 +282,6 @@ void ViewPropertiesDialog::slotSortFoldersFirstChanged() markAsDirty(true); } -void ViewPropertiesDialog::slotSortHiddenLastChanged() -{ - const bool hiddenLast = m_sortHiddenLast->isChecked(); - m_viewProps->setSortHiddenLast(hiddenLast); - markAsDirty(true); -} - void ViewPropertiesDialog::slotShowPreviewChanged() { const bool show = m_previewsShown->isChecked(); @@ -395,7 +383,6 @@ void ViewPropertiesDialog::applyViewProperties() m_dolphinView->setSortRole(m_viewProps->sortRole()); m_dolphinView->setSortOrder(m_viewProps->sortOrder()); m_dolphinView->setSortFoldersFirst(m_viewProps->sortFoldersFirst()); - m_dolphinView->setSortHiddenLast(m_viewProps->sortHiddenLast()); m_dolphinView->setGroupedSorting(m_viewProps->groupedSorting()); m_dolphinView->setVisibleRoles(m_viewProps->visibleRoles()); m_dolphinView->setPreviewsShown(m_viewProps->previewsShown()); @@ -431,7 +418,6 @@ void ViewPropertiesDialog::loadSettings() m_sorting->setCurrentIndex(sortRoleIndex); m_sortFoldersFirst->setChecked(m_viewProps->sortFoldersFirst()); - m_sortHiddenLast->setChecked(m_viewProps->sortHiddenLast()); // Load show preview, show in groups and show hidden files settings m_previewsShown->setChecked(m_viewProps->previewsShown()); diff --git a/src/settings/viewpropertiesdialog.h b/src/settings/viewpropertiesdialog.h index c58fda5c0..f07bb8088 100644 --- a/src/settings/viewpropertiesdialog.h +++ b/src/settings/viewpropertiesdialog.h @@ -46,7 +46,6 @@ private Q_SLOTS: void slotSortOrderChanged(int index); void slotGroupedSortingChanged(); void slotSortFoldersFirstChanged(); - void slotSortHiddenLastChanged(); void slotShowPreviewChanged(); void slotShowHiddenFilesChanged(); void slotItemChanged(QListWidgetItem *item); @@ -68,7 +67,6 @@ private: QComboBox* m_sortOrder; QComboBox* m_sorting; QCheckBox* m_sortFoldersFirst; - QCheckBox* m_sortHiddenLast; QCheckBox* m_previewsShown; QCheckBox* m_showInGroups; QCheckBox* m_showHiddenFiles; diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index 57ed73a3a..f5c21a2c5 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -463,18 +463,6 @@ bool DolphinView::sortFoldersFirst() const return m_model->sortDirectoriesFirst(); } -void DolphinView::setSortHiddenLast(bool hiddenLast) -{ - if (sortHiddenLast() != hiddenLast) { - updateSortHiddenLast(hiddenLast); - } -} - -bool DolphinView::sortHiddenLast() const -{ - return m_model->sortHiddenLast(); -} - void DolphinView::setVisibleRoles(const QList& roles) { const QList previousRoles = roles; @@ -1385,17 +1373,6 @@ void DolphinView::updateSortFoldersFirst(bool foldersFirst) Q_EMIT sortFoldersFirstChanged(foldersFirst); } -void DolphinView::updateSortHiddenLast(bool hiddenLast) -{ - ViewProperties props(viewPropertiesUrl()); - props.setSortHiddenLast(hiddenLast); - - m_model->setSortHiddenLast(hiddenLast); - - Q_EMIT sortHiddenLastChanged(hiddenLast); -} - - QPair DolphinView::pasteInfo() const { const QMimeData *mimeData = QApplication::clipboard()->mimeData(); @@ -1926,12 +1903,6 @@ void DolphinView::applyViewProperties(const ViewProperties& props) Q_EMIT sortFoldersFirstChanged(sortFoldersFirst); } - const bool sortHiddenLast = props.sortHiddenLast(); - if (sortHiddenLast != m_model->sortHiddenLast()) { - m_model->setSortHiddenLast(sortHiddenLast); - Q_EMIT sortHiddenLastChanged(sortHiddenLast); - } - const QList visibleRoles = props.visibleRoles(); if (visibleRoles != m_visibleRoles) { const QList previousVisibleRoles = m_visibleRoles; diff --git a/src/views/dolphinview.h b/src/views/dolphinview.h index 75c9dd985..e4d779830 100644 --- a/src/views/dolphinview.h +++ b/src/views/dolphinview.h @@ -206,10 +206,6 @@ public: void setSortFoldersFirst(bool foldersFirst); bool sortFoldersFirst() const; - /** Sets a separate sorting with hidden files and folders last (true) or not (false). */ - void setSortHiddenLast(bool hiddenLast); - bool sortHiddenLast() const; - /** Sets the additional information which should be shown for the items. */ void setVisibleRoles(const QList& roles); @@ -474,11 +470,6 @@ Q_SIGNALS: */ void sortFoldersFirstChanged(bool foldersFirst); - /** - * Is emitted if the sorting of hidden files has been changed. - */ - void sortHiddenLastChanged(bool hiddenLast); - /** Is emitted if the additional information shown for this view has been changed. */ void visibleRolesChanged(const QList& current, const QList& previous); @@ -688,12 +679,6 @@ private Q_SLOTS: */ void updateSortFoldersFirst(bool foldersFirst); - /** - * Updates the view properties of the current URL to the - * sorting of hidden files given by \a hiddenLast. - */ - void updateSortHiddenLast(bool hiddenLast); - /** * Indicates in the status bar that the delete operation * of the job \a job has been finished. diff --git a/src/views/dolphinviewactionhandler.cpp b/src/views/dolphinviewactionhandler.cpp index 90109605b..c9bab5f82 100644 --- a/src/views/dolphinviewactionhandler.cpp +++ b/src/views/dolphinviewactionhandler.cpp @@ -57,8 +57,6 @@ void DolphinViewActionHandler::setCurrentView(DolphinView* view) this, &DolphinViewActionHandler::slotSortOrderChanged); connect(view, &DolphinView::sortFoldersFirstChanged, this, &DolphinViewActionHandler::slotSortFoldersFirstChanged); - connect(view, &DolphinView::sortHiddenLastChanged, - this, &DolphinViewActionHandler::slotSortHiddenLastChanged); connect(view, &DolphinView::visibleRolesChanged, this, &DolphinViewActionHandler::slotVisibleRolesChanged); connect(view, &DolphinView::groupedSortingChanged, @@ -255,10 +253,6 @@ void DolphinViewActionHandler::createActions() sortFoldersFirst->setText(i18nc("@action:inmenu Sort", "Folders First")); connect(sortFoldersFirst, &KToggleAction::triggered, this, &DolphinViewActionHandler::toggleSortFoldersFirst); - KToggleAction* sortHiddenLast = m_actionCollection->add(QStringLiteral("hidden_last")); - sortHiddenLast->setText(i18nc("@action:inmenu Sort", "Hidden Files Last")); - connect(sortHiddenLast, &KToggleAction::triggered, this, &DolphinViewActionHandler::toggleSortHiddenLast); - // View -> Sort By QActionGroup* sortByActionGroup = createFileItemRolesActionGroup(QStringLiteral("sort_by_")); @@ -293,7 +287,6 @@ void DolphinViewActionHandler::createActions() sortByActionMenu->addAction(descendingAction); sortByActionMenu->addSeparator(); sortByActionMenu->addAction(sortFoldersFirst); - sortByActionMenu->addAction(sortHiddenLast); // View -> Additional Information QActionGroup* visibleRolesGroup = createFileItemRolesActionGroup(QStringLiteral("show_")); @@ -488,7 +481,6 @@ void DolphinViewActionHandler::updateViewActions() slotSortOrderChanged(m_currentView->sortOrder()); slotSortFoldersFirstChanged(m_currentView->sortFoldersFirst()); - slotSortHiddenLastChanged(m_currentView->sortHiddenLast()); slotVisibleRolesChanged(m_currentView->visibleRoles(), QList()); slotGroupedSortingChanged(m_currentView->groupedSorting()); slotSortRoleChanged(m_currentView->sortRole()); @@ -524,12 +516,6 @@ void DolphinViewActionHandler::toggleSortFoldersFirst() m_currentView->setSortFoldersFirst(!sortFirst); } -void DolphinViewActionHandler::toggleSortHiddenLast() -{ - const bool sortHiddenLast = m_currentView->sortHiddenLast(); - m_currentView->setSortHiddenLast(!sortHiddenLast); -} - void DolphinViewActionHandler::slotSortOrderChanged(Qt::SortOrder order) { QAction* descending = m_actionCollection->action(QStringLiteral("descending")); @@ -544,11 +530,6 @@ void DolphinViewActionHandler::slotSortFoldersFirstChanged(bool foldersFirst) m_actionCollection->action(QStringLiteral("folders_first"))->setChecked(foldersFirst); } -void DolphinViewActionHandler::slotSortHiddenLastChanged(bool hiddenLast) -{ - m_actionCollection->action(QStringLiteral("hidden_last"))->setChecked(hiddenLast); -} - void DolphinViewActionHandler::toggleVisibleRole(QAction* action) { Q_EMIT actionBeingHandled(); diff --git a/src/views/dolphinviewactionhandler.h b/src/views/dolphinviewactionhandler.h index 6e9b4a432..3f73153ea 100644 --- a/src/views/dolphinviewactionhandler.h +++ b/src/views/dolphinviewactionhandler.h @@ -136,16 +136,6 @@ private Q_SLOTS: */ void slotSortFoldersFirstChanged(bool foldersFirst); - /** - * Switches between showing hidden files last or not. - */ - void toggleSortHiddenLast(); - - /** - * Updates the state of the 'Sort Hidden Last' action. - */ - void slotSortHiddenLastChanged(bool hiddenLast); - /** * Updates the state of the 'Sort by' actions. */ diff --git a/src/views/viewproperties.cpp b/src/views/viewproperties.cpp index 4b8d017c7..1f73f3b33 100644 --- a/src/views/viewproperties.cpp +++ b/src/views/viewproperties.cpp @@ -245,19 +245,6 @@ bool ViewProperties::sortFoldersFirst() const return m_node->sortFoldersFirst(); } -void ViewProperties::setSortHiddenLast(bool hiddenLast) -{ - if (m_node->sortHiddenLast() != hiddenLast) { - m_node->setSortHiddenLast(hiddenLast); - update(); - } -} - -bool ViewProperties::sortHiddenLast() const -{ - return m_node->sortHiddenLast(); -} - void ViewProperties::setVisibleRoles(const QList& roles) { if (roles == visibleRoles()) { @@ -366,7 +353,6 @@ void ViewProperties::setDirProperties(const ViewProperties& props) setSortRole(props.sortRole()); setSortOrder(props.sortOrder()); setSortFoldersFirst(props.sortFoldersFirst()); - setSortHiddenLast(props.sortHiddenLast()); setVisibleRoles(props.visibleRoles()); setHeaderColumnWidths(props.headerColumnWidths()); m_node->setVersion(props.m_node->version()); diff --git a/src/views/viewproperties.h b/src/views/viewproperties.h index def8aa738..a9daafc87 100644 --- a/src/views/viewproperties.h +++ b/src/views/viewproperties.h @@ -62,9 +62,6 @@ public: void setSortFoldersFirst(bool foldersFirst); bool sortFoldersFirst() const; - void setSortHiddenLast(bool hiddenLast); - bool sortHiddenLast() const; - /** * Sets the additional information for the current set view-mode. * Note that the additional-info property is the only property where -- cgit v1.3 From 63e12c0cdf4e3437b95b9c50e5791dbf97183687 Mon Sep 17 00:00:00 2001 From: Nate Graham Date: Fri, 6 Aug 2021 10:46:33 -0600 Subject: Revert "Show hidden files and folders last" This reverts commit 996e430b62075c5b69571f141456dbe5f2956679. The accompanying feature to make the behavior configurable and disable it by default was reverted in 21.08, so we need to revert the feature itself as well and only ship it in 21.12, to avoid changing people's setting back and forth, which is often not well-received. --- src/kitemviews/kfileitemmodel.cpp | 9 ------ src/tests/kfileitemmodeltest.cpp | 62 ++++----------------------------------- 2 files changed, 5 insertions(+), 66 deletions(-) (limited to 'src/kitemviews/kfileitemmodel.cpp') diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index e03ec7c0e..5b3c06d83 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -1733,15 +1733,6 @@ bool KFileItemModel::lessThan(const ItemData* a, const ItemData* b, const QColla } } - // Show hidden files and folders last - const bool isHiddenA = a->item.isHidden(); - const bool isHiddenB = b->item.isHidden(); - if (isHiddenA && !isHiddenB) { - return false; - } else if (!isHiddenA && isHiddenB) { - return true; - } - if (m_sortDirsFirst || (DetailsModeSettings::directorySizeCount() && m_sortRole == SizeRole)) { const bool isDirA = a->item.isDir(); const bool isDirB = b->item.isDir(); diff --git a/src/tests/kfileitemmodeltest.cpp b/src/tests/kfileitemmodeltest.cpp index f527fbc61..558a00ab5 100644 --- a/src/tests/kfileitemmodeltest.cpp +++ b/src/tests/kfileitemmodeltest.cpp @@ -812,19 +812,6 @@ void KFileItemModelTest::testRemoveFilteredExpandedItems() void KFileItemModelTest::testSorting() { - // testDir structure is as follows - // ./ - // ├─ a - // ├─ b - // ├─ c/ - // │ ├─ c-2/ - // │ │ ├─ c-3 - // │ ├─ c-1 - // ├─ d - // ├─ e - // ├─ .f - // ├─ .g/ - QSignalSpy itemsInsertedSpy(m_model, &KFileItemModel::itemsInserted); QSignalSpy itemsMovedSpy(m_model, &KFileItemModel::itemsMoved); QVERIFY(itemsMovedSpy.isValid()); @@ -849,27 +836,17 @@ void KFileItemModelTest::testSorting() m_testDir->createFile("d", "The largest file in this directory", now.addDays(-1)); m_testDir->createFile("e", "An even larger file", now.addDays(-4)); m_testDir->createFile(".f"); - m_testDir->createDir(".g"); m_model->loadDirectory(m_testDir->url()); QVERIFY(itemsInsertedSpy.wait()); - QCOMPARE(itemsInsertedSpy.count(), 1); - KItemRangeList itemRangeList = itemsInsertedSpy.takeFirst().at(0).value(); - QCOMPARE(itemRangeList, KItemRangeList() << KItemRange(0, 5)); int index = m_model->index(QUrl(m_testDir->url().url() + "/c")); m_model->setExpanded(index, true); QVERIFY(itemsInsertedSpy.wait()); - QCOMPARE(itemsInsertedSpy.count(), 1); - itemRangeList = itemsInsertedSpy.takeFirst().at(0).value(); - QCOMPARE(itemRangeList, KItemRangeList() << KItemRange(1, 2)); index = m_model->index(QUrl(m_testDir->url().url() + "/c/c-2")); m_model->setExpanded(index, true); QVERIFY(itemsInsertedSpy.wait()); - QCOMPARE(itemsInsertedSpy.count(), 1); - itemRangeList = itemsInsertedSpy.takeFirst().at(0).value(); - QCOMPARE(itemRangeList, KItemRangeList() << KItemRange(2, 1)); // Default: Sort by Name, ascending QCOMPARE(m_model->sortRole(), QByteArray("text")); @@ -965,36 +942,7 @@ void KFileItemModelTest::testSorting() QCOMPARE(itemsMovedSpy.first().at(0).value(), KItemRange(4, 4)); QCOMPARE(itemsMovedSpy.takeFirst().at(1).value >(), QList() << 7 << 6 << 5 << 4); - // 'Show Hidden Files' enabled - m_model->setShowHiddenFiles(true); - QVERIFY(m_model->showHiddenFiles()); - QCOMPARE(itemsInModel(), QStringList() << "c" << "c-2" << "c-3" << "c-1" << "d" << "e" << "b" << "a" << ".g" << ".f"); - QCOMPARE(itemsMovedSpy.count(), 0); - QCOMPARE(itemsInsertedSpy.count(), 1); - QCOMPARE(itemsInsertedSpy.takeFirst().at(0).value(), KItemRangeList() << KItemRange(8, 2)); - - // Sort by Name - m_model->setSortRole("text"); - QCOMPARE(itemsInModel(), QStringList() << "c" << "c-2" << "c-3" << "c-1" << "e" << "d" << "b" << "a" << ".g" << ".f"); - QCOMPARE(itemsMovedSpy.count(), 1); - QCOMPARE(itemsMovedSpy.first().at(0).value(), KItemRange(4, 2)); - QCOMPARE(itemsMovedSpy.takeFirst().at(1).value >(), QList() << 5 << 4); - - // Sort ascending - m_model->setSortOrder(Qt::AscendingOrder); - QCOMPARE(itemsInModel(), QStringList() << "c" << "c-2" << "c-3" << "c-1" << "a" << "b" << "d" << "e" << ".g" << ".f"); - QCOMPARE(itemsMovedSpy.count(), 1); - QCOMPARE(itemsMovedSpy.first().at(0).value(), KItemRange(4, 4)); - QCOMPARE(itemsMovedSpy.takeFirst().at(1).value >(), QList() << 7 << 6 << 5 << 4); - - // 'Sort Folders First' disabled - m_model->setSortDirectoriesFirst(false); - QVERIFY(!m_model->sortDirectoriesFirst()); - QCOMPARE(itemsInModel(), QStringList() << "a" << "b" << "c" << "c-1" << "c-2" << "c-3" << "d" << "e" << ".f" << ".g"); - QCOMPARE(itemsMovedSpy.count(), 1); - QCOMPARE(itemsMovedSpy.first().at(0).value(), KItemRange(0, 10)); - QCOMPARE(itemsMovedSpy.takeFirst().at(1).value >(), QList() << 2 << 4 << 5 << 3 << 0 << 1 << 6 << 7 << 9 << 8); - + // TODO: Sort by other roles; show/hide hidden files } void KFileItemModelTest::testIndexForKeyboardSearch() @@ -1151,7 +1099,7 @@ void KFileItemModelTest::testRemoveHiddenItems() m_model->setShowHiddenFiles(true); m_model->loadDirectory(m_testDir->url()); QVERIFY(itemsInsertedSpy.wait()); - QCOMPARE(itemsInModel(), QStringList() << "c" << "d" << "h" << "i" << ".a" << ".b" <<".f" << ".g"); + QCOMPARE(itemsInModel(), QStringList() << ".a" << ".b" << "c" << "d" <<".f" << ".g" << "h" << "i"); QCOMPARE(itemsInsertedSpy.count(), 1); QCOMPARE(itemsRemovedSpy.count(), 0); KItemRangeList itemRangeList = itemsInsertedSpy.takeFirst().at(0).value(); @@ -1162,14 +1110,14 @@ void KFileItemModelTest::testRemoveHiddenItems() QCOMPARE(itemsInsertedSpy.count(), 0); QCOMPARE(itemsRemovedSpy.count(), 1); itemRangeList = itemsRemovedSpy.takeFirst().at(0).value(); - QCOMPARE(itemRangeList, KItemRangeList() << KItemRange(4, 4)); + QCOMPARE(itemRangeList, KItemRangeList() << KItemRange(0, 2) << KItemRange(4, 2)); m_model->setShowHiddenFiles(true); - QCOMPARE(itemsInModel(), QStringList() << "c" << "d" << "h" << "i" << ".a" << ".b" <<".f" << ".g"); + QCOMPARE(itemsInModel(), QStringList() << ".a" << ".b" << "c" << "d" <<".f" << ".g" << "h" << "i"); QCOMPARE(itemsInsertedSpy.count(), 1); QCOMPARE(itemsRemovedSpy.count(), 0); itemRangeList = itemsInsertedSpy.takeFirst().at(0).value(); - QCOMPARE(itemRangeList, KItemRangeList() << KItemRange(4, 4)); + QCOMPARE(itemRangeList, KItemRangeList() << KItemRange(0, 2) << KItemRange(2, 2)); m_model->clear(); QCOMPARE(itemsInModel(), QStringList()); -- cgit v1.3 From 127e446ba09c1294f57e50bcfc574b6c8a311370 Mon Sep 17 00:00:00 2001 From: Eugene Popov Date: Sun, 29 Aug 2021 17:35:35 +0000 Subject: Filter the items that have changed --- src/kitemviews/kfileitemmodel.cpp | 41 +++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) (limited to 'src/kitemviews/kfileitemmodel.cpp') diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index 5b3c06d83..ffd933d25 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -1089,32 +1089,46 @@ void KFileItemModel::slotRefreshItems(const QList >& QSet changedRoles; KFileItemList changedFiles; + // Contains the indexes of the currently visible items + // that should get hidden and hence moved to m_filteredItems. + QVector newFilteredIndexes; + + // Contains currently hidden items that should + // get visible and hence removed from m_filteredItems + QList newVisibleItems; + QListIterator > it(items); while (it.hasNext()) { const QPair& itemPair = it.next(); const KFileItem& oldItem = itemPair.first; const KFileItem& newItem = itemPair.second; const int indexForItem = index(oldItem); + const bool newItemMatchesFilter = m_filter.matches(newItem); if (indexForItem >= 0) { m_itemData[indexForItem]->item = newItem; // Keep old values as long as possible if they could not retrieved synchronously yet. // The update of the values will be done asynchronously by KFileItemModelRolesUpdater. - QHashIterator it(retrieveData(newItem, m_itemData.at(indexForItem)->parent)); - QHash& values = m_itemData[indexForItem]->values; + ItemData * const itemData = m_itemData.at(indexForItem); + QHashIterator it(retrieveData(newItem, itemData->parent)); while (it.hasNext()) { it.next(); const QByteArray& role = it.key(); - if (values.value(role) != it.value()) { - values.insert(role, it.value()); + if (itemData->values.value(role) != it.value()) { + itemData->values.insert(role, it.value()); changedRoles.insert(role); } } m_items.remove(oldItem.url()); - m_items.insert(newItem.url(), indexForItem); - changedFiles.append(newItem); - indexes.append(indexForItem); + if (newItemMatchesFilter) { + m_items.insert(newItem.url(), indexForItem); + changedFiles.append(newItem); + indexes.append(indexForItem); + } else { + newFilteredIndexes.append(indexForItem); + m_filteredItems.insert(newItem, itemData); + } } else { // Check if 'oldItem' is one of the filtered items. QHash::iterator it = m_filteredItems.find(oldItem); @@ -1127,11 +1141,22 @@ void KFileItemModel::slotRefreshItems(const QList >& itemData->values.clear(); m_filteredItems.erase(it); - m_filteredItems.insert(newItem, itemData); + if (newItemMatchesFilter) { + newVisibleItems.append(itemData); + } else { + m_filteredItems.insert(newItem, itemData); + } } } } + // Hide items, previously visible that should get hidden + const KItemRangeList removedRanges = KItemRangeList::fromSortedContainer(newFilteredIndexes); + removeItems(removedRanges, KeepItemData); + + // Show previously hidden items that should get visible + insertItems(newVisibleItems); + // If the changed items have been created recently, they might not be in m_items yet. // In that case, the list 'indexes' might be empty. if (indexes.isEmpty()) { -- cgit v1.3