diff options
Diffstat (limited to 'src/gui/kernel/qinputmethod.cpp')
-rw-r--r-- | src/gui/kernel/qinputmethod.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/gui/kernel/qinputmethod.cpp b/src/gui/kernel/qinputmethod.cpp index b9ba7310d5..c443a47cac 100644 --- a/src/gui/kernel/qinputmethod.cpp +++ b/src/gui/kernel/qinputmethod.cpp @@ -43,6 +43,7 @@ #include <private/qinputmethod_p.h> #include <qguiapplication.h> #include <qtimer.h> +#include <private/qplatforminputcontext_qpa_p.h> QT_BEGIN_NAMESPACE @@ -295,8 +296,12 @@ void QInputMethod::update(Qt::InputMethodQueries queries) { Q_D(QInputMethod); - if (queries & Qt::ImEnabled) - d->q_checkFocusObject(qApp->focusObject()); + if (queries & Qt::ImEnabled) { + QObject *focus = qApp->focusObject(); + bool enabled = d->objectAcceptsInputMethod(focus); + setInputItem(enabled ? focus : 0); + QPlatformInputContextPrivate::setInputMethodAccepted(enabled); + } QPlatformInputContext *ic = d->platformInputContext(); if (ic) @@ -361,14 +366,20 @@ void QInputMethodPrivate::q_connectFocusObject() void QInputMethodPrivate::q_checkFocusObject(QObject *object) { Q_Q(QInputMethod); + bool enabled = objectAcceptsInputMethod(object); + q->setInputItem(enabled ? object : 0); +} +bool QInputMethodPrivate::objectAcceptsInputMethod(QObject *object) +{ bool enabled = false; if (object) { QInputMethodQueryEvent query(Qt::ImEnabled); QGuiApplication::sendEvent(object, &query); enabled = query.value(Qt::ImEnabled).toBool(); } - q->setInputItem(enabled ? object : 0); + + return enabled; } QT_END_NAMESPACE |