diff options
author | Bradley T. Hughes <bradley.hughes@nokia.com> | 2009-06-15 14:03:45 (GMT) |
---|---|---|
committer | Bradley T. Hughes <bradley.hughes@nokia.com> | 2009-06-15 14:03:45 (GMT) |
commit | c4f2638cda0cf4b64b3d239aaab695418ee14b86 (patch) | |
tree | 70a02d5143c540e0821b7a2d49caceaf23e3f402 /src/gui/kernel/qapplication_x11.cpp | |
parent | 460822e82edf7ee2dce022121b12aa7f7f5847ef (diff) | |
download | Qt-c4f2638cda0cf4b64b3d239aaab695418ee14b86.zip Qt-c4f2638cda0cf4b64b3d239aaab695418ee14b86.tar.gz Qt-c4f2638cda0cf4b64b3d239aaab695418ee14b86.tar.bz2 |
use char[] instead of QBitArray to pass to ioctl
Using the QBitArray::data_ptr() directly didn't work, unfortunately
Diffstat (limited to 'src/gui/kernel/qapplication_x11.cpp')
-rw-r--r-- | src/gui/kernel/qapplication_x11.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp index 4ab99a8..9d8625c 100644 --- a/src/gui/kernel/qapplication_x11.cpp +++ b/src/gui/kernel/qapplication_x11.cpp @@ -6027,6 +6027,11 @@ void QSessionManager::requestPhase2() #if defined(QT_RX71_MULTITOUCH) +static inline int testBit(const char *array, int bit) +{ + return (array[bit/8] & (1<<(bit%8))); +} + static int openRX71Device(const QByteArray &deviceName) { int fd = open(deviceName, O_RDONLY | O_NONBLOCK); @@ -6036,23 +6041,25 @@ static int openRX71Device(const QByteArray &deviceName) } // fetch the event type mask and check that the device reports absolute coordinates - QBitArray eventTypeMask(EV_MAX + 1, false); - if (ioctl(fd, EVIOCGBIT(0, eventTypeMask.size()), eventTypeMask.data_ptr()->data) < 0) { + char eventTypeMask[(EV_MAX + sizeof(char) - 1) * sizeof(char) + 1]; + memset(eventTypeMask, 0, sizeof(eventTypeMask)); + if (ioctl(fd, EVIOCGBIT(0, sizeof(eventTypeMask)), eventTypeMask) < 0) { close(fd); return -1; } - if (!eventTypeMask.testBit(EV_ABS)) { + if (!testBit(eventTypeMask, EV_ABS)) { close(fd); return -1; } // make sure that we can get the absolute X and Y positions from the device - QBitArray absMask(ABS_MAX + 1, false); - if (ioctl(fd, EVIOCGBIT(EV_ABS, absMask.size()), absMask.data_ptr()->data) < 0) { + char absMask[(ABS_MAX + sizeof(char) - 1) * sizeof(char) + 1]; + memset(absMask, 0, sizeof(absMask)); + if (ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(absMask)), absMask) < 0) { close(fd); return -1; } - if (!absMask.testBit(ABS_X) || !absMask.testBit(ABS_Y)) { + if (!testBit(absMask, ABS_X) || !testBit(absMask, ABS_Y)) { close(fd); return -1; } @@ -6067,7 +6074,7 @@ void QApplicationPrivate::initializeMultitouch_sys() QByteArray deviceName = QByteArray("/dev/input/event"); int currentDeviceNumber = 0; for (;;) { - int fd = openRX71Device(QByteArray(deviceName + QByteArray::number(currentDeviceNumber++)).data()); + int fd = openRX71Device(QByteArray(deviceName + QByteArray::number(currentDeviceNumber++))); if (fd == -ENOENT) { // no more devices break; |