diff --git a/src/kitemviews/kitemlistselectionmanager.cpp b/src/kitemviews/kitemlistselectionmanager.cpp index a03e8172c0..9aaf22f585 100644 --- a/src/kitemviews/kitemlistselectionmanager.cpp +++ b/src/kitemviews/kitemlistselectionmanager.cpp @@ -104,6 +104,7 @@ void KItemListSelectionManager::setSelected(int index, int count, SelectionMode return; } + endAnchoredSelection(); const QSet previous = selectedItems(); count = qMin(count, m_model->count() - index); diff --git a/src/tests/kitemlistselectionmanagertest.cpp b/src/tests/kitemlistselectionmanagertest.cpp index 7f79332a39..5a3ffd55c7 100644 --- a/src/tests/kitemlistselectionmanagertest.cpp +++ b/src/tests/kitemlistselectionmanagertest.cpp @@ -315,7 +315,8 @@ namespace { NoChange, InsertItems, RemoveItems, - EndAnchoredSelection + EndAnchoredSelection, + ToggleSelected }; } @@ -360,6 +361,13 @@ void KItemListSelectionManagerTest::testChangeSelection_data() << QSet() << EndAnchoredSelection << KItemRangeList() << QSet(); + + QTest::newRow("Toggle selection") + << (QSet() << 1 << 3 << 4) + << 6 << 8 + << (QSet() << 1 << 3 << 4 << 6 << 7 << 8) + << ToggleSelected << (KItemRangeList() << KItemRange(0, 10)) + << (QSet() << 0 << 2 << 5 << 9); } void KItemListSelectionManagerTest::testChangeSelection() @@ -423,6 +431,11 @@ void KItemListSelectionManagerTest::testChangeSelection() m_selectionManager->endAnchoredSelection(); QVERIFY(!m_selectionManager->isAnchoredSelectionActive()); break; + case ToggleSelected: + foreach(const KItemRange& range, changedItems) { + m_selectionManager->setSelected(range.index, range.count, KItemListSelectionManager::Toggle); + } + break; case NoChange: break; } diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index f429529de1..de54b9bb64 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -529,23 +529,13 @@ void DolphinView::selectAll() void DolphinView::invertSelection() { - KItemListSelectionManager* selectionManager = m_container->controller()->selectionManager(); - const QSet selectedItems = selectionManager->selectedItems(); - QSet invertedSelectedItems; - - const int maxIndex = fileItemModel()->count() - 1; - for (int i = 0; i <= maxIndex; ++i) { - if (!selectedItems.contains(i)) { - invertedSelectedItems.insert(i); - } - } - - selectionManager->setSelectedItems(invertedSelectedItems); + KItemListSelectionManager* selectionManager = m_container->controller()->selectionManager(); + selectionManager->setSelected(0, fileItemModel()->count(), KItemListSelectionManager::Toggle); } void DolphinView::clearSelection() { - //m_viewAccessor.itemView()->clearSelection(); + m_container->controller()->selectionManager()->clearSelection(); } void DolphinView::renameSelectedItems()