diff options
Diffstat (limited to 'src/plugins/generic')
11 files changed, 77 insertions, 36 deletions
diff --git a/src/plugins/generic/evdevkeyboard/evdevkeyboard.pro b/src/plugins/generic/evdevkeyboard/evdevkeyboard.pro index 21e4bf63ee..b632e5b7ec 100644 --- a/src/plugins/generic/evdevkeyboard/evdevkeyboard.pro +++ b/src/plugins/generic/evdevkeyboard/evdevkeyboard.pro @@ -19,4 +19,6 @@ SOURCES = main.cpp \ OTHER_FILES += \ evdevkeyboard.json -LIBS += $$QMAKE_LIBS_LIBUDEV +contains(QT_CONFIG, libudev) { + LIBS += $$QMAKE_LIBS_LIBUDEV +} diff --git a/src/plugins/generic/evdevkeyboard/qevdevkeyboardhandler.cpp b/src/plugins/generic/evdevkeyboard/qevdevkeyboardhandler.cpp index 73aa6419d3..eb29b853e7 100644 --- a/src/plugins/generic/evdevkeyboard/qevdevkeyboardhandler.cpp +++ b/src/plugins/generic/evdevkeyboard/qevdevkeyboardhandler.cpp @@ -168,16 +168,20 @@ void QEvdevKeyboardHandler::readKeycode() int n = 0; forever { - n = qt_safe_read(m_fd, reinterpret_cast<char *>(buffer) + n, sizeof(buffer) - n); + int result = qt_safe_read(m_fd, reinterpret_cast<char *>(buffer) + n, sizeof(buffer) - n); - if (n == 0) { + if (result == 0) { qWarning("Got EOF from the input device."); return; - } else if (n < 0 && (errno != EINTR && errno != EAGAIN)) { - qWarning("Could not read from input device: %s", strerror(errno)); - return; - } else if (n % sizeof(buffer[0]) == 0) { - break; + } else if (result < 0) { + if (errno != EINTR && errno != EAGAIN) { + qWarning("Could not read from input device: %s", strerror(errno)); + return; + } + } else { + n += result; + if (n % sizeof(buffer[0]) == 0) + break; } } diff --git a/src/plugins/generic/evdevkeyboard/qevdevkeyboardmanager.cpp b/src/plugins/generic/evdevkeyboard/qevdevkeyboardmanager.cpp index 0938fdc2e4..697556c4ac 100644 --- a/src/plugins/generic/evdevkeyboard/qevdevkeyboardmanager.cpp +++ b/src/plugins/generic/evdevkeyboard/qevdevkeyboardmanager.cpp @@ -56,7 +56,11 @@ QEvdevKeyboardManager::QEvdevKeyboardManager(const QString &key, const QString & { Q_UNUSED(key); +#ifndef QT_NO_LIBUDEV bool useUDev = true; +#else + bool useUDev = false; +#endif // QT_NO_LIBUDEV QStringList args = specification.split(QLatin1Char(':')); QStringList devices; @@ -77,6 +81,7 @@ QEvdevKeyboardManager::QEvdevKeyboardManager(const QString &key, const QString & foreach (const QString &device, devices) addKeyboard(device); +#ifndef QT_NO_LIBUDEV if (useUDev) { #ifdef QT_QPA_KEYMAP_DEBUG qWarning() << "Use UDev for device discovery"; @@ -94,6 +99,7 @@ QEvdevKeyboardManager::QEvdevKeyboardManager(const QString &key, const QString & connect(m_udeviceHelper, SIGNAL(deviceRemoved(QString,QUDeviceTypes)), this, SLOT(removeKeyboard(QString))); } } +#endif // QT_NO_LIBUDEV } QEvdevKeyboardManager::~QEvdevKeyboardManager() diff --git a/src/plugins/generic/evdevkeyboard/qevdevkeyboardmanager.h b/src/plugins/generic/evdevkeyboard/qevdevkeyboardmanager.h index c776af2ec5..a505ce834e 100644 --- a/src/plugins/generic/evdevkeyboard/qevdevkeyboardmanager.h +++ b/src/plugins/generic/evdevkeyboard/qevdevkeyboardmanager.h @@ -44,7 +44,9 @@ #include "qevdevkeyboardhandler.h" +#ifndef QT_NO_LIBUDEV #include <QtPlatformSupport/private/qudevicehelper_p.h> +#endif // QT_NO_LIBUDEV #include <QObject> #include <QHash> @@ -68,7 +70,9 @@ private slots: private: QString m_spec; QHash<QString,QEvdevKeyboardHandler*> m_keyboards; +#ifndef QT_NO_LIBUDEV QUDeviceHelper *m_udeviceHelper; +#endif // QT_NO_LIBUDEV }; QT_END_HEADER diff --git a/src/plugins/generic/evdevmouse/evdevmouse.pro b/src/plugins/generic/evdevmouse/evdevmouse.pro index f322a5bd1a..fb9c0e71b8 100644 --- a/src/plugins/generic/evdevmouse/evdevmouse.pro +++ b/src/plugins/generic/evdevmouse/evdevmouse.pro @@ -17,4 +17,6 @@ SOURCES = main.cpp \ OTHER_FILES += \ evdevmouse.json -LIBS += $$QMAKE_LIBS_LIBUDEV +contains(QT_CONFIG, libudev) { + LIBS += $$QMAKE_LIBS_LIBUDEV +} diff --git a/src/plugins/generic/evdevmouse/qevdevmousehandler.cpp b/src/plugins/generic/evdevmouse/qevdevmousehandler.cpp index 1821c2b06b..5e2911a806 100644 --- a/src/plugins/generic/evdevmouse/qevdevmousehandler.cpp +++ b/src/plugins/generic/evdevmouse/qevdevmousehandler.cpp @@ -48,7 +48,6 @@ #include <qplatformdefs.h> #include <private/qcore_unix_p.h> // overrides QT_OPEN -#include <QtPlatformSupport/private/qudevicehelper_p.h> #include <errno.h> @@ -146,16 +145,20 @@ void QEvdevMouseHandler::readMouseData() bool pendingMouseEvent = false; int eventCompressCount = 0; forever { - n = QT_READ(m_fd, reinterpret_cast<char *>(buffer) + n, sizeof(buffer) - n); + int result = QT_READ(m_fd, reinterpret_cast<char *>(buffer) + n, sizeof(buffer) - n); - if (n == 0) { + if (result == 0) { qWarning("Got EOF from the input device."); return; - } else if (n < 0 && (errno != EINTR && errno != EAGAIN)) { - qWarning("Could not read from input device: %s", strerror(errno)); - return; - } else if (n % sizeof(buffer[0]) == 0) { - break; + } else if (result < 0) { + if (errno != EINTR && errno != EAGAIN) { + qWarning("Could not read from input device: %s", strerror(errno)); + return; + } + } else { + n += result; + if (n % sizeof(buffer[0]) == 0) + break; } } diff --git a/src/plugins/generic/evdevmouse/qevdevmousemanager.cpp b/src/plugins/generic/evdevmouse/qevdevmousemanager.cpp index f8e77abe55..2120b1540f 100644 --- a/src/plugins/generic/evdevmouse/qevdevmousemanager.cpp +++ b/src/plugins/generic/evdevmouse/qevdevmousemanager.cpp @@ -56,7 +56,11 @@ QEvdevMouseManager::QEvdevMouseManager(const QString &key, const QString &specif { Q_UNUSED(key); +#ifndef QT_NO_LIBUDEV bool useUDev = true; +#else + bool useUDev = false; +#endif // QT_NO_LIBUDEV QStringList args = specification.split(QLatin1Char(':')); QStringList devices; @@ -77,6 +81,9 @@ QEvdevMouseManager::QEvdevMouseManager(const QString &key, const QString &specif foreach (const QString &device, devices) addMouse(device); +#ifdef QT_NO_LIBUDEV + Q_UNUSED(useUDev) +#else if (useUDev) { #ifdef QT_QPA_MOUSEMANAGER_DEBUG qWarning() << "Use UDev for device discovery"; @@ -94,6 +101,7 @@ QEvdevMouseManager::QEvdevMouseManager(const QString &key, const QString &specif connect(m_udeviceHelper, SIGNAL(deviceRemoved(QString,QUDeviceTypes)), this, SLOT(removeMouse(QString))); } } +#endif // QT_NO_LIBUDEV } QEvdevMouseManager::~QEvdevMouseManager() diff --git a/src/plugins/generic/evdevmouse/qevdevmousemanager.h b/src/plugins/generic/evdevmouse/qevdevmousemanager.h index a42257b6a2..f51bd455e8 100644 --- a/src/plugins/generic/evdevmouse/qevdevmousemanager.h +++ b/src/plugins/generic/evdevmouse/qevdevmousemanager.h @@ -44,7 +44,9 @@ #include "qevdevmousehandler.h" +#ifndef QT_NO_LIBUDEV #include <QtPlatformSupport/private/qudevicehelper_p.h> +#endif // QT_NO_LIBUDEV #include <QObject> #include <QHash> @@ -68,7 +70,9 @@ private slots: private: QString m_spec; QHash<QString,QEvdevMouseHandler*> m_mice; +#ifndef QT_NO_LIBUDEV QUDeviceHelper *m_udeviceHelper; +#endif // QT_NO_LIBUDEV }; QT_END_HEADER diff --git a/src/plugins/generic/evdevtouch/evdevtouch.pro b/src/plugins/generic/evdevtouch/evdevtouch.pro index 192a87c2a3..c7d298d534 100644 --- a/src/plugins/generic/evdevtouch/evdevtouch.pro +++ b/src/plugins/generic/evdevtouch/evdevtouch.pro @@ -16,7 +16,9 @@ QT += core-private platformsupport-private OTHER_FILES += \ evdevtouch.json -LIBS += $$QMAKE_LIBS_LIBUDEV +contains(QT_CONFIG, libudev) { + LIBS += $$QMAKE_LIBS_LIBUDEV +} # DEFINES += USE_MTDEV diff --git a/src/plugins/generic/evdevtouch/qevdevtouch.cpp b/src/plugins/generic/evdevtouch/qevdevtouch.cpp index b702807cab..1c3e8952e9 100644 --- a/src/plugins/generic/evdevtouch/qevdevtouch.cpp +++ b/src/plugins/generic/evdevtouch/qevdevtouch.cpp @@ -46,7 +46,9 @@ #include <QGuiApplication> #include <QDebug> #include <QtCore/private/qcore_unix_p.h> +#ifndef QT_NO_LIBUDEV #include <QtPlatformSupport/private/qudevicehelper_p.h> +#endif // QT_NO_LIBUDEV #include <linux/input.h> #ifdef USE_MTDEV @@ -147,6 +149,7 @@ QTouchScreenHandler::QTouchScreenHandler(const QString &spec) QString dev; +#ifndef QT_NO_LIBUDEV // try to let udev scan for already connected devices QScopedPointer<QUDeviceHelper> udeviceHelper(QUDeviceHelper::createUDeviceHelper(QUDeviceHelper::UDev_Touchpad | QUDeviceHelper::UDev_Touchscreen, this)); if (udeviceHelper) { @@ -156,6 +159,7 @@ QTouchScreenHandler::QTouchScreenHandler(const QString &spec) if (devices.size() > 0) dev = devices[0]; } +#endif // QT_NO_LIBUDEV if (dev.isEmpty()) dev = QLatin1String("/dev/input/event0"); @@ -249,26 +253,30 @@ void QTouchScreenHandler::readData() int n = 0; for (; ;) { #ifdef USE_MTDEV - n = mtdev_get(m_mtdev, m_fd, buffer, sizeof(buffer) / sizeof(::input_event)); - if (n > 0) - n *= sizeof(::input_event); + int result = mtdev_get(m_mtdev, m_fd, buffer, sizeof(buffer) / sizeof(::input_event)); + if (result > 0) + result *= sizeof(::input_event); #else - n = QT_READ(m_fd, reinterpret_cast<char*>(buffer) + n, sizeof(buffer) - n); + int result = QT_READ(m_fd, reinterpret_cast<char*>(buffer) + n, sizeof(buffer) - n); #endif - if (!n) { + if (!result) { qWarning("Got EOF from input device"); return; - } else if (n < 0 && (errno != EINTR && errno != EAGAIN)) { - qWarning("Could not read from input device: %s", strerror(errno)); - if (errno == ENODEV) { // device got disconnected -> stop reading - delete m_notify; - m_notify = 0; - QT_CLOSE(m_fd); - m_fd = -1; + } else if (result < 0) { + if (errno != EINTR && errno != EAGAIN) { + qWarning("Could not read from input device: %s", strerror(errno)); + if (errno == ENODEV) { // device got disconnected -> stop reading + delete m_notify; + m_notify = 0; + QT_CLOSE(m_fd); + m_fd = -1; + } + return; } - return; - } else if (n % sizeof(::input_event) == 0) { - break; + } else { + n += result; + if (n % sizeof(::input_event) == 0) + break; } } diff --git a/src/plugins/generic/generic.pro b/src/plugins/generic/generic.pro index 06bc0091f4..86b529b39e 100644 --- a/src/plugins/generic/generic.pro +++ b/src/plugins/generic/generic.pro @@ -3,7 +3,5 @@ TEMPLATE = subdirs linux-g++-maemo: SUBDIRS += meego contains(QT_CONFIG, evdev) { - contains(QT_CONFIG, libudev) { - SUBDIRS += evdevmouse evdevtouch evdevkeyboard - } + SUBDIRS += evdevmouse evdevtouch evdevkeyboard } |