diff options
Diffstat (limited to 'src/kitemviews')
| -rw-r--r-- | src/kitemviews/kitemlistselectionmanager.cpp | 20 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistselectionmanager.h | 1 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistview.cpp | 9 |
3 files changed, 22 insertions, 8 deletions
diff --git a/src/kitemviews/kitemlistselectionmanager.cpp b/src/kitemviews/kitemlistselectionmanager.cpp index 131ee46e6..fb279796f 100644 --- a/src/kitemviews/kitemlistselectionmanager.cpp +++ b/src/kitemviews/kitemlistselectionmanager.cpp @@ -95,6 +95,26 @@ QSet<int> KItemListSelectionManager::selectedItems() const return selectedItems; } +bool KItemListSelectionManager::isSelected(int index) const +{ + if (m_selectedItems.contains(index)) { + return true; + } + + if (m_isAnchoredSelectionActive && m_anchorItem != m_currentItem) { + Q_ASSERT(m_anchorItem >= 0); + Q_ASSERT(m_currentItem >= 0); + const int from = qMin(m_anchorItem, m_currentItem); + const int to = qMax(m_anchorItem, m_currentItem); + + if (from <= index && index <= to) { + return true; + } + } + + return false; +} + bool KItemListSelectionManager::hasSelection() const { return !m_selectedItems.isEmpty() || (m_isAnchoredSelectionActive && m_anchorItem != m_currentItem); diff --git a/src/kitemviews/kitemlistselectionmanager.h b/src/kitemviews/kitemlistselectionmanager.h index a8ef5ca2d..82ae13abb 100644 --- a/src/kitemviews/kitemlistselectionmanager.h +++ b/src/kitemviews/kitemlistselectionmanager.h @@ -54,6 +54,7 @@ public: void setSelectedItems(const QSet<int>& items); QSet<int> selectedItems() const; + bool isSelected(int index) const; bool hasSelection() const; void setSelected(int index, int count = 1, SelectionMode mode = Select); diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index d96cf14ce..ad4221394 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -1393,16 +1393,9 @@ void KItemListView::updateWidgetProperties(KItemListWidget* widget, int index) const KItemListSelectionManager* selectionManager = m_controller->selectionManager(); widget->setCurrent(index == selectionManager->currentItem()); - - if (selectionManager->hasSelection()) { - const QSet<int> selectedItems = selectionManager->selectedItems(); - widget->setSelected(selectedItems.contains(index)); - } else { - widget->setSelected(false); - } + widget->setSelected(selectionManager->isSelected(index)); widget->setHovered(false); - widget->setIndex(index); widget->setData(m_model->data(index)); } |
