summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel/qinputmethod.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/kernel/qinputmethod.cpp')
-rw-r--r--src/gui/kernel/qinputmethod.cpp17
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