]> cloud.milkyroute.net Git - dolphin.git/commitdiff
If an item is clicked to trigger it, clear the rest of the selection
authorFrank Reininghaus <frank78ac@googlemail.com>
Mon, 16 Jan 2012 18:59:54 +0000 (19:59 +0100)
committerFrank Reininghaus <frank78ac@googlemail.com>
Mon, 16 Jan 2012 19:03:49 +0000 (20:03 +0100)
Note that the clearing is not done on mouse press, but on mouse release.
The reason is that there are situations when multiple items are selected
and pressing the mouse on one of them should not clear the selection
(e.g., drag and drop of multiple items).

BUG: 290854
REVIEW: 103703
FIXED-IN: 4.8.0
(cherry picked from commit 9f711b5f2e1d1fd856cd6b033e6adb96f9b46d8a)

src/kitemviews/kitemlistcontroller.cpp
src/kitemviews/kitemlistcontroller.h

index d3365ab85996ce2093992f453aa3741f203e67b4..fedbe61a90ddff63d4b8241229693c66d471bac2 100644 (file)
@@ -43,6 +43,7 @@ KItemListController::KItemListController(QObject* parent) :
     QObject(parent),
     m_singleClickActivation(KGlobalSettings::singleClick()),
     m_selectionTogglePressed(false),
+    m_clearSelectionIfItemsAreNotDragged(false),
     m_selectionBehavior(NoSelection),
     m_model(0),
     m_view(0),
@@ -413,6 +414,13 @@ bool KItemListController::mousePressEvent(QGraphicsSceneMouseEvent* event, const
                                 (!shiftOrControlPressed && !pressedItemAlreadySelected);
     if (clearSelection) {
         m_selectionManager->clearSelection();
+    } else if (pressedItemAlreadySelected && (event->buttons() & Qt::LeftButton)) {
+        // The user might want to start dragging multiple items, but if he clicks the item
+        // in order to trigger it instead, the other selected items must be deselected.
+        // However, we do not know yet what the user is going to do.
+        // -> remember that the user pressed an item which had been selected already and
+        //    clear the selection in mouseReleaseEvent(), unless the items are dragged.
+        m_clearSelectionIfItemsAreNotDragged = true;
     }
 
     if (!shiftPressed) {
@@ -505,7 +513,12 @@ bool KItemListController::mouseMoveEvent(QGraphicsSceneMouseEvent* event, const
                     // done on the mouse-press event, but when using the selection-toggle on a
                     // selected item the dragged item is not selected yet.
                     m_selectionManager->setSelected(m_pressedIndex, 1, KItemListSelectionManager::Toggle);
+                } else {
+                    // A selected item has been clicked to drag all selected items
+                    // -> the selection should not be cleared when the mouse button is released.
+                    m_clearSelectionIfItemsAreNotDragged = false;
                 }
+
                 startDragging();
             }
         }
@@ -579,6 +592,14 @@ bool KItemListController::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, con
     if (index >= 0 && index == m_pressedIndex) {
         // The release event is done above the same item as the press event
 
+        if (m_clearSelectionIfItemsAreNotDragged) {
+            // A selected item has been clicked, but no drag operation has been started
+            // -> clear the rest of the selection.
+            m_selectionManager->clearSelection();
+            m_selectionManager->setSelected(m_pressedIndex, 1, KItemListSelectionManager::Select);
+            m_selectionManager->beginAnchoredSelection(m_pressedIndex);
+        }
+
         if (event->button() & Qt::LeftButton) {
             bool emitItemActivated = true;
             if (m_view->isAboveExpansionToggle(index, pos)) {
@@ -603,6 +624,7 @@ bool KItemListController::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, con
 
     m_pressedMousePos = QPointF();
     m_pressedIndex = -1;
+    m_clearSelectionIfItemsAreNotDragged = false;
     return false;
 }
 
index b7efbde74cc6ef3f67e8fd8ad6c52963120d7f5f..d0e5f72ec7882b11905462467159cd32320c1f99 100644 (file)
@@ -260,6 +260,7 @@ private:
 private:
     bool m_singleClickActivation;
     bool m_selectionTogglePressed;
+    bool m_clearSelectionIfItemsAreNotDragged;
     SelectionBehavior m_selectionBehavior;
     KItemModelBase* m_model;
     KItemListView* m_view;