aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/quick/enterprise/virtualkeyboard/virtualkeyboard/virtualkeyboard.pro4
-rw-r--r--src/virtualkeyboard/doc/src/build.qdoc35
-rw-r--r--src/virtualkeyboard/plugin.cpp19
-rw-r--r--src/virtualkeyboard/styles/qmldir2
-rw-r--r--src/virtualkeyboard/styles/styles_plugin.cpp4
-rw-r--r--src/virtualkeyboard/styles/styles_plugin.h2
-rw-r--r--src/virtualkeyboard/virtualkeyboard.pro12
-rw-r--r--tests/auto/inputpanel/inputpanel.pro5
8 files changed, 79 insertions, 4 deletions
diff --git a/examples/quick/enterprise/virtualkeyboard/virtualkeyboard/virtualkeyboard.pro b/examples/quick/enterprise/virtualkeyboard/virtualkeyboard/virtualkeyboard.pro
index b3d7d26b..b8396bdf 100644
--- a/examples/quick/enterprise/virtualkeyboard/virtualkeyboard/virtualkeyboard.pro
+++ b/examples/quick/enterprise/virtualkeyboard/virtualkeyboard/virtualkeyboard.pro
@@ -3,6 +3,10 @@ TARGET = virtualkeyboard
QT += qml quick
SOURCES += main.cpp
CONFIG += link_pkgconfig
+static {
+ QT += svg
+ QTPLUGIN += qtvirtualkeyboardplugin
+}
android-no-sdk|!isEmpty(CROSS_COMPILE) {
TARGETPATH = /data/user/qt/virtualkeyboard
} else {
diff --git a/src/virtualkeyboard/doc/src/build.qdoc b/src/virtualkeyboard/doc/src/build.qdoc
index edf4b874..e00f9593 100644
--- a/src/virtualkeyboard/doc/src/build.qdoc
+++ b/src/virtualkeyboard/doc/src/build.qdoc
@@ -171,6 +171,10 @@ the preferred input method to the configuration, e.g., \c CONFIG+="lang-zh_TW zh
system, or if it is built using the local project file. Integration can be
disabled using this option.
\row
+ \li \e static
+ \li Enables static builds of the virtual keyboard
+ \li This option enables \l {Static build}{static builds}.
+\row
\li \e retro-style
\li \e n/a
\li Enables Retro style
@@ -242,6 +246,37 @@ then the dictionary files must also be copied into the
\e src/virtualkeyboard/3rdparty/hunspell/data directory. Furthermore, if Hunspell
sources are used, \e hunspell.pro will be used for all targets.
+\section2 Static builds
+
+The virtual keyboard can be built and linked statically against the application.
+This implies that Qt is also built statically (using the -static option in the
+configure command line).
+
+Static builds of the virtual keyboard are enabled by adding \c CONFIG+=static to
+the qmake command line and then rebuilding.
+
+Some third party modules used by the virtual keyboard are always built as shared
+libraries. These modules are Hunspell and Lipi Toolkit.
+
+\section3 Using the static plugin
+
+The following section should be added to the application project file that uses the
+statically built virtual keyboard.
+
+\code
+static {
+ QTPLUGIN += qtvirtualkeyboardplugin
+ QT += svg
+}
+\endcode
+
+\c QTPLUGIN causes qmake to pull linker dependencies for the virtual keyboard
+plugin. The SVG module is required as an extra dependency for Qt, since the SVG format is
+required by the default styles.
+
+From here on, using a statically built virtual keyboard is no different from the normal
+case.
+
\section1 Deployment
\section2 Desktop Targets
diff --git a/src/virtualkeyboard/plugin.cpp b/src/virtualkeyboard/plugin.cpp
index 683c9e05..db5ab90e 100644
--- a/src/virtualkeyboard/plugin.cpp
+++ b/src/virtualkeyboard/plugin.cpp
@@ -51,6 +51,17 @@
#include "enterkeyactionattachedtype.h"
#include "virtualkeyboardsettings.h"
#include "trace.h"
+#if defined(QT_STATICPLUGIN)
+#include <QtPlugin>
+// This macro is similar to Q_IMPORT_PLUGIN, except it does not
+// register duplicate entries as static plugins.
+// The check is required since the application may already have
+// initialized the plugin by its own dependencies.
+#define Q_VKB_IMPORT_PLUGIN(PLUGIN) \
+ extern const QT_PREPEND_NAMESPACE(QStaticPlugin) qt_static_plugin_##PLUGIN(); \
+ if (!QPluginLoader::staticInstances().contains(qt_static_plugin_##PLUGIN().instance())) \
+ qRegisterStaticPluginFunction(qt_static_plugin_##PLUGIN());
+#endif
using namespace QtVirtualKeyboard;
@@ -108,6 +119,14 @@ QPlatformInputContext *QVirtualKeyboardPlugin::create(const QString &system, con
if (!qEnvironmentVariableIsSet(inputMethodEnvVarName) || qgetenv(inputMethodEnvVarName) != pluginName)
return Q_NULLPTR;
+#if defined(QT_STATICPLUGIN)
+ Q_VKB_IMPORT_PLUGIN(QtQuick2Plugin)
+ Q_VKB_IMPORT_PLUGIN(QtQuick2WindowPlugin)
+ Q_VKB_IMPORT_PLUGIN(QtQuickLayoutsPlugin)
+ Q_VKB_IMPORT_PLUGIN(QmlFolderListModelPlugin)
+ Q_VKB_IMPORT_PLUGIN(QtVirtualKeyboardStylesPlugin)
+#endif
+
qmlRegisterSingletonType<InputContext>(pluginUri, 1, 0, "InputContext", createInputContextModule);
qmlRegisterSingletonType<InputContext>(pluginUri, 2, 0, "InputContext", createInputContextModule);
qmlRegisterUncreatableType<InputEngine>(pluginUri, 1, 0, "InputEngine", QLatin1String("Cannot create input method engine"));
diff --git a/src/virtualkeyboard/styles/qmldir b/src/virtualkeyboard/styles/qmldir
index 1893c556..b3c810d5 100644
--- a/src/virtualkeyboard/styles/qmldir
+++ b/src/virtualkeyboard/styles/qmldir
@@ -1,2 +1,4 @@
module QtQuick.Enterprise.VirtualKeyboard.Styles
plugin qtvirtualkeyboardstylesplugin
+classname QtVirtualKeyboardStylesPlugin
+typeinfo plugins.qmltypes
diff --git a/src/virtualkeyboard/styles/styles_plugin.cpp b/src/virtualkeyboard/styles/styles_plugin.cpp
index 7178dd5e..495eebd2 100644
--- a/src/virtualkeyboard/styles/styles_plugin.cpp
+++ b/src/virtualkeyboard/styles/styles_plugin.cpp
@@ -31,7 +31,7 @@
This module provides styling components for the Qt Virtual Keyboard.
*/
-void StylesPlugin::registerTypes(const char *uri)
+void QtVirtualKeyboardStylesPlugin::registerTypes(const char *uri)
{
Q_INIT_RESOURCE(styles);
const QString path(QStringLiteral("qrc:///QtQuick/Enterprise/VirtualKeyboard/Styles/content/"));
@@ -50,7 +50,7 @@ void StylesPlugin::registerTypes(const char *uri)
qmlRegisterType(QUrl(path + QLatin1String("TraceCanvas.qml")), uri, 2, 0, "TraceCanvas");
}
-void StylesPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
+void QtVirtualKeyboardStylesPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
{
Q_UNUSED(uri)
engine->addImageProvider(QStringLiteral("qtvkbsvg"), new SvgImageProvider());
diff --git a/src/virtualkeyboard/styles/styles_plugin.h b/src/virtualkeyboard/styles/styles_plugin.h
index e7f7d75b..becf7e92 100644
--- a/src/virtualkeyboard/styles/styles_plugin.h
+++ b/src/virtualkeyboard/styles/styles_plugin.h
@@ -24,7 +24,7 @@
#include <QQmlExtensionPlugin>
-class StylesPlugin : public QQmlExtensionPlugin
+class QtVirtualKeyboardStylesPlugin : public QQmlExtensionPlugin
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface/1.0")
diff --git a/src/virtualkeyboard/virtualkeyboard.pro b/src/virtualkeyboard/virtualkeyboard.pro
index d6de55c6..515b1157 100644
--- a/src/virtualkeyboard/virtualkeyboard.pro
+++ b/src/virtualkeyboard/virtualkeyboard.pro
@@ -5,7 +5,7 @@ DATAPATH = $$[QT_INSTALL_DATA]/qtvirtualkeyboard
QMAKE_DOCS = $$PWD/doc/qtvirtualkeyboard.qdocconf
include(doc/doc.pri)
-QT += quick gui gui-private core-private
+QT += qml quick gui gui-private core-private
CONFIG += plugin
win32 {
@@ -203,6 +203,15 @@ build_pass {
!debug_and_release:win32:CONFIG(debug, debug|release): TARGET_SUFFIX = d
}
+static {
+ LIBS += \
+ -L$$[QT_INSTALL_QML]/QtQuick.2 -lqtquick2plugin$$TARGET_SUFFIX \
+ -L$$[QT_INSTALL_QML]/QtQuick/Window.2 -lwindowplugin$$TARGET_SUFFIX \
+ -L$$[QT_INSTALL_QML]/QtQuick/Layouts -lqquicklayoutsplugin$$TARGET_SUFFIX \
+ -L$$[QT_INSTALL_QML]/QtQuick/Enterprise/VirtualKeyboard/Styles -lqtvirtualkeyboardstylesplugin$$TARGET_SUFFIX \
+ -L$$[QT_INSTALL_QML]/Qt/labs/folderlistmodel -lqmlfolderlistmodelplugin$$TARGET_SUFFIX
+}
+
!disable-hunspell {
exists(3rdparty/hunspell/src/hunspell/hunspell.h) {
SOURCES += hunspellinputmethod.cpp hunspellinputmethod_p.cpp hunspellworker.cpp
@@ -334,5 +343,6 @@ include(generateresource.pri)
RESOURCES += $$generate_resource(layouts.qrc, $$LAYOUT_FILES, /QtQuick/Enterprise/VirtualKeyboard)
PLUGIN_TYPE = platforminputcontexts
+PLUGIN_EXTENDS = -
PLUGIN_CLASS_NAME = QVirtualKeyboardPlugin
load(qt_plugin)
diff --git a/tests/auto/inputpanel/inputpanel.pro b/tests/auto/inputpanel/inputpanel.pro
index 789df15a..da447548 100644
--- a/tests/auto/inputpanel/inputpanel.pro
+++ b/tests/auto/inputpanel/inputpanel.pro
@@ -4,6 +4,11 @@ TARGET = tst_inputpanel
QT += testlib
CONFIG += qmltestcase console
+static {
+ QT += svg
+ QTPLUGIN += qtvirtualkeyboardplugin
+}
+
SOURCES += $$PWD/tst_inputpanel.cpp
TESTDATA = $$PWD/data/*