diff options
Diffstat (limited to 'src/platformsupport')
-rw-r--r-- | src/platformsupport/input/evdevtablet/qevdevtablet.cpp | 21 | ||||
-rw-r--r-- | src/platformsupport/input/evdevtouch/qevdevtouch.cpp | 8 |
2 files changed, 25 insertions, 4 deletions
diff --git a/src/platformsupport/input/evdevtablet/qevdevtablet.cpp b/src/platformsupport/input/evdevtablet/qevdevtablet.cpp index bd513e4b53..749cfcd8cc 100644 --- a/src/platformsupport/input/evdevtablet/qevdevtablet.cpp +++ b/src/platformsupport/input/evdevtablet/qevdevtablet.cpp @@ -56,6 +56,7 @@ class QEvdevTabletData public: QEvdevTabletData(QEvdevTabletHandler *q_ptr); bool queryLimits(); + void testGrab(); void processInputEvent(input_event *ev); void reportProximityEnter(); void reportProximityLeave(); @@ -120,6 +121,15 @@ bool QEvdevTabletData::queryLimits() return ok; } +void QEvdevTabletData::testGrab() +{ + bool grabSuccess = !ioctl(fd, EVIOCGRAB, (void *) 1); + if (grabSuccess) + ioctl(fd, EVIOCGRAB, (void *) 0); + else + qWarning("evdevtablet: ERROR: The device is grabbed by another process. No events will be read."); +} + void QEvdevTabletData::processInputEvent(input_event *ev) { if (ev->type == EV_ABS) { @@ -232,9 +242,14 @@ QEvdevTabletHandler::QEvdevTabletHandler(const QString &spec, QObject *parent) if (!dev.isEmpty()) { qDebug("evdevtablet: using %s", qPrintable(dev)); d->fd = QT_OPEN(dev.toLocal8Bit().constData(), O_RDONLY | O_NDELAY, 0); - if (d->fd >= 0 && d->queryLimits()) { - d->notifier = new QSocketNotifier(d->fd, QSocketNotifier::Read, this); - connect(d->notifier, SIGNAL(activated(int)), this, SLOT(readData())); + if (d->fd >= 0) { + d->testGrab(); + if (d->queryLimits()) { + d->notifier = new QSocketNotifier(d->fd, QSocketNotifier::Read, this); + connect(d->notifier, SIGNAL(activated(int)), this, SLOT(readData())); + } + } else { + qErrnoWarning(errno, "evdevtablet: Cannot open input device"); } } } diff --git a/src/platformsupport/input/evdevtouch/qevdevtouch.cpp b/src/platformsupport/input/evdevtouch/qevdevtouch.cpp index 6bf9ba769e..76314b3443 100644 --- a/src/platformsupport/input/evdevtouch/qevdevtouch.cpp +++ b/src/platformsupport/input/evdevtouch/qevdevtouch.cpp @@ -179,7 +179,7 @@ QEvdevTouchScreenHandler::QEvdevTouchScreenHandler(const QString &spec, QObject m_notify = new QSocketNotifier(m_fd, QSocketNotifier::Read, this); connect(m_notify, SIGNAL(activated(int)), this, SLOT(readData())); } else { - qWarning("Cannot open input device '%s': %s", qPrintable(dev), strerror(errno)); + qErrnoWarning(errno, "Cannot open input device %s", qPrintable(dev)); return; } @@ -220,6 +220,12 @@ QEvdevTouchScreenHandler::QEvdevTouchScreenHandler(const QString &spec, QObject qDebug("device name: %s", name); } + bool grabSuccess = !ioctl(m_fd, EVIOCGRAB, (void *) 1); + if (grabSuccess) + ioctl(m_fd, EVIOCGRAB, (void *) 0); + else + qWarning("ERROR: The device is grabbed by another process. No events will be read."); + #ifdef USE_MTDEV const char *mtdevStr = "(mtdev)"; d->m_typeB = true; |