diff options
6 files changed, 63 insertions, 23 deletions
diff --git a/src/virtualkeyboard/content/HandwritingInputPanel.qml b/src/virtualkeyboard/content/HandwritingInputPanel.qml index 58800a6c..940fe915 100644 --- a/src/virtualkeyboard/content/HandwritingInputPanel.qml +++ b/src/virtualkeyboard/content/HandwritingInputPanel.qml @@ -91,6 +91,9 @@ Item { enabled: inputPanel.keyboard.isHandwritingAvailable() visible: enabled && available && active && Qt.inputMethod.visible + LayoutMirroring.enabled: false + LayoutMirroring.childrenInherit: true + Item { id: keyboard property var style: inputPanel && inputPanel.hasOwnProperty ? inputPanel.keyboard.style : null diff --git a/src/virtualkeyboard/content/InputPanel.qml b/src/virtualkeyboard/content/InputPanel.qml index ef900af4..9310238d 100644 --- a/src/virtualkeyboard/content/InputPanel.qml +++ b/src/virtualkeyboard/content/InputPanel.qml @@ -114,11 +114,14 @@ Item { /*! \internal */ readonly property bool __isRootItem: inputPanel.parent != null && inputPanel.parent.parent == null + LayoutMirroring.enabled: false + LayoutMirroring.childrenInherit: true + SelectionControl { objectName: "selectionControl" x: -parent.x y: -parent.y - enabled: active && !keyboard.fullScreenMode + enabled: active && !keyboard.fullScreenMode && !__isRootItem } implicitHeight: keyboard.height diff --git a/src/virtualkeyboard/doc/qtvirtualkeyboard.qdocconf b/src/virtualkeyboard/doc/qtvirtualkeyboard.qdocconf index 60a364d8..b8bfd074 100644 --- a/src/virtualkeyboard/doc/qtvirtualkeyboard.qdocconf +++ b/src/virtualkeyboard/doc/qtvirtualkeyboard.qdocconf @@ -27,7 +27,7 @@ manifestmeta.highlighted.names = "QtVirtualKeyboard/Qt Quick Virtual Keyboard - imagedirs += images -depends += qtdoc qtcore qtgui qtqml qtquick qtquickcontrols2 +depends += qtdoc qtcore qtgui qtwidgets qtwayland qtqml qtquick qtquickcontrols2 qhp.projects = QtVirtualKeyboard diff --git a/src/virtualkeyboard/doc/src/deployment-guide.qdoc b/src/virtualkeyboard/doc/src/deployment-guide.qdoc index 9cbd6e6e..6e1a2642 100644 --- a/src/virtualkeyboard/doc/src/deployment-guide.qdoc +++ b/src/virtualkeyboard/doc/src/deployment-guide.qdoc @@ -71,19 +71,21 @@ Qt Virtual Keyboard currently supports two alternative integration methods for using the plugin: \list - \li \c Desktop: Qt Virtual Keyboard is integrated with Qt 5 and requires no - changes to existing applications. The Qt Virtual Keyboard input method - is available to all of the Qt 5 applications in the system. + \li \c Desktop: requires no changes to existing applications. + The virtual keyboard is available to all of the Qt 5 applications + in the system. In this integration method, the keyboard is shown in a dedicated top-level window. - \li \c Application: Qt Virtual Keyboard is integrated with Qt 5, but - requires changes to particular applications using Qt Virtual Keyboard. - This method is mandatory in a Boot2Qt environment, but can be used in - desktop applications too. + \li \c Application: the virtual keyboard is embedded within the Qt + application itself by instantiating an \l InputPanel item in QML. - In this integration method, the keyboard is shown in the same Qt Quick - scene as the application. + This method is mandatory in environments where there is no support + for multiple top-level windows (such as embedded devices), but can + be used in desktop applications too. + + This method can also be used by Qt Wayland compositors in order to + provide a server-side virtual keyboard. See the section below for details. \endlist The integration method is automatically selected by the project files. @@ -91,8 +93,40 @@ However, in desktop environments, it is possible to override the desktop integration method and use the application integration method instead, by adding \c CONFIG+=disable-desktop to the \c qmake command line. -\note The desktop integration method is not currently available in Boot2Qt -environments. +\section2 Using Qt Virtual Keyboard with Qt Wayland + +This section explains how to use Qt Virtual Keyboard to interact with the +\l {Line Edits Example}{Qt Widgets Line Edits example} using the +\l {Qt Wayland Compositor Examples - Pure QML}{Pure QML example} +as a compositor. + +We will be using Ubuntu 18.04 to run the example, using the X11 as the +windowing system. The example compositor (\c pure-qml) will open +as a window within an X11 session. + +\list 1 + \li Start the compositor: + \badcode +QT_XCB_GL_INTEGRATION=xcb_egl QT_WAYLAND_CLIENT_BUFFER_INTEGRATION=xcomposite-egl QT_IM_MODULE=qtvirtualkeyboard ./pure-qml -platform xcb + \endcode + \li Before running the client application, ensure that QT_IM_MODULE is unset: + \badcode +unset QT_IM_MODULE + \endcode + \li Start the Line Edits example as the client: + \badcode +./lineedits -platform wayland + \endcode + \li Click on a line edit and Qt Virtual Keyboard's input panel will open. +\endlist + +If issues are encountered, the following environment variables can be set +when running the compositor to get debug output that can help diagnose the issue: + +\badcode +WAYLAND_DEBUG=1 +QT_LOGGING_RULES="qt.virtualkeyboard=true;qt.qpa.wayland*=true" +\endcode \section1 Loading the Plugin diff --git a/src/virtualkeyboard/doc/src/qtvirtualkeyboard-index.qdoc b/src/virtualkeyboard/doc/src/qtvirtualkeyboard-index.qdoc index d68d8a9f..0043cd8c 100644 --- a/src/virtualkeyboard/doc/src/qtvirtualkeyboard-index.qdoc +++ b/src/virtualkeyboard/doc/src/qtvirtualkeyboard-index.qdoc @@ -56,6 +56,7 @@ \li \l {Handwriting Recognition}{Handwriting support}, with gestures for fullscreen input. \li Audio feedback. \li Cross-platform functionality. + \li Supports both \l {Integration Method}{Qt Quick and Qt Widgets applications}. \endlist \section1 Supported Languages diff --git a/src/virtualkeyboard/platforminputcontext.cpp b/src/virtualkeyboard/platforminputcontext.cpp index 14a14649..da0d23b2 100644 --- a/src/virtualkeyboard/platforminputcontext.cpp +++ b/src/virtualkeyboard/platforminputcontext.cpp @@ -88,18 +88,17 @@ void PlatformInputContext::commit() void PlatformInputContext::update(Qt::InputMethodQueries queries) { VIRTUALKEYBOARD_DEBUG() << "PlatformInputContext::update():" << queries; - bool enabled = inputMethodQuery(Qt::ImEnabled).toBool(); -#ifdef QT_VIRTUALKEYBOARD_DESKTOP - if (enabled && !m_inputPanel) { - m_inputPanel = new DesktopInputPanel(this); - m_inputPanel->createView(); - m_selectionControl = new DesktopInputSelectionControl(this, m_inputContext); - m_selectionControl->createHandles(); - } -#endif - if (m_inputContext) { + bool enabled = inputMethodQuery(Qt::ImEnabled).toBool(); if (enabled) { +#ifdef QT_VIRTUALKEYBOARD_DESKTOP + if (!m_inputPanel) { + m_inputPanel = new DesktopInputPanel(this); + m_inputPanel->createView(); + m_selectionControl = new DesktopInputSelectionControl(this, m_inputContext); + m_selectionControl->createHandles(); + } +#endif m_inputContext->priv()->update(queries); if (m_visible) updateInputPanelVisible(); |