summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/widgets
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2023-06-20 11:17:01 +0200
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2023-06-20 15:24:19 +0200
commit8afe4faf298798783278f992d14fb78cecee9588 (patch)
treec89127e68af6fbbf733eab789c2a11d186e7183c /tests/auto/widgets/widgets
parent0235de994be7e04aca3456f1260b18313dd45b74 (diff)
QLineEdit: ignore key release events
Amends 55fe46fd58c73a7a22374694a1b45ec2a0e6fdc5. Before that change, key release events were ignored as the QLineEdit::event reimplementation continued to call QWidget::event, and as QLineEdit didn't override keyReleaseEvent, the default implementation in QWidget got called to ignore the event. Restore that behavior by explicitly calling the QWidget implementation after updating QLineEdit-specific states, and add a test case. Fixes: QTBUG-114654 Pick-to: 6.5 6.6 Change-Id: Ic8aa35a1c915b446aece47aaf03ef5cf1884b936 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
Diffstat (limited to 'tests/auto/widgets/widgets')
-rw-r--r--tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
index efd59059d0..0a4b33553d 100644
--- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
+++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
@@ -292,6 +292,8 @@ private slots:
void QTBUG_60319_setInputMaskCheckImSurroundingText();
void testQuickSelectionWithMouse();
void inputRejected();
+ void keyReleasePropagates();
+
protected slots:
void editingFinished();
@@ -5143,5 +5145,43 @@ void tst_QLineEdit::inputRejected()
QCOMPARE(spyInputRejected.size(), 2);
}
+void tst_QLineEdit::keyReleasePropagates()
+{
+ struct Dialog : QWidget
+ {
+ QLineEdit *lineEdit;
+ int releasedKey = {};
+
+ Dialog()
+ {
+ lineEdit = new QLineEdit;
+ QHBoxLayout *hbox = new QHBoxLayout;
+
+ hbox->addWidget(lineEdit);
+ setLayout(hbox);
+ }
+
+ protected:
+ void keyReleaseEvent(QKeyEvent *e)
+ {
+ releasedKey = e->key();
+ }
+ } dialog;
+
+ dialog.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&dialog));
+
+ QTest::keyPress(dialog.lineEdit, Qt::Key_A);
+ QTest::keyRelease(dialog.lineEdit, Qt::Key_A);
+
+ QCOMPARE(dialog.releasedKey, Qt::Key_A);
+
+ QTest::keyPress(dialog.lineEdit, Qt::Key_Alt);
+ QTest::keyRelease(dialog.lineEdit, Qt::Key_Alt);
+
+ QCOMPARE(dialog.releasedKey, Qt::Key_Alt);
+}
+
+
QTEST_MAIN(tst_QLineEdit)
#include "tst_qlineedit.moc"