diff options
author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2021-11-03 08:56:04 +0100 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2021-11-05 14:52:25 +0100 |
commit | e5ebc28764979f00f1ce3aeb8b2d44b5cadb93c5 (patch) | |
tree | 2014adb5280eae8bf5616be5999d3899da4f9a15 /tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp | |
parent | c04b5e0c8c6669b2c4879911e096492df3387911 (diff) |
QAIV: Reset double-click flag in mousePressEvent
Amends 17c1ebf8bfd254ff75cc55e335d1c1fb01da547f, which introduced logic
that recognizes double clicks to avoid duplicate clicked() emits. If a
slot connected to doubleClicked opens a dialog, then the release-event
will not be seen by the item view, leaving the flag incorrectly set and
preventing the next clicked signal.
Fixes: QTBUG-97853
Pick-to: 6.2 5.15
Change-Id: Iced83e8c66a763672f522265435dc52a745227e4
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
Diffstat (limited to 'tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp')
-rw-r--r-- | tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp index 547d120bca..5c52439859 100644 --- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp +++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp @@ -49,6 +49,7 @@ #include <QStringListModel> #include <QStyledItemDelegate> #include <QTableWidget> +#include <QTimer> #include <QTreeWidget> #include <QTest> #include <QVBoxLayout> @@ -159,6 +160,7 @@ private slots: void dragSelectAfterNewPress(); void dragWithSecondClick_data(); void dragWithSecondClick(); + void clickAfterDoubleClick(); void selectionCommand_data(); void selectionCommand(); void mouseSelection_data(); @@ -2763,6 +2765,42 @@ void tst_QAbstractItemView::dragWithSecondClick() QTest::mouseRelease(view->viewport(), Qt::LeftButton, Qt::NoModifier, dragTo); } +void tst_QAbstractItemView::clickAfterDoubleClick() +{ + QTableWidget view(5, 5); + view.horizontalHeader()->hide(); + view.verticalHeader()->hide(); + view.setEditTriggers(QAbstractItemView::NoEditTriggers); + view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); + const QModelIndex index = view.model()->index(1, 1); + QVERIFY(index.isValid()); + const QPoint clickPoint = view.visualRect(index).center(); + + // must use the QWindow overloads so that modality is respected + QWindow *window = view.window()->windowHandle(); + int clickCount = 0; + + connect(&view, &QAbstractItemView::doubleClicked, [&]{ + QDialog dialog(&view); + dialog.setModal(true); + QTimer::singleShot(0, [&]{ dialog.close(); }); + dialog.exec(); + }); + connect(&view, &QAbstractItemView::clicked, [&]{ + ++clickCount; + }); + + QTest::mouseClick(window, Qt::LeftButton, {}, clickPoint); + QCOMPARE(clickCount, 1); + // generates a click followed by a double click; double click opens + // dialog that eats second release + QTest::mouseDClick(window, Qt::LeftButton, {}, clickPoint); + QCOMPARE(clickCount, 2); + QTest::mouseClick(window, Qt::LeftButton, {}, clickPoint); + QCOMPARE(clickCount, 3); +} + void tst_QAbstractItemView::selectionCommand_data() { QTest::addColumn<QAbstractItemView::SelectionMode>("selectionMode"); |