diff options
author | Laszlo Agocs <laszlo.agocs@theqtcompany.com> | 2015-01-09 14:48:01 +0100 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@theqtcompany.com> | 2015-01-21 12:32:04 +0100 |
commit | 10472dce9202e4460b2d908bdbe0cd65291f77e5 (patch) | |
tree | 4a0d970fcedb4e7b0b01c3f65cd9c7886473dfe0 /src/platformsupport/input/libinput | |
parent | f93c04e44a5bd08fea76a1147b1aa51953bce925 (diff) |
Unify input device hotplugging support for embedded
On embedded the mouse cursor will now appear and reappear regardless of
how the input handling code is loaded (via a generic plugin or compiled-in
to the platform plugin).
Instead of passing around QDeviceDiscovery instances that only works
when compiling-in the code into the platform plugin, introduce a new
internal central QInputDeviceManager. The single instance of this
provides a place to store any future input device related signals and
properties.
Also introduce mouse hotplugging support to linuxfb.
[ChangeLog][QtGui] The mouse cursor on Embedded Linux is now handling
hotplugging correctly with eglfs and linuxfb regardless of how the input
handling code is loaded (via a generic plugin or built in to the platform
plugin).
Change-Id: I147c1b04a193baf216598015264f2c06e1b20f84
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
Diffstat (limited to 'src/platformsupport/input/libinput')
-rw-r--r-- | src/platformsupport/input/libinput/qlibinputhandler.cpp | 40 | ||||
-rw-r--r-- | src/platformsupport/input/libinput/qlibinputhandler_p.h | 2 |
2 files changed, 40 insertions, 2 deletions
diff --git a/src/platformsupport/input/libinput/qlibinputhandler.cpp b/src/platformsupport/input/libinput/qlibinputhandler.cpp index cab4527d0a..0ed605019c 100644 --- a/src/platformsupport/input/libinput/qlibinputhandler.cpp +++ b/src/platformsupport/input/libinput/qlibinputhandler.cpp @@ -41,6 +41,8 @@ #include <QtCore/QLoggingCategory> #include <QtCore/QSocketNotifier> #include <QtCore/private/qcore_unix_p.h> +#include <private/qguiapplication_p.h> +#include <private/qinputdevicemanager_p_p.h> QT_BEGIN_NAMESPACE @@ -146,8 +148,25 @@ void QLibInputHandler::processEvent(libinput_event *ev) const char *sysname = libinput_device_get_sysname(dev); // node name without path const char *name = libinput_device_get_name(dev); emit deviceAdded(QString::fromUtf8(sysname), QString::fromUtf8(name)); - if (libinput_device_has_capability(dev, LIBINPUT_DEVICE_CAP_TOUCH)) + + QInputDeviceManagerPrivate *inputManagerPriv = QInputDeviceManagerPrivate::get( + QGuiApplicationPrivate::inputDeviceManager()); + if (libinput_device_has_capability(dev, LIBINPUT_DEVICE_CAP_TOUCH)) { m_touch->registerDevice(dev); + int &count(m_devCount[QInputDeviceManager::DeviceTypeTouch]); + ++count; + inputManagerPriv->setDeviceCount(QInputDeviceManager::DeviceTypeTouch, count); + } + if (libinput_device_has_capability(dev, LIBINPUT_DEVICE_CAP_POINTER)) { + int &count(m_devCount[QInputDeviceManager::DeviceTypePointer]); + ++count; + inputManagerPriv->setDeviceCount(QInputDeviceManager::DeviceTypePointer, count); + } + if (libinput_device_has_capability(dev, LIBINPUT_DEVICE_CAP_KEYBOARD)) { + int &count(m_devCount[QInputDeviceManager::DeviceTypeKeyboard]); + ++count; + inputManagerPriv->setDeviceCount(QInputDeviceManager::DeviceTypeKeyboard, count); + } break; } case LIBINPUT_EVENT_DEVICE_REMOVED: @@ -155,8 +174,25 @@ void QLibInputHandler::processEvent(libinput_event *ev) const char *sysname = libinput_device_get_sysname(dev); const char *name = libinput_device_get_name(dev); emit deviceRemoved(QString::fromUtf8(sysname), QString::fromUtf8(name)); - if (libinput_device_has_capability(dev, LIBINPUT_DEVICE_CAP_TOUCH)) + + QInputDeviceManagerPrivate *inputManagerPriv = QInputDeviceManagerPrivate::get( + QGuiApplicationPrivate::inputDeviceManager()); + if (libinput_device_has_capability(dev, LIBINPUT_DEVICE_CAP_TOUCH)) { m_touch->unregisterDevice(dev); + int &count(m_devCount[QInputDeviceManager::DeviceTypeTouch]); + --count; + inputManagerPriv->setDeviceCount(QInputDeviceManager::DeviceTypeTouch, count); + } + if (libinput_device_has_capability(dev, LIBINPUT_DEVICE_CAP_POINTER)) { + int &count(m_devCount[QInputDeviceManager::DeviceTypePointer]); + --count; + inputManagerPriv->setDeviceCount(QInputDeviceManager::DeviceTypePointer, count); + } + if (libinput_device_has_capability(dev, LIBINPUT_DEVICE_CAP_KEYBOARD)) { + int &count(m_devCount[QInputDeviceManager::DeviceTypeKeyboard]); + --count; + inputManagerPriv->setDeviceCount(QInputDeviceManager::DeviceTypeKeyboard, count); + } break; } case LIBINPUT_EVENT_POINTER_BUTTON: diff --git a/src/platformsupport/input/libinput/qlibinputhandler_p.h b/src/platformsupport/input/libinput/qlibinputhandler_p.h index a1cfaca3ce..6d376c4ca3 100644 --- a/src/platformsupport/input/libinput/qlibinputhandler_p.h +++ b/src/platformsupport/input/libinput/qlibinputhandler_p.h @@ -36,6 +36,7 @@ #include <QtCore/QObject> #include <QtCore/QScopedPointer> +#include <QtCore/QMap> // // W A R N I N G @@ -84,6 +85,7 @@ private: QScopedPointer<QLibInputPointer> m_pointer; QScopedPointer<QLibInputKeyboard> m_keyboard; QScopedPointer<QLibInputTouch> m_touch; + QMap<int, int> m_devCount; }; QT_END_NAMESPACE |