diff options
-rw-r--r-- | src/widgets/kernel/qwidget.cpp | 4 | ||||
-rw-r--r-- | tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp | 39 |
2 files changed, 42 insertions, 1 deletions
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 362a8f4e55..29083b0670 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -7807,7 +7807,7 @@ bool QWidget::event(QEvent *event) { Q_D(QWidget); - // ignore mouse events when disabled + // ignore mouse and key events when disabled if (!isEnabled()) { switch(event->type()) { case QEvent::TabletPress: @@ -7822,6 +7822,8 @@ bool QWidget::event(QEvent *event) case QEvent::TouchEnd: case QEvent::TouchCancel: case QEvent::ContextMenu: + case QEvent::KeyPress: + case QEvent::KeyRelease: #ifndef QT_NO_WHEELEVENT case QEvent::Wheel: #endif diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index 167bf28fc3..07ed38fa61 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -174,6 +174,8 @@ private slots: void palettePropagation(); void palettePropagation2(); void enabledPropagation(); + void ignoreKeyEventsWhenDisabled_QTBUG27417(); + void properTabHandlingWhenDisabled_QTBUG27417(); void popupEnterLeave(); #ifndef QT_NO_DRAGANDDROP void acceptDropsPropagation(); @@ -1053,6 +1055,43 @@ void tst_QWidget::enabledPropagation() QVERIFY( !grandChildWidget->isEnabled() ); } +void tst_QWidget::ignoreKeyEventsWhenDisabled_QTBUG27417() +{ + QLineEdit lineEdit; + lineEdit.setDisabled(true); + lineEdit.show(); + QTest::keyClick(&lineEdit, Qt::Key_A); + QTRY_VERIFY(lineEdit.text().isEmpty()); +} + +void tst_QWidget::properTabHandlingWhenDisabled_QTBUG27417() +{ + QWidget widget; + QVBoxLayout *layout = new QVBoxLayout(); + QLineEdit *lineEdit = new QLineEdit(); + layout->addWidget(lineEdit); + QLineEdit *lineEdit2 = new QLineEdit(); + layout->addWidget(lineEdit2); + QLineEdit *lineEdit3 = new QLineEdit(); + layout->addWidget(lineEdit3); + widget.setLayout(layout); + widget.show(); + + lineEdit->setFocus(); + QTRY_VERIFY(lineEdit->hasFocus()); + QTest::keyClick(&widget, Qt::Key_Tab); + QTRY_VERIFY(lineEdit2->hasFocus()); + QTest::keyClick(&widget, Qt::Key_Tab); + QTRY_VERIFY(lineEdit3->hasFocus()); + + lineEdit2->setDisabled(true); + lineEdit->setFocus(); + QTRY_VERIFY(lineEdit->hasFocus()); + QTest::keyClick(&widget, Qt::Key_Tab); + QTRY_VERIFY(!lineEdit2->hasFocus()); + QVERIFY(lineEdit3->hasFocus()); +} + // Drag'n drop disabled in this build. #ifndef QT_NO_DRAGANDDROP void tst_QWidget::acceptDropsPropagation() |