diff options
Diffstat (limited to 'src/gui/kernel/qplatforminputcontextfactory.cpp')
-rw-r--r-- | src/gui/kernel/qplatforminputcontextfactory.cpp | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/src/gui/kernel/qplatforminputcontextfactory.cpp b/src/gui/kernel/qplatforminputcontextfactory.cpp index bc1e0cc78f..933d990f7c 100644 --- a/src/gui/kernel/qplatforminputcontextfactory.cpp +++ b/src/gui/kernel/qplatforminputcontextfactory.cpp @@ -15,23 +15,46 @@ QT_BEGIN_NAMESPACE using namespace Qt::StringLiterals; #if QT_CONFIG(settings) -Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, +Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, icLoader, (QPlatformInputContextFactoryInterface_iid, "/platforminputcontexts"_L1, Qt::CaseInsensitive)) #endif QStringList QPlatformInputContextFactory::keys() { #if QT_CONFIG(settings) - return loader()->keyMap().values(); + return icLoader()->keyMap().values(); #else return QStringList(); #endif } -QString QPlatformInputContextFactory::requested() +QStringList QPlatformInputContextFactory::requested() { - QByteArray env = qgetenv("QT_IM_MODULE"); - return env.isNull() ? QString() : QString::fromLocal8Bit(env); + QStringList imList; + QByteArray env = qgetenv("QT_IM_MODULES"); + + if (!env.isEmpty()) + imList = QString::fromLocal8Bit(env).split(QChar::fromLatin1(';'), Qt::SkipEmptyParts); + + if (!imList.isEmpty()) + return imList; + + env = qgetenv("QT_IM_MODULE"); + if (!env.isEmpty()) + imList = {QString::fromLocal8Bit(env)}; + + return imList; +} + +QPlatformInputContext *QPlatformInputContextFactory::create(const QStringList& keys) +{ + for (const QString &key : keys) { + auto plugin = create(key); + if (plugin) + return plugin; + } + + return nullptr; } QPlatformInputContext *QPlatformInputContextFactory::create(const QString& key) @@ -42,7 +65,7 @@ QPlatformInputContext *QPlatformInputContextFactory::create(const QString& key) const QString platform = paramList.takeFirst().toLower(); QPlatformInputContext *ic = qLoadPlugin<QPlatformInputContext, QPlatformInputContextPlugin> - (loader(), platform, paramList); + (icLoader(), platform, paramList); if (ic && ic->isValid()) return ic; |