┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2011-08-29 20:45:46 +0200
committerPeter Penz <[email protected]>2011-08-29 20:46:37 +0200
commita087d77ba7cbf0cc1e0f56a149bb75e1e14e573d (patch)
tree6bdb60c3ced31b7e5541d5829cc6da1faedab75a /src
parent1b88652b8569118dff1a0e61d85326e8c5d91d51 (diff)
Fix context-menu selection issue
When requesting a context menu above a non-selected item, the existing selection must be cleared.
Diffstat (limited to 'src')
-rw-r--r--src/kitemviews/kitemlistcontroller.cpp11
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()) {