From fbfaf6a7bc7575c1f4c1fa589ffe97a6127e58bd Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Date: Wed, 8 Jul 2015 16:29:19 +0200
Subject: [PATCH] Disable creation of plugin unless QT_IM_MODULE is set to
 "qtvirtualkeyboard".

In order to use it, the environment variable must be explicitly set.
Otherwise, the plugin is pulled and activated by any Qt application.
The behavior now matches the documentation.

Task-number: QTRD-3660
Task-number: QTBUG-47099
Change-Id: Iaa09c7646bfe6c4de898ba03940af3de2fb3d4a7
Reviewed-by: Jarkko Koivikko <jarkko.koivikko@code-q.fi>
Reviewed-by: Mitch Curtis <mitch.curtis@digia.com>
---
 src/virtualkeyboard/plugin.cpp | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/virtualkeyboard/plugin.cpp b/src/virtualkeyboard/plugin.cpp
index 31b66481..db079f88 100644
--- a/src/virtualkeyboard/plugin.cpp
+++ b/src/virtualkeyboard/plugin.cpp
@@ -43,6 +43,9 @@
 #include "declarativesettings.h"
 #include "declarativetrace.h"
 
+static const char pluginName[] = "qtvirtualkeyboard";
+static const char inputMethodEnvVarName[] = "QT_IM_MODULE";
+
 static QPointer<PlatformInputContext> platformInputContext;
 
 static QObject *createInputContextModule(QQmlEngine *engine, QJSEngine *scriptEngine)
@@ -72,7 +75,7 @@ static QObject *createInputContextModule(QQmlEngine *engine, QJSEngine *scriptEn
 
 QStringList PlatformInputContextPlugin::keys() const
 {
-    return QStringList(QStringLiteral("qtvirtualkeyboard"));
+    return QStringList(QLatin1String(pluginName));
 }
 
 QPlatformInputContext *PlatformInputContextPlugin::create(const QString &system, const QStringList &paramList)
@@ -81,6 +84,10 @@ QPlatformInputContext *PlatformInputContextPlugin::create(const QString &system,
     Q_INIT_RESOURCE(content);
     Q_INIT_RESOURCE(default_style);
     Q_INIT_RESOURCE(retro_style);
+
+    if (!qEnvironmentVariableIsSet(inputMethodEnvVarName) || qgetenv(inputMethodEnvVarName) != pluginName)
+        return Q_NULLPTR;
+
     qmlRegisterSingletonType<DeclarativeInputContext>("QtQuick.Enterprise.VirtualKeyboard", 1, 0, "InputContext", createInputContextModule);
     qmlRegisterUncreatableType<DeclarativeInputEngine>("QtQuick.Enterprise.VirtualKeyboard", 1, 0, "InputEngine", "Cannot create input method engine");
     qmlRegisterUncreatableType<DeclarativeShiftHandler>("QtQuick.Enterprise.VirtualKeyboard", 1, 0, "ShiftHandler", "Cannot create shift handler");
-- 
GitLab