diff options
-rw-r--r-- | src/widgets/graphicsview/qgraphicsitem.cpp | 4 | ||||
-rw-r--r-- | src/widgets/kernel/qwidget.cpp | 15 | ||||
-rw-r--r-- | src/widgets/widgets/qlineedit.cpp | 2 | ||||
-rw-r--r-- | src/widgets/widgets/qplaintextedit.cpp | 2 | ||||
-rw-r--r-- | src/widgets/widgets/qtextedit.cpp | 2 | ||||
-rw-r--r-- | tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp | 6 |
6 files changed, 21 insertions, 10 deletions
diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp index f2d2339c97..9008b54d84 100644 --- a/src/widgets/graphicsview/qgraphicsitem.cpp +++ b/src/widgets/graphicsview/qgraphicsitem.cpp @@ -10274,7 +10274,9 @@ void QGraphicsTextItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) QVariant QGraphicsTextItem::inputMethodQuery(Qt::InputMethodQuery query) const { QVariant v; - if (query == Qt::ImHints) + if (query == Qt::ImEnabled) + return isEnabled(); + else if (query == Qt::ImHints) v = int(inputMethodHints()); else if (dd->control) v = dd->control->inputMethodQuery(query, QVariant()); diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 1160471194..f0da19f9c8 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -8898,15 +8898,12 @@ bool QWidget::event(QEvent *event) QVariant v = inputMethodQuery(q); if (q == Qt::ImEnabled && !v.isValid() && isEnabled()) { // Qt:ImEnabled was added in Qt 5.3. So not all widgets support it, even - // if they implement IM otherwise (and override inputMethodQuery()). - // So for legacy reasons, we need to check by other means if IM is supported when - // Qt::ImEnabled is not implemented (the query returns an invalid QVariant). - // Since QWidget implements inputMethodQuery(), and return valid values for - // some of the IM properties, we cannot just query for Qt::ImQueryAll. - // Instead we assume that if a widget supports IM, it will implement - // Qt::ImSurroundingText (which is not implemented by QWidget). - const bool imEnabledFallback = inputMethodQuery(Qt::ImSurroundingText).isValid(); - v = QVariant(imEnabledFallback); + // if they implement IM otherwise (by overriding inputMethodQuery()). Instead + // they set the widget attribute Qt::WA_InputMethodEnabled. But this attribute + // will only be set if the widget supports IM _and_ is not read-only. So for + // read-only widgets, not all IM features will be supported when ImEnabled is + // not implemented explicitly (e.g selection handles for read-only widgets on iOS). + v = QVariant(testAttribute(Qt::WA_InputMethodEnabled)); } query->setValue(q, v); } diff --git a/src/widgets/widgets/qlineedit.cpp b/src/widgets/widgets/qlineedit.cpp index bd20f9963d..b87d7e09cc 100644 --- a/src/widgets/widgets/qlineedit.cpp +++ b/src/widgets/widgets/qlineedit.cpp @@ -1811,6 +1811,8 @@ QVariant QLineEdit::inputMethodQuery(Qt::InputMethodQuery property, QVariant arg { Q_D(const QLineEdit); switch(property) { + case Qt::ImEnabled: + return isEnabled(); case Qt::ImCursorRectangle: return d->cursorRect(); case Qt::ImAnchorRectangle: diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp index 3fb8debaa5..cd9889e9ff 100644 --- a/src/widgets/widgets/qplaintextedit.cpp +++ b/src/widgets/widgets/qplaintextedit.cpp @@ -2206,6 +2206,8 @@ QVariant QPlainTextEdit::inputMethodQuery(Qt::InputMethodQuery query, QVariant a { Q_D(const QPlainTextEdit); switch (query) { + case Qt::ImEnabled: + return isEnabled(); 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 de20e0120a..b3a8963431 100644 --- a/src/widgets/widgets/qtextedit.cpp +++ b/src/widgets/widgets/qtextedit.cpp @@ -1803,6 +1803,8 @@ QVariant QTextEdit::inputMethodQuery(Qt::InputMethodQuery query, QVariant argume { Q_D(const QTextEdit); switch (query) { + case Qt::ImEnabled: + return isEnabled(); 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 397a1cf8df..85bc1e4b76 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -11011,6 +11011,12 @@ void tst_QWidget::imEnabledNotImplemented() imEnabled = QApplication::inputMethod()->queryFocusObject(Qt::ImEnabled, QVariant()); QVERIFY(imEnabled.isValid()); QVERIFY(imEnabled.toBool()); + + // ...even if it's read-only + edit.setReadOnly(true); + imEnabled = QApplication::inputMethod()->queryFocusObject(Qt::ImEnabled, QVariant()); + QVERIFY(imEnabled.isValid()); + QVERIFY(imEnabled.toBool()); } #ifdef QT_BUILD_INTERNAL |