summaryrefslogtreecommitdiffstats
path: root/src/plugins/generic/evdevtouch/qevdevtouch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/generic/evdevtouch/qevdevtouch.cpp')
-rw-r--r--src/plugins/generic/evdevtouch/qevdevtouch.cpp38
1 files changed, 23 insertions, 15 deletions
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;
}
}