summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/itemviews/qabstractitemview.cpp5
-rw-r--r--tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp42
2 files changed, 45 insertions, 2 deletions
diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp
index 77e683643e..b2dc614b2b 100644
--- a/src/widgets/itemviews/qabstractitemview.cpp
+++ b/src/widgets/itemviews/qabstractitemview.cpp
@@ -2771,8 +2771,9 @@ void QAbstractItemView::closeEditor(QWidget *editor, QAbstractItemDelegate::EndE
}
// The EndEditHint part
- QItemSelectionModel::SelectionFlags flags = QItemSelectionModel::ClearAndSelect
- | d->selectionBehaviorFlags();
+ QItemSelectionModel::SelectionFlags flags = QItemSelectionModel::NoUpdate;
+ if (d->selectionMode != NoSelection)
+ flags = QItemSelectionModel::ClearAndSelect | d->selectionBehaviorFlags();
switch (hint) {
case QAbstractItemDelegate::EditNextItem: {
QModelIndex index = moveCursor(MoveNext, Qt::NoModifier);
diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
index b8875c638d..1005bf6b3c 100644
--- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
+++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
@@ -247,6 +247,7 @@ private slots:
void testNoActivateOnDisabledItem();
void testFocusPolicy_data();
void testFocusPolicy();
+ void QTBUG31411_noSelection();
};
class MyAbstractItemDelegate : public QAbstractItemDelegate
@@ -1782,5 +1783,46 @@ void tst_QAbstractItemView::testFocusPolicy()
QVERIFY(!qApp->focusWidget());
}
+Q_DECLARE_METATYPE(QItemSelection)
+void tst_QAbstractItemView::QTBUG31411_noSelection()
+{
+ QWidget window;
+ QTableView *table = new QTableView(&window);
+ table->setSelectionMode(QAbstractItemView::NoSelection);
+ QVBoxLayout *layout = new QVBoxLayout(&window);
+ layout->addWidget(table);
+
+ QStandardItemModel model;
+ model.setRowCount(10);
+ model.setColumnCount(10);
+ table->setModel(&model);
+ table->setCurrentIndex(model.index(1, 1));
+
+ centerOnScreen(&window);
+ moveCursorAway(&window);
+
+ window.show();
+ QApplication::setActiveWindow(&window);
+ QVERIFY(QTest::qWaitForWindowActive(&window));
+
+ qRegisterMetaType<QItemSelection>();
+ QSignalSpy selectionChangeSpy(table->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)));
+ QVERIFY(selectionChangeSpy.isValid());
+
+ QPoint clickpos = table->visualRect(model.index(1, 1)).center();
+ QTest::mouseClick(table->viewport(), Qt::LeftButton, Qt::NoModifier, clickpos);
+ QTest::mouseDClick(table->viewport(), Qt::LeftButton, Qt::NoModifier, clickpos);
+
+ QPointer<QWidget> editor1 = qApp->focusWidget();
+ QVERIFY(editor1);
+ QTest::keyClick(editor1, Qt::Key_Tab, Qt::NoModifier);
+
+ QPointer<QWidget> editor2 = qApp->focusWidget();
+ QVERIFY(editor2);
+ QTest::keyClick(editor2, Qt::Key_Escape, Qt::NoModifier);
+
+ QCOMPARE(selectionChangeSpy.count(), 0);
+}
+
QTEST_MAIN(tst_QAbstractItemView)
#include "tst_qabstractitemview.moc"