diff options
author | Mitch Curtis <mitch.curtis@digia.com> | 2013-01-15 11:51:19 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-01-26 21:22:22 +0100 |
commit | 5c5c9c26d299cd230dc48efcaaf3627861efa673 (patch) | |
tree | 3b745c9e54b0bbe1d926116383ac3719ca63c0b6 | |
parent | 9d20f4b6291e9c7cfb493eded15d984ac2a15b49 (diff) |
Don't emit activated on clicking disabled itemview item.
A itemview item with its flags set to Qt::NoItemFlags is considered
disabled, and therefore should not cause the activated signal
to be emitted.
Task-number: QTBUG-20490
Change-Id: If824505c46f4fcadb9265ad6d1e9337f0cee32cf
Reviewed-by: David Faure (KDE) <faure@kde.org>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
-rw-r--r-- | src/widgets/itemviews/qabstractitemview.cpp | 3 | ||||
-rw-r--r-- | tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp | 24 |
2 files changed, 26 insertions, 1 deletions
diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp index 880bdc65dc..fdefeb7bb3 100644 --- a/src/widgets/itemviews/qabstractitemview.cpp +++ b/src/widgets/itemviews/qabstractitemview.cpp @@ -1853,7 +1853,8 @@ void QAbstractItemView::mouseReleaseEvent(QMouseEvent *event) QStyleOptionViewItem option = d->viewOptions(); if (d->pressedAlreadySelected) option.state |= QStyle::State_Selected; - if (style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick, &option, this)) + if ((model()->flags(index) & Qt::ItemIsEnabled) + && style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick, &option, this)) emit activated(index); } } diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp index 14624f42ad..f0731eb3a6 100644 --- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp +++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp @@ -236,6 +236,7 @@ private slots: void testClickedSignal(); void testChangeEditorState(); void deselectInSingleSelection(); + void testNoActivateOnDisabledItem(); }; class MyAbstractItemDelegate : public QAbstractItemDelegate @@ -1642,5 +1643,28 @@ void tst_QAbstractItemView::deselectInSingleSelection() QCOMPARE(view.selectionModel()->selectedIndexes().count(), 1); } +void tst_QAbstractItemView::testNoActivateOnDisabledItem() +{ + QTreeView treeView; + QStandardItemModel model(1, 1); + QStandardItem *item = new QStandardItem("item"); + model.setItem(0, 0, item); + item->setFlags(Qt::NoItemFlags); + treeView.setModel(&model); + treeView.show(); + + QApplication::setActiveWindow(&treeView); + QVERIFY(QTest::qWaitForWindowActive(&treeView)); + + QSignalSpy activatedSpy(&treeView, SIGNAL(activated(QModelIndex))); + + // Ensure clicking on a disabled item doesn't emit itemActivated. + QModelIndex itemIndex = treeView.model()->index(0, 0); + QPoint clickPos = treeView.visualRect(itemIndex).center(); + QTest::mouseClick(treeView.viewport(), Qt::LeftButton, 0, clickPos); + + QCOMPARE(activatedSpy.count(), 0); +} + QTEST_MAIN(tst_QAbstractItemView) #include "tst_qabstractitemview.moc" |