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.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/gui/kernel/qinputmethod.cpp b/src/gui/kernel/qinputmethod.cpp
index 365b088840..a319529442 100644
--- a/src/gui/kernel/qinputmethod.cpp
+++ b/src/gui/kernel/qinputmethod.cpp
@@ -390,15 +390,29 @@ void QInputMethod::invokeAction(Action a, int cursorPosition)
ic->invokeAction(a, cursorPosition);
}
+static inline bool platformSupportsHiddenText()
+{
+ const QPlatformInputContext *inputContext = QGuiApplicationPrivate::platformIntegration()->inputContext();
+ return inputContext && inputContext->hasCapability(QPlatformInputContext::HiddenTextCapability);
+}
+
bool QInputMethodPrivate::objectAcceptsInputMethod(QObject *object)
{
bool enabled = false;
if (object) {
- QInputMethodQueryEvent query(Qt::ImEnabled);
+ // If the platform does not support hidden text, query the hints
+ // in addition and disable in case of ImhHiddenText.
+ static const bool supportsHiddenText = platformSupportsHiddenText();
+ QInputMethodQueryEvent query(supportsHiddenText
+ ? Qt::InputMethodQueries(Qt::ImEnabled)
+ : Qt::InputMethodQueries(Qt::ImEnabled | Qt::ImHints));
QGuiApplication::sendEvent(object, &query);
enabled = query.value(Qt::ImEnabled).toBool();
+ if (enabled && !supportsHiddenText
+ && Qt::InputMethodHints(query.value(Qt::ImHints).toInt()).testFlag(Qt::ImhHiddenText)) {
+ enabled = false;
+ }
}
-
return enabled;
}