diff options
| author | Peter Penz <[email protected]> | 2011-08-29 20:45:46 +0200 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2011-08-29 20:46:37 +0200 |
| commit | a087d77ba7cbf0cc1e0f56a149bb75e1e14e573d (patch) | |
| tree | 6bdb60c3ced31b7e5541d5829cc6da1faedab75a | |
| parent | 1b88652b8569118dff1a0e61d85326e8c5d91d51 (diff) | |
Fix context-menu selection issue
When requesting a context menu above a non-selected item, the
existing selection must be cleared.
| -rw-r--r-- | src/kitemviews/kitemlistcontroller.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index e1277bdd4..09c7d8d46 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -307,6 +307,11 @@ bool KItemListController::mousePressEvent(QGraphicsSceneMouseEvent* event, const if (controlPressed) { m_selectionManager->setSelected(m_pressedIndex, 1, KItemListSelectionManager::Toggle); m_selectionManager->beginAnchoredSelection(m_pressedIndex); + } else if (event->buttons() & Qt::RightButton) { + // Only clear the selection if a context menu is requested above a non-selected item + if (!m_selectionManager->selectedItems().contains(m_pressedIndex)) { + m_selectionManager->setSelectedItems(QSet<int>() << m_pressedIndex); + } } else if (!shiftPressed || !m_selectionManager->isAnchoredSelectionActive()) { // Select the pressed item and start a new anchored selection m_selectionManager->setSelected(m_pressedIndex, 1, KItemListSelectionManager::Select); @@ -321,6 +326,10 @@ bool KItemListController::mousePressEvent(QGraphicsSceneMouseEvent* event, const return true; } else { + if (event->buttons() & Qt::RightButton) { + m_selectionManager->clearSelection(); + } + KItemListRubberBand* rubberBand = m_view->rubberBand(); QPointF startPos = m_pressedMousePos; if (m_view->scrollOrientation() == Qt::Vertical) { @@ -392,7 +401,7 @@ bool KItemListController::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, con const bool shiftOrControlPressed = event->modifiers() & Qt::ShiftModifier || event->modifiers() & Qt::ControlModifier; - bool clearSelection = !shiftOrControlPressed && !m_dragging && !(event->button() == Qt::RightButton); + bool clearSelection = !shiftOrControlPressed && !m_dragging && event->button() != Qt::RightButton; KItemListRubberBand* rubberBand = m_view->rubberBand(); if (rubberBand->isActive()) { |
