diff --git a/src/widgets/widgets/qlineedit.cpp b/src/widgets/widgets/qlineedit.cpp index 201ecd2b69d..8909ac80d9b 100644 --- a/src/widgets/widgets/qlineedit.cpp +++ b/src/widgets/widgets/qlineedit.cpp @@ -1845,7 +1845,7 @@ QVariant QLineEdit::inputMethodQuery(Qt::InputMethodQuery property, QVariant arg Q_D(const QLineEdit); switch(property) { case Qt::ImEnabled: - return isEnabled(); + return isEnabled() && !isReadOnly(); case Qt::ImCursorRectangle: return d->cursorRect(); case Qt::ImAnchorRectangle: diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp index dcba223cb03..305d5a0e056 100644 --- a/src/widgets/widgets/qplaintextedit.cpp +++ b/src/widgets/widgets/qplaintextedit.cpp @@ -2208,7 +2208,7 @@ QVariant QPlainTextEdit::inputMethodQuery(Qt::InputMethodQuery query, QVariant a Q_D(const QPlainTextEdit); switch (query) { case Qt::ImEnabled: - return isEnabled(); + return isEnabled() && !isReadOnly(); case Qt::ImHints: case Qt::ImInputItemClipRectangle: return QWidget::inputMethodQuery(query); diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp index 1a3d0f9e983..c749bed593c 100644 --- a/src/widgets/widgets/qtextedit.cpp +++ b/src/widgets/widgets/qtextedit.cpp @@ -1816,7 +1816,7 @@ QVariant QTextEdit::inputMethodQuery(Qt::InputMethodQuery query, QVariant argume Q_D(const QTextEdit); switch (query) { case Qt::ImEnabled: - return isEnabled(); + return isEnabled() && !isReadOnly(); case Qt::ImHints: case Qt::ImInputItemClipRectangle: return QWidget::inputMethodQuery(query); diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index f7a98e1ef6d..761d341279b 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -11664,11 +11664,12 @@ void tst_QWidget::imEnabledNotImplemented() QVERIFY(imEnabled.isValid()); QVERIFY(imEnabled.toBool()); - // ...even if it's read-only + // ImEnabled should be false when a lineedit is read-only since + // ImEnabled indicates the widget accepts input method _input_. edit.setReadOnly(true); imEnabled = QApplication::inputMethod()->queryFocusObject(Qt::ImEnabled, QVariant()); QVERIFY(imEnabled.isValid()); - QVERIFY(imEnabled.toBool()); + QVERIFY(!imEnabled.toBool()); } #ifdef QT_BUILD_INTERNAL