diff options
author | Gabriel de Dietrich <gabriel.dietrich-de@nokia.com> | 2009-12-14 13:09:36 (GMT) |
---|---|---|
committer | Gabriel de Dietrich <gabriel.dietrich-de@nokia.com> | 2009-12-15 10:03:30 (GMT) |
commit | d6cd6c59dae36b2890baae98f0bf94b23e5509da (patch) | |
tree | 84ee23490fac7ab40f2788095b463b35e6d07b55 /src/gui/itemviews | |
parent | c5ae0ffd52ee3f2964404bf85dee55712fb6bd8c (diff) | |
download | Qt-d6cd6c59dae36b2890baae98f0bf94b23e5509da.zip Qt-d6cd6c59dae36b2890baae98f0bf94b23e5509da.tar.gz Qt-d6cd6c59dae36b2890baae98f0bf94b23e5509da.tar.bz2 |
Clicking on a selected item wouldn't reset the selection anymore.
Before commit 88ecc8c8250505129ccff2660c60412996e2fd85, this case was handled
during the mouse release event, but was responsible for selections being made
twice sometimes. We now check whether a selection actually happened during
the mouse press event. If not, we will try to select again during the mouse
release event. Auto-test included.
Reviewed-by: Thierry
Task-number: QTBUG-6753
Diffstat (limited to 'src/gui/itemviews')
-rw-r--r-- | src/gui/itemviews/qabstractitemview.cpp | 9 | ||||
-rw-r--r-- | src/gui/itemviews/qabstractitemview_p.h | 1 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/gui/itemviews/qabstractitemview.cpp b/src/gui/itemviews/qabstractitemview.cpp index 4a450b7..47b5f66 100644 --- a/src/gui/itemviews/qabstractitemview.cpp +++ b/src/gui/itemviews/qabstractitemview.cpp @@ -70,6 +70,7 @@ QAbstractItemViewPrivate::QAbstractItemViewPrivate() itemDelegate(0), selectionModel(0), ctrlDragSelectionFlag(QItemSelectionModel::NoUpdate), + noSelectionOnMousePress(false), selectionMode(QAbstractItemView::ExtendedSelection), selectionBehavior(QAbstractItemView::SelectItems), currentlyCommittingEditor(0), @@ -1622,6 +1623,7 @@ void QAbstractItemView::mousePressEvent(QMouseEvent *event) d->pressedIndex = index; d->pressedModifiers = event->modifiers(); QItemSelectionModel::SelectionFlags command = selectionCommand(index, event); + d->noSelectionOnMousePress = command == QItemSelectionModel::NoUpdate || !index.isValid(); QPoint offset = d->offset(); if ((command & QItemSelectionModel::Current) == 0) d->pressedPosition = pos + offset; @@ -1760,9 +1762,10 @@ void QAbstractItemView::mouseReleaseEvent(QMouseEvent *event) d->ctrlDragSelectionFlag = QItemSelectionModel::NoUpdate; - //in the case the user presses on no item we might decide to clear the selection - if (d->selectionModel && !index.isValid()) - d->selectionModel->select(QModelIndex(), selectionCommand(index, event)); + if (d->selectionModel && d->noSelectionOnMousePress) { + d->noSelectionOnMousePress = false; + d->selectionModel->select(index, selectionCommand(index, event)); + } setState(NoState); diff --git a/src/gui/itemviews/qabstractitemview_p.h b/src/gui/itemviews/qabstractitemview_p.h index 0b5cfbe..7fc6780 100644 --- a/src/gui/itemviews/qabstractitemview_p.h +++ b/src/gui/itemviews/qabstractitemview_p.h @@ -347,6 +347,7 @@ public: QMap<int, QPointer<QAbstractItemDelegate> > columnDelegates; QPointer<QItemSelectionModel> selectionModel; QItemSelectionModel::SelectionFlag ctrlDragSelectionFlag; + bool noSelectionOnMousePress; QAbstractItemView::SelectionMode selectionMode; QAbstractItemView::SelectionBehavior selectionBehavior; |