diff options
author | Mikko Levonmaa <mikko.levonmaa@lge.com> | 2014-09-18 12:32:57 +0300 |
---|---|---|
committer | Mikko Levonmaa <mikko.levonmaa@lge.com> | 2014-10-06 07:53:53 +0200 |
commit | 0febf7c52f5cc4bc5c7767f7572ff87a5aa8a7af (patch) | |
tree | 4a7c5c0bea43b00722c3bd1c4dca6c0ac53fff04 /src/client/qwaylandintegration.cpp | |
parent | b62ae0fd804633de07d68f2f5654d2373a83f8d7 (diff) |
Allow client side input device customization
Introduces QWaylandInputDeviceIntegration plugins to allow customization
of input device related behavior. The plugin can be activated via the
environment variable QT_WAYLAND_INPUTDEVICE_INTEGRATION
Change-Id: If5629737752afacb29161f51c1b7c6e171fb2758
Reviewed-by: Mikko Levonmaa <mikko.levonmaa@lge.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
Diffstat (limited to 'src/client/qwaylandintegration.cpp')
-rw-r--r-- | src/client/qwaylandintegration.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/client/qwaylandintegration.cpp b/src/client/qwaylandintegration.cpp index d9bf82e4f..ad99c67b9 100644 --- a/src/client/qwaylandintegration.cpp +++ b/src/client/qwaylandintegration.cpp @@ -43,6 +43,7 @@ #include "qwaylanddisplay_p.h" #include "qwaylandshmwindow_p.h" +#include "qwaylandinputdevice_p.h" #include "qwaylandinputcontext_p.h" #include "qwaylandshmbackingstore_p.h" #include "qwaylandnativeinterface_p.h" @@ -76,6 +77,9 @@ #include "qwaylandshellintegration_p.h" #include "qwaylandshellintegrationfactory_p.h" +#include "qwaylandinputdeviceintegration_p.h" +#include "qwaylandinputdeviceintegrationfactory_p.h" + QT_BEGIN_NAMESPACE class GenericWaylandTheme: public QGenericUnixTheme @@ -113,6 +117,7 @@ public: QWaylandIntegration::QWaylandIntegration() : mClientBufferIntegration(0) , mShellIntegration(Q_NULLPTR) + , mInputDeviceIntegration(Q_NULLPTR) , mFontDb(new QGenericUnixFontDatabase()) , mNativeInterface(new QWaylandNativeInterface(this)) #ifndef QT_NO_ACCESSIBILITY @@ -124,6 +129,7 @@ QWaylandIntegration::QWaylandIntegration() , mServerBufferIntegrationInitialized(false) , mShellIntegrationInitialized(false) { + initializeInputDeviceIntegration(); mDisplay = new QWaylandDisplay(this); mClipboard = new QWaylandClipboard(mDisplay); mDrag = new QWaylandDrag(mDisplay); @@ -361,4 +367,30 @@ void QWaylandIntegration::initializeShellIntegration() } } +QWaylandInputDevice *QWaylandIntegration::createInputDevice(QWaylandDisplay *display, uint32_t id) +{ + if (mInputDeviceIntegration) { + return mInputDeviceIntegration->createInputDevice(display, id); + } + return new QWaylandInputDevice(display, id); +} + +void QWaylandIntegration::initializeInputDeviceIntegration() +{ + QByteArray integrationName = qgetenv("QT_WAYLAND_INPUTDEVICE_INTEGRATION"); + QString targetKey = QString::fromLocal8Bit(integrationName); + + if (targetKey.isEmpty()) { + return; + } + + QStringList keys = QWaylandInputDeviceIntegrationFactory::keys(); + if (keys.contains(targetKey)) { + mInputDeviceIntegration = QWaylandInputDeviceIntegrationFactory::create(targetKey, QStringList()); + qDebug("Using the '%s' input device integration", qPrintable(targetKey)); + } else { + qWarning("Wayland inputdevice integration '%s' not found, using default", qPrintable(targetKey)); + } +} + QT_END_NAMESPACE |