summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/kernel/qwidget.cpp4
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp39
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()