diff options
author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2023-06-20 11:17:01 +0200 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2023-06-20 15:24:19 +0200 |
commit | 8afe4faf298798783278f992d14fb78cecee9588 (patch) | |
tree | c89127e68af6fbbf733eab789c2a11d186e7183c | |
parent | 0235de994be7e04aca3456f1260b18313dd45b74 (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>
-rw-r--r-- | src/widgets/widgets/qlineedit.cpp | 3 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp | 40 |
2 files changed, 42 insertions, 1 deletions
diff --git a/src/widgets/widgets/qlineedit.cpp b/src/widgets/widgets/qlineedit.cpp index aad75207a1..a193e6d576 100644 --- a/src/widgets/widgets/qlineedit.cpp +++ b/src/widgets/widgets/qlineedit.cpp @@ -1747,12 +1747,13 @@ void QLineEdit::keyPressEvent(QKeyEvent *event) /*! \reimp */ -void QLineEdit::keyReleaseEvent(QKeyEvent *) +void QLineEdit::keyReleaseEvent(QKeyEvent *e) { Q_D(QLineEdit); if (!isReadOnly()) d->handleSoftwareInputPanel(); d->control->updateCursorBlinking(); + QWidget::keyReleaseEvent(e); } /*! 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" |