diff --git a/src/gui/kernel/qplatforminputcontext.cpp b/src/gui/kernel/qplatforminputcontext.cpp index 4cf7acea2ed..9d3ee4acb6b 100644 --- a/src/gui/kernel/qplatforminputcontext.cpp +++ b/src/gui/kernel/qplatforminputcontext.cpp @@ -47,6 +47,11 @@ QT_BEGIN_NAMESPACE QPlatformInputContext::QPlatformInputContext() : QObject(*(new QPlatformInputContextPrivate)) { + // Delay initialization of cached input direction + // until super class has finished constructing. + QMetaObject::invokeMethod(this, [this]{ + m_inputDirection = inputDirection(); + }, Qt::QueuedConnection); } /*! @@ -198,6 +203,9 @@ QLocale QPlatformInputContext::locale() const void QPlatformInputContext::emitLocaleChanged() { emit QGuiApplication::inputMethod()->localeChanged(); + + // Changing the locale might have updated the input direction + emitInputDirectionChanged(inputDirection()); } Qt::LayoutDirection QPlatformInputContext::inputDirection() const @@ -207,7 +215,11 @@ Qt::LayoutDirection QPlatformInputContext::inputDirection() const void QPlatformInputContext::emitInputDirectionChanged(Qt::LayoutDirection newDirection) { + if (newDirection == m_inputDirection) + return; + emit QGuiApplication::inputMethod()->inputDirectionChanged(newDirection); + m_inputDirection = newDirection; } /*! diff --git a/src/gui/kernel/qplatforminputcontext.h b/src/gui/kernel/qplatforminputcontext.h index 05d7497f9cc..481f97a065b 100644 --- a/src/gui/kernel/qplatforminputcontext.h +++ b/src/gui/kernel/qplatforminputcontext.h @@ -72,6 +72,8 @@ private: friend class QGuiApplication; friend class QGuiApplicationPrivate; friend class QInputMethod; + + Qt::LayoutDirection m_inputDirection; }; QT_END_NAMESPACE