Merge branch 'KDE/4.13' of git://anongit.kde.org/kde-baseapps into KDE/4.13

This commit is contained in:
Emmanuel Pescosta 2014-04-26 13:08:31 +02:00
commit 5f29eec075
2 changed files with 33 additions and 4 deletions

View file

@ -331,6 +331,11 @@ void KItemListSelectionManager::itemsMoved(const KItemRange& itemRange, const QL
// Store the current selection (needed in the selectionChanged() signal)
const KItemSet previousSelection = selectedItems();
// endAnchoredSelection() adds all items between m_currentItem and
// m_anchorItem to m_selectedItems. They can then be moved
// individually later in this function.
endAnchoredSelection();
// Update the current item
if (m_currentItem >= itemRange.index && m_currentItem < itemRange.index + itemRange.count) {
const int previousCurrentItem = m_currentItem;
@ -342,10 +347,8 @@ void KItemListSelectionManager::itemsMoved(const KItemRange& itemRange, const QL
emit currentChanged(newCurrentItem, previousCurrentItem);
}
// Update the anchor item
if (m_anchorItem >= itemRange.index && m_anchorItem < itemRange.index + itemRange.count) {
m_anchorItem = movedToIndexes.at(m_anchorItem - itemRange.index);
}
// Start a new anchored selection.
beginAnchoredSelection(m_currentItem);
// Update the selections
if (!m_selectedItems.isEmpty()) {

View file

@ -78,6 +78,7 @@ private slots:
void testChangeSelection();
void testDeleteCurrentItem_data();
void testDeleteCurrentItem();
void testAnchoredSelectionAfterMovingItems();
private:
void verifySelectionChange(QSignalSpy& spy, const KItemSet& currentSelection, const KItemSet& previousSelection) const;
@ -413,6 +414,15 @@ void KItemListSelectionManagerTest::testChangeSelection_data()
<< QVariant::fromValue(QList<int>() << 4 << 5 << 2 << 3))
<< (KItemSet() << 0 << 1 << 4 << 5);
QTest::newRow("Move items with active anchored selection")
<< KItemSet()
<< 0 << 3
<< (KItemSet() << 0 << 1 << 2 << 3)
<< MoveItems
<< (QList<QVariant>() << QVariant::fromValue(KItemRange(2, 4))
<< QVariant::fromValue(QList<int>() << 4 << 5 << 2 << 3))
<< (KItemSet() << 0 << 1 << 4 << 5);
// Revert sort order
QTest::newRow("Revert sort order")
<< (KItemSet() << 0 << 1)
@ -519,6 +529,22 @@ void KItemListSelectionManagerTest::testDeleteCurrentItem()
QCOMPARE(m_selectionManager->currentItem(), newCurrentItemIndex);
}
void KItemListSelectionManagerTest::testAnchoredSelectionAfterMovingItems()
{
m_selectionManager->setCurrentItem(4);
m_selectionManager->beginAnchoredSelection(4);
// Reverse the items between 0 and 5.
m_selectionManager->itemsMoved(KItemRange(0, 6), QList<int>() << 5 << 4 << 3 << 2 << 1 << 0);
QCOMPARE(m_selectionManager->currentItem(), 1);
QCOMPARE(m_selectionManager->m_anchorItem, 1);
// Make 2 the current item -> 1 and 2 should be selected.
m_selectionManager->setCurrentItem(2);
QCOMPARE(m_selectionManager->selectedItems(), KItemSet() << 1 << 2);
}
void KItemListSelectionManagerTest::verifySelectionChange(QSignalSpy& spy,
const KItemSet& currentSelection,
const KItemSet& previousSelection) const