diff options
author | Thorbjørn Lund Martsum <tmartsum@gmail.com> | 2012-11-04 18:17:14 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-01-02 16:09:14 +0100 |
commit | 28a21d98ef8d880a6dd86ee19dd803424bb5eae1 (patch) | |
tree | 6dab15e4a76a3d4b8854b7c36ff90143cfa9c530 /src/widgets | |
parent | 0f014fcde824d191eef003cd52ea70485499d845 (diff) |
QAbstractItemView - allow deselect in single selection mode.
This patch allows single selection to be cleared with the normal
control modifier. This affects e.g QTreeView and QListView.
Task-number: QTBUG-8836
Change-Id: I7fd50b987acc3552b36657409568192763257536
Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
Diffstat (limited to 'src/widgets')
-rw-r--r-- | src/widgets/itemviews/qabstractitemview.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp index 57c3b44aaa..ab98bf6438 100644 --- a/src/widgets/itemviews/qabstractitemview.cpp +++ b/src/widgets/itemviews/qabstractitemview.cpp @@ -3816,13 +3816,31 @@ QItemSelectionModel::SelectionFlags QAbstractItemView::selectionCommand(const QM const QEvent *event) const { Q_D(const QAbstractItemView); + Qt::KeyboardModifiers keyModifiers = Qt::NoModifier; + if (event) { + switch (event->type()) { + case QEvent::MouseButtonDblClick: + case QEvent::MouseButtonPress: + case QEvent::MouseButtonRelease: + case QEvent::MouseMove: + case QEvent::KeyPress: + case QEvent::KeyRelease: + keyModifiers = (static_cast<const QInputEvent*>(event))->modifiers(); + break; + default: + keyModifiers = QApplication::keyboardModifiers(); + } + } switch (d->selectionMode) { case NoSelection: // Never update selection model return QItemSelectionModel::NoUpdate; case SingleSelection: // ClearAndSelect on valid index otherwise NoUpdate if (event && event->type() == QEvent::MouseButtonRelease) return QItemSelectionModel::NoUpdate; - return QItemSelectionModel::ClearAndSelect|d->selectionBehaviorFlags(); + if ((keyModifiers & Qt::ControlModifier) && d->selectionModel->isSelected(index)) + return QItemSelectionModel::Deselect | d->selectionBehaviorFlags(); + else + return QItemSelectionModel::ClearAndSelect | d->selectionBehaviorFlags(); case MultiSelection: return d->multiSelectionCommand(index, event); case ExtendedSelection: |