diff options
author | Bernd Weimer <bernd.weimer@pelagicore.com> | 2015-03-23 11:53:16 +0100 |
---|---|---|
committer | Bernd Weimer <bernd.weimer@pelagicore.com> | 2015-08-25 07:04:19 +0000 |
commit | b46fe39d940712c5d401e731e171a7ccfadfe648 (patch) | |
tree | 26d38ae1f51bc20bdaefa2220e885ed076d6b414 /src/gui/kernel/qplatforminputcontextfactory.cpp | |
parent | 3accdb8086cca78fc006cfbe0d8b6eb66ebcc307 (diff) |
Harmonize input context selection
Input context selection works differently across platforms. On some
platforms it is not possible to request a specific context at all
(e.g. Wayland). This will be unified, depending on the environment
variable "QT_IM_MODULE", you will get:
- null: default (platform) context, if defined (otherwise no context)
- empty: no context
- set: set one, if it exists and is valid (otherwise no context)
[ChangeLog][Platform Specific Changes] Haromnized input context selection.
QT_IM_MODULE environment variable will be taken into account.
Change-Id: Ic8f826fbc6ace25941cd19b9b086943e848fbe01
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Reviewed-by: Nedim Hadzic <nedim.hadzic@pelagicore.com>
Diffstat (limited to 'src/gui/kernel/qplatforminputcontextfactory.cpp')
-rw-r--r-- | src/gui/kernel/qplatforminputcontextfactory.cpp | 44 |
1 files changed, 14 insertions, 30 deletions
diff --git a/src/gui/kernel/qplatforminputcontextfactory.cpp b/src/gui/kernel/qplatforminputcontextfactory.cpp index a7660e76ae..9d55b778ce 100644 --- a/src/gui/kernel/qplatforminputcontextfactory.cpp +++ b/src/gui/kernel/qplatforminputcontextfactory.cpp @@ -56,48 +56,32 @@ QStringList QPlatformInputContextFactory::keys() #endif } -QPlatformInputContext *QPlatformInputContextFactory::create(const QString& key) +QString QPlatformInputContextFactory::requested() { - QStringList paramList = key.split(QLatin1Char(':')); - const QString platform = paramList.takeFirst().toLower(); - -#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) - if (QPlatformInputContext *ret = qLoadPlugin1<QPlatformInputContext, QPlatformInputContextPlugin>(loader(), platform, paramList)) - return ret; -#endif - return 0; + QByteArray env = qgetenv("QT_IM_MODULE"); + return env.isNull() ? QString() : QString::fromLocal8Bit(env); } -QPlatformInputContext *QPlatformInputContextFactory::create() +QPlatformInputContext *QPlatformInputContextFactory::create(const QString& key) { - QPlatformInputContext *ic = 0; - - QString icString = QString::fromLatin1(qgetenv("QT_IM_MODULE")); - - if (icString == QLatin1String("none")) - return 0; +#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) + QStringList paramList = key.split(QLatin1Char(':')); + const QString platform = paramList.takeFirst().toLower(); - ic = create(icString); + QPlatformInputContext *ic = qLoadPlugin1<QPlatformInputContext, QPlatformInputContextPlugin> + (loader(), platform, paramList); if (ic && ic->isValid()) return ic; delete ic; - ic = 0; - - QStringList k = keys(); - for (int i = 0; i < k.size(); ++i) { - if (k.at(i) == icString) - continue; - ic = create(k.at(i)); - if (ic && ic->isValid()) - return ic; - delete ic; - ic = 0; - } - +#endif return 0; } +QPlatformInputContext *QPlatformInputContextFactory::create() +{ + return create(requested()); +} QT_END_NAMESPACE |