┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2011-08-20 23:26:07 +0200
committerPeter Penz <[email protected]>2011-08-20 23:27:23 +0200
commit6a228cdbd94ae8cb8215d53187328c54cbc050bd (patch)
tree30adae6e5844a917db0e640ece53e9f039ba75e7
parent2f0ceedae088158b8af24a5e94500a7d1c0edecb (diff)
Fix rubberband-issue in combination with Shift- and Control-key
The old selection must be remembered before starting the rubberband selection, otherwise it would not be possible anymore to deselect items that have been selected by the rubberband itself.
-rw-r--r--src/kitemviews/kitemlistcontroller.cpp19
-rw-r--r--src/kitemviews/kitemlistcontroller.h9
2 files changed, 20 insertions, 8 deletions
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
index 92a14b23d..beb5b5c0a 100644
--- a/src/kitemviews/kitemlistcontroller.cpp
+++ b/src/kitemviews/kitemlistcontroller.cpp
@@ -38,7 +38,8 @@ KItemListController::KItemListController(QObject* parent) :
m_model(0),
m_view(0),
m_selectionManager(new KItemListSelectionManager(this)),
- m_pressedIndex(-1)
+ m_pressedIndex(-1),
+ m_oldSelection()
{
}
@@ -294,6 +295,8 @@ bool KItemListController::mousePressEvent(QGraphicsSceneMouseEvent* event, const
} else {
startPos.rx() += m_view->offset();
}
+
+ m_oldSelection = m_selectionManager->selectedItems();
rubberBand->setStartPosition(startPos);
rubberBand->setEndPosition(startPos);
rubberBand->setActive(true);
@@ -338,6 +341,7 @@ bool KItemListController::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, con
if (rubberBand->isActive()) {
disconnect(rubberBand, SIGNAL(endPositionChanged(QPointF,QPointF)), this, SLOT(slotRubberBandChanged()));
rubberBand->setActive(false);
+ m_oldSelection.clear();
m_pressedIndex = -1;
return false;
}
@@ -577,14 +581,13 @@ void KItemListController::slotRubberBandChanged()
rubberBandRect.translate(-m_view->offset(), 0);
}
- QSet<int> previousSelectedItems;
- if (m_selectionManager->hasSelection()) {
- // Don't clear the current selection in case if the user pressed the
- // Shift- or Control-key during the rubberband selection
+ if (!m_oldSelection.isEmpty()) {
+ // Clear the old selection that was available before the rubberband has
+ // been activated in case if no Shift- or Control-key are pressed
const bool shiftOrControlPressed = QApplication::keyboardModifiers() & Qt::ShiftModifier ||
QApplication::keyboardModifiers() & Qt::ControlModifier;
- if (shiftOrControlPressed) {
- previousSelectedItems = m_selectionManager->selectedItems();
+ if (!shiftOrControlPressed) {
+ m_oldSelection.clear();
}
}
@@ -631,7 +634,7 @@ void KItemListController::slotRubberBandChanged()
}
} while (!selectionFinished);
- m_selectionManager->setSelectedItems(selectedItems + previousSelectedItems);
+ m_selectionManager->setSelectedItems(selectedItems + m_oldSelection);
}
#include "kitemlistcontroller.moc"
diff --git a/src/kitemviews/kitemlistcontroller.h b/src/kitemviews/kitemlistcontroller.h
index 49442c643..90850bae1 100644
--- a/src/kitemviews/kitemlistcontroller.h
+++ b/src/kitemviews/kitemlistcontroller.h
@@ -26,6 +26,7 @@
#include <libdolphin_export.h>
#include <QObject>
+#include <QSet>
class KItemModelBase;
class KItemListSelectionManager;
@@ -134,6 +135,14 @@ private:
KItemListView* m_view;
KItemListSelectionManager* m_selectionManager;
int m_pressedIndex;
+
+ /**
+ * When starting a rubberband selection during a Shift- or Control-key has been
+ * pressed the current selection should never be deleted. To be able to restore
+ * the current selection it is remembered in m_oldSelection before
+ * rubberband gets activated.
+ */
+ QSet<int> m_oldSelection;
};
#endif