From efec288f58dc18f6a571bfedf9d19e3fbf12a18f Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Wed, 17 Jan 2018 13:53:19 +0100 Subject: itemviews: When an index widget gets focus, update the current index By ensuring that the current index follows the focus of an index widget, we can ensure that moving the cursor will happen in the way that is expected from the focused widget. Task-number: QTBUG-27793 Change-Id: Ia36891a94ce41c7d12fba678de23a6f3b69374ae Reviewed-by: Richard Moe Gustavsen Reviewed-by: Christian Ehrlicher --- .../qabstractitemview/tst_qabstractitemview.cpp | 53 ++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'tests/auto/widgets/itemviews') diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp index f6723ceba4..e99ed8f2f4 100644 --- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp +++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp @@ -147,6 +147,8 @@ private slots: void testClearModelInClickedSignal(); void inputMethodEnabled_data(); void inputMethodEnabled(); + void currentFollowsIndexWidget_data(); + void currentFollowsIndexWidget(); }; class MyAbstractItemDelegate : public QAbstractItemDelegate @@ -2390,5 +2392,56 @@ void tst_QAbstractItemView::inputMethodEnabled() QCOMPARE(view->testAttribute(Qt::WA_InputMethodEnabled), result); } +void tst_QAbstractItemView::currentFollowsIndexWidget_data() +{ + QTest::addColumn("viewType"); + + QList widgets; + widgets << "QListView" << "QTreeView" << "QTableView"; + for (const QByteArray &widget : qAsConst(widgets)) + QTest::newRow(widget) << widget; +} + +void tst_QAbstractItemView::currentFollowsIndexWidget() +{ + QFETCH(QByteArray, viewType); + + QScopedPointer view; + if (viewType == "QListView") + view.reset(new QListView()); + else if (viewType == "QTableView") + view.reset(new QTableView()); + else if (viewType == "QTreeView") + view.reset(new QTreeView()); + else + QVERIFY(0); + + centerOnScreen(view.data()); + view->show(); + QVERIFY(QTest::qWaitForWindowExposed(view.data())); + + QStandardItemModel *model = new QStandardItemModel(view.data()); + QStandardItem *item1 = new QStandardItem("first item"); + item1->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + model->appendRow(item1); + + QStandardItem *item2 = new QStandardItem("test item"); + item2->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + model->appendRow(item2); + + view->setModel(model); + QLineEdit *lineEdit1 = new QLineEdit; + QLineEdit *lineEdit2 = new QLineEdit; + view->setIndexWidget(item1->index(), lineEdit1); + view->setIndexWidget(item2->index(), lineEdit2); + + lineEdit2->setFocus(); + QTRY_VERIFY(lineEdit2->hasFocus()); + QCOMPARE(view->currentIndex(), item2->index()); + lineEdit1->setFocus(); + QTRY_VERIFY(lineEdit1->hasFocus()); + QCOMPARE(view->currentIndex(), item1->index()); +} + QTEST_MAIN(tst_QAbstractItemView) #include "tst_qabstractitemview.moc" -- cgit v1.2.3