iOS: Detect when inputMethodAccepted() is out of sync with focus object
The GraphicsView stack still seems to have issues emitting focusObject change signals when the focus object changes inside the item hierarchy. To be on the safe side we use our own view of whether or not IM is enabled, and try to detect and warn if we find a case where the two are out of sync. Change-Id: I9fde896ea14ea5b65784723110887e06453edbd4 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
This commit is contained in:
parent
9c8943a862
commit
30d9498329
@ -82,6 +82,7 @@ public:
|
||||
void commit();
|
||||
|
||||
const ImeState &imeState() { return m_imeState; };
|
||||
bool inputMethodAccepted() const;
|
||||
|
||||
bool isReloadingInputViewsFromUpdate() const { return m_isReloadingInputViewsFromUpdate; }
|
||||
|
||||
|
@ -486,6 +486,26 @@ void QIOSInputContext::update(Qt::InputMethodQueries updatedProperties)
|
||||
}
|
||||
}
|
||||
|
||||
bool QIOSInputContext::inputMethodAccepted() const
|
||||
{
|
||||
// The IM enablement state is based on the last call to update()
|
||||
bool lastKnownImEnablementState = m_imeState.currentState.value(Qt::ImEnabled).toBool();
|
||||
|
||||
#if !defined(QT_NO_DEBUG)
|
||||
// QPlatformInputContext keeps a cached value of the current IM enablement state that is
|
||||
// updated by QGuiApplication when the current focus object changes, or by QInputMethod's
|
||||
// update() function. If the focus object changes, but the change is not propagated as
|
||||
// a signal to QGuiApplication due to bugs in the widget/graphicsview/qml stack, we'll
|
||||
// end up with a stale value for QPlatformInputContext::inputMethodAccepted(). To be on
|
||||
// the safe side we always use our own cached value to decide if IM is enabled, and try
|
||||
// to detect the case where the two values are out of sync.
|
||||
if (lastKnownImEnablementState != QPlatformInputContext::inputMethodAccepted())
|
||||
qWarning("QPlatformInputContext::inputMethodAccepted() does not match actual focus object IM enablement!");
|
||||
#endif
|
||||
|
||||
return lastKnownImEnablementState;
|
||||
}
|
||||
|
||||
/*!
|
||||
Called by the input item to reset the input method state.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user