┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/kitemlistselectionmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/kitemviews/kitemlistselectionmanager.cpp')
-rw-r--r--src/kitemviews/kitemlistselectionmanager.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/kitemviews/kitemlistselectionmanager.cpp b/src/kitemviews/kitemlistselectionmanager.cpp
index ee8ba929e..cdc6dbc7d 100644
--- a/src/kitemviews/kitemlistselectionmanager.cpp
+++ b/src/kitemviews/kitemlistselectionmanager.cpp
@@ -187,6 +187,20 @@ void KItemListSelectionManager::itemsInserted(const KItemRangeList& itemRanges)
setCurrentItem(m_currentItem + inc);
}
+ // Update the anchor item
+ if (m_anchorItem < 0) {
+ setAnchorItem(0);
+ } else {
+ int inc = 0;
+ foreach (const KItemRange& itemRange, itemRanges) {
+ if (m_anchorItem < itemRange.index) {
+ break;
+ }
+ inc += itemRange.count;
+ }
+ setAnchorItem(m_anchorItem + inc);
+ }
+
// Update the selections
if (!m_selectedItems.isEmpty()) {
const QSet<int> previous = m_selectedItems;
@@ -231,6 +245,22 @@ void KItemListSelectionManager::itemsRemoved(const KItemRangeList& itemRanges)
setCurrentItem(currentItem);
}
+ // Update the anchor item
+ if (m_anchorItem >= 0) {
+ int anchorItem = m_anchorItem;
+ foreach (const KItemRange& itemRange, itemRanges) {
+ if (anchorItem < itemRange.index) {
+ break;
+ }
+ if (anchorItem >= itemRange.index + itemRange.count) {
+ anchorItem -= itemRange.count;
+ } else if (anchorItem >= m_model->count()) {
+ anchorItem = m_model->count() - 1;
+ }
+ }
+ setAnchorItem(anchorItem);
+ }
+
// Update the selections
if (!m_selectedItems.isEmpty()) {
const QSet<int> previous = m_selectedItems;