diff options
| author | Simeon Bird <[email protected]> | 2013-01-15 11:11:11 -0500 |
|---|---|---|
| committer | Simeon Bird <[email protected]> | 2013-01-15 11:11:11 -0500 |
| commit | 72de114a94c9a8d313c517a694be63662a7d10c2 (patch) | |
| tree | 403f753638f2fdbfbc449e818c3290f81854dcfc /src/kitemviews | |
| parent | 4f0cd0b4470a76f649d8d7017672f47d0cae320d (diff) | |
| parent | e7fe50bd3d5a2a1f8427878086ff94deb31091bb (diff) | |
Merge branch 'KDE/4.10'
Diffstat (limited to 'src/kitemviews')
| -rw-r--r-- | src/kitemviews/kitemlistselectionmanager.cpp | 42 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistselectionmanager.h | 7 |
2 files changed, 29 insertions, 20 deletions
diff --git a/src/kitemviews/kitemlistselectionmanager.cpp b/src/kitemviews/kitemlistselectionmanager.cpp index 383914df0..833f7aad0 100644 --- a/src/kitemviews/kitemlistselectionmanager.cpp +++ b/src/kitemviews/kitemlistselectionmanager.cpp @@ -284,27 +284,23 @@ void KItemListSelectionManager::itemsRemoved(const KItemRangeList& itemRanges) { // Store the current selection (needed in the selectionChanged() signal) const QSet<int> previousSelection = selectedItems(); + const int previousCurrent = m_currentItem; // Update the current item - if (m_currentItem >= 0) { - const int previousCurrent = m_currentItem; - // Calling setCurrentItem() would trigger the selectionChanged signal, but we want to - // emit it only once in this function -> change the current item manually and emit currentChanged - m_currentItem = indexAfterRangesRemoving(m_currentItem, itemRanges); - if (m_currentItem != previousCurrent) { - emit currentChanged(m_currentItem, previousCurrent); - } - + m_currentItem = indexAfterRangesRemoving(m_currentItem, itemRanges, DiscardRemovedIndex); + if (m_currentItem != previousCurrent) { + emit currentChanged(m_currentItem, previousCurrent); if (m_currentItem < 0) { - // The current item has been removed. - m_currentItem = qMin(previousCurrent, m_model->count() - 1); + // Calling setCurrentItem() would trigger the selectionChanged signal, but we want to + // emit it only once in this function -> change the current item manually and emit currentChanged + m_currentItem = indexAfterRangesRemoving(previousCurrent, itemRanges, AdjustRemovedIndex); emit currentChanged(m_currentItem, -1); } } // Update the anchor item if (m_anchorItem >= 0) { - m_anchorItem = indexAfterRangesRemoving(m_anchorItem, itemRanges); + m_anchorItem = indexAfterRangesRemoving(m_anchorItem, itemRanges, DiscardRemovedIndex); if (m_anchorItem < 0) { m_isAnchoredSelectionActive = false; } @@ -317,7 +313,7 @@ void KItemListSelectionManager::itemsRemoved(const KItemRangeList& itemRanges) m_selectedItems.reserve(previous.count()); QSetIterator<int> it(previous); while (it.hasNext()) { - const int index = indexAfterRangesRemoving(it.next(), itemRanges); + const int index = indexAfterRangesRemoving(it.next(), itemRanges, DiscardRemovedIndex); if (index >= 0) { m_selectedItems.insert(index); } @@ -377,7 +373,8 @@ void KItemListSelectionManager::itemsMoved(const KItemRange& itemRange, const QL } } -int KItemListSelectionManager::indexAfterRangesRemoving(int index, const KItemRangeList& itemRanges) const +int KItemListSelectionManager::indexAfterRangesRemoving(int index, const KItemRangeList& itemRanges, + const RangesRemovingBehaviour behaviour) const { int dec = 0; foreach (const KItemRange& itemRange, itemRanges) { @@ -385,13 +382,20 @@ int KItemListSelectionManager::indexAfterRangesRemoving(int index, const KItemRa break; } - if (index < itemRange.index + itemRange.count) { + dec += itemRange.count; + + const int firstIndexAfterRange = itemRange.index + itemRange.count; + if (index < firstIndexAfterRange) { // The index is part of the removed range - return -1; + if (behaviour == DiscardRemovedIndex) { + return -1; + } else { + // Use the first item after the range as new index + index = firstIndexAfterRange; + break; + } } - - dec += itemRange.count; } - return index - dec; + return qBound(-1, index - dec, m_model->count() - 1); } #include "kitemlistselectionmanager.moc" diff --git a/src/kitemviews/kitemlistselectionmanager.h b/src/kitemviews/kitemlistselectionmanager.h index 43d0dcb80..c89b8a4b8 100644 --- a/src/kitemviews/kitemlistselectionmanager.h +++ b/src/kitemviews/kitemlistselectionmanager.h @@ -39,6 +39,11 @@ class LIBDOLPHINPRIVATE_EXPORT KItemListSelectionManager : public QObject { Q_OBJECT + enum RangesRemovingBehaviour { + DiscardRemovedIndex, + AdjustRemovedIndex + }; + public: enum SelectionMode { Select, @@ -81,7 +86,7 @@ private: * Helper method for itemsRemoved. Returns the changed index after removing * the given range. If the index is part of the range, -1 will be returned. */ - int indexAfterRangesRemoving(int index, const KItemRangeList& itemRanges) const; + int indexAfterRangesRemoving(int index, const KItemRangeList& itemRanges, const RangesRemovingBehaviour behaviour) const; private: int m_currentItem; |
