diff options
-rw-r--r-- | examples/quick/enterprise/virtualkeyboard/virtualkeyboard/virtualkeyboard.pro | 4 | ||||
-rw-r--r-- | src/virtualkeyboard/doc/src/build.qdoc | 35 | ||||
-rw-r--r-- | src/virtualkeyboard/plugin.cpp | 19 | ||||
-rw-r--r-- | src/virtualkeyboard/styles/qmldir | 2 | ||||
-rw-r--r-- | src/virtualkeyboard/styles/styles_plugin.cpp | 4 | ||||
-rw-r--r-- | src/virtualkeyboard/styles/styles_plugin.h | 2 | ||||
-rw-r--r-- | src/virtualkeyboard/virtualkeyboard.pro | 12 | ||||
-rw-r--r-- | tests/auto/inputpanel/inputpanel.pro | 5 |
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/* |