Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/platformsupport/input/evdevtablet/qevdevtablet.cpp |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||||||||||||||
2 | - | |||||||||||||||||||||||||
3 | - | |||||||||||||||||||||||||
4 | const QLoggingCategory &qLcEvdevTablet() { static const QLoggingCategory category("qt.qpa.input"); return never executed: category;return category; never executed: }return category; | 0 | ||||||||||||||||||||||||
5 | - | |||||||||||||||||||||||||
6 | class QEvdevTabletData | - | ||||||||||||||||||||||||
7 | { | - | ||||||||||||||||||||||||
8 | public: | - | ||||||||||||||||||||||||
9 | QEvdevTabletData(QEvdevTabletHandler *q_ptr); | - | ||||||||||||||||||||||||
10 | bool queryLimits(); | - | ||||||||||||||||||||||||
11 | void testGrab(); | - | ||||||||||||||||||||||||
12 | void processInputEvent(input_event *ev); | - | ||||||||||||||||||||||||
13 | void reportProximityEnter(); | - | ||||||||||||||||||||||||
14 | void reportProximityLeave(); | - | ||||||||||||||||||||||||
15 | void report(); | - | ||||||||||||||||||||||||
16 | - | |||||||||||||||||||||||||
17 | QEvdevTabletHandler *q; | - | ||||||||||||||||||||||||
18 | QSocketNotifier *notifier; | - | ||||||||||||||||||||||||
19 | int fd; | - | ||||||||||||||||||||||||
20 | int lastEventType; | - | ||||||||||||||||||||||||
21 | QString devName; | - | ||||||||||||||||||||||||
22 | struct { | - | ||||||||||||||||||||||||
23 | int x, y, p, d; | - | ||||||||||||||||||||||||
24 | } minValues, maxValues; | - | ||||||||||||||||||||||||
25 | struct { | - | ||||||||||||||||||||||||
26 | int x, y, p, d; | - | ||||||||||||||||||||||||
27 | bool down, lastReportDown; | - | ||||||||||||||||||||||||
28 | int tool, lastReportTool; | - | ||||||||||||||||||||||||
29 | QPointF lastReportPos; | - | ||||||||||||||||||||||||
30 | } state; | - | ||||||||||||||||||||||||
31 | }; | - | ||||||||||||||||||||||||
32 | - | |||||||||||||||||||||||||
33 | QEvdevTabletData::QEvdevTabletData(QEvdevTabletHandler *q_ptr) | - | ||||||||||||||||||||||||
34 | : q(q_ptr), notifier(0), fd(-1), lastEventType(0) | - | ||||||||||||||||||||||||
35 | { | - | ||||||||||||||||||||||||
36 | memset(&minValues, 0, sizeof(minValues)); | - | ||||||||||||||||||||||||
37 | memset(&maxValues, 0, sizeof(maxValues)); | - | ||||||||||||||||||||||||
38 | memset(&state, 0, sizeof(state)); | - | ||||||||||||||||||||||||
39 | } never executed: end of block | 0 | ||||||||||||||||||||||||
40 | - | |||||||||||||||||||||||||
41 | bool QEvdevTabletData::queryLimits() | - | ||||||||||||||||||||||||
42 | { | - | ||||||||||||||||||||||||
43 | bool ok = true; | - | ||||||||||||||||||||||||
44 | input_absinfo absInfo; | - | ||||||||||||||||||||||||
45 | memset(&absInfo, 0, sizeof(input_absinfo)); | - | ||||||||||||||||||||||||
46 | ok &= ioctl(fd, (((2U) << (((0 +8)+8)+14)) | ((('E')) << (0 +8)) | (((0x40 + (0x00))) << 0) | ((((sizeof(struct input_absinfo)))) << ((0 +8)+8))), &absInfo) >= 0; | - | ||||||||||||||||||||||||
47 | if (ok
| 0 | ||||||||||||||||||||||||
48 | minValues.x = absInfo.minimum; | - | ||||||||||||||||||||||||
49 | maxValues.x = absInfo.maximum; | - | ||||||||||||||||||||||||
50 | for (bool qt_category_enabled = qLcEvdevTablet().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 92, __PRETTY_FUNCTION__, qLcEvdevTablet().categoryName()).debug("evdevtablet: min X: %d max X: %d", minValues.x, maxValues.x); | 0 | ||||||||||||||||||||||||
51 | } never executed: end of block | 0 | ||||||||||||||||||||||||
52 | ok &= ioctl(fd, (((2U) << (((0 +8)+8)+14)) | ((('E')) << (0 +8)) | (((0x40 + (0x01))) << 0) | ((((sizeof(struct input_absinfo)))) << ((0 +8)+8))), &absInfo) >= 0; | - | ||||||||||||||||||||||||
53 | if (ok
| 0 | ||||||||||||||||||||||||
54 | minValues.y = absInfo.minimum; | - | ||||||||||||||||||||||||
55 | maxValues.y = absInfo.maximum; | - | ||||||||||||||||||||||||
56 | for (bool qt_category_enabled = qLcEvdevTablet().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 98, __PRETTY_FUNCTION__, qLcEvdevTablet().categoryName()).debug("evdevtablet: min Y: %d max Y: %d", minValues.y, maxValues.y); | 0 | ||||||||||||||||||||||||
57 | } never executed: end of block | 0 | ||||||||||||||||||||||||
58 | if (ioctl(fd, (((2U) << (((0 +8)+8)+14)) | ((('E')) << (0 +8)) | (((0x40 + (0x18))) << 0) | ((((sizeof(struct input_absinfo)))) << ((0 +8)+8))), &absInfo) >= 0
| 0 | ||||||||||||||||||||||||
59 | minValues.p = absInfo.minimum; | - | ||||||||||||||||||||||||
60 | maxValues.p = absInfo.maximum; | - | ||||||||||||||||||||||||
61 | for (bool qt_category_enabled = qLcEvdevTablet().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 103, __PRETTY_FUNCTION__, qLcEvdevTablet().categoryName()).debug("evdevtablet: min pressure: %d max pressure: %d", minValues.p, maxValues.p); | 0 | ||||||||||||||||||||||||
62 | } never executed: end of block | 0 | ||||||||||||||||||||||||
63 | if (ioctl(fd, (((2U) << (((0 +8)+8)+14)) | ((('E')) << (0 +8)) | (((0x40 + (0x19))) << 0) | ((((sizeof(struct input_absinfo)))) << ((0 +8)+8))), &absInfo) >= 0
| 0 | ||||||||||||||||||||||||
64 | minValues.d = absInfo.minimum; | - | ||||||||||||||||||||||||
65 | maxValues.d = absInfo.maximum; | - | ||||||||||||||||||||||||
66 | for (bool qt_category_enabled = qLcEvdevTablet().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 108, __PRETTY_FUNCTION__, qLcEvdevTablet().categoryName()).debug("evdevtablet: min distance: %d max distance: %d", minValues.d, maxValues.d); | 0 | ||||||||||||||||||||||||
67 | } never executed: end of block | 0 | ||||||||||||||||||||||||
68 | char name[128]; | - | ||||||||||||||||||||||||
69 | if (ioctl(fd, (((2U) << (((0 +8)+8)+14)) | (('E') << (0 +8)) | ((0x06) << 0) | ((sizeof(name) - 1) << ((0 +8)+8))), name) >= 0
| 0 | ||||||||||||||||||||||||
70 | devName = QString::fromLocal8Bit(name); | - | ||||||||||||||||||||||||
71 | for (bool qt_category_enabled = qLcEvdevTablet().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 113, __PRETTY_FUNCTION__, qLcEvdevTablet().categoryName()).debug("evdevtablet: device name: %s", name); | 0 | ||||||||||||||||||||||||
72 | } never executed: end of block | 0 | ||||||||||||||||||||||||
73 | return never executed: ok;return ok; never executed: return ok; | 0 | ||||||||||||||||||||||||
74 | } | - | ||||||||||||||||||||||||
75 | - | |||||||||||||||||||||||||
76 | void QEvdevTabletData::testGrab() | - | ||||||||||||||||||||||||
77 | { | - | ||||||||||||||||||||||||
78 | bool grabSuccess = !ioctl(fd, (((1U) << (((0 +8)+8)+14)) | ((('E')) << (0 +8)) | (((0x90)) << 0) | ((((sizeof(int)))) << ((0 +8)+8))), (void *) 1); | - | ||||||||||||||||||||||||
79 | if (grabSuccess
| 0 | ||||||||||||||||||||||||
80 | ioctl(fd, (((1U) << (((0 +8)+8)+14)) | ((('E')) << (0 +8)) | (((0x90)) << 0) | ((((sizeof(int)))) << ((0 +8)+8))), (void *) 0); never executed: ioctl(fd, (((1U) << (((0 +8)+8)+14)) | ((('E')) << (0 +8)) | (((0x90)) << 0) | ((((sizeof(int)))) << ((0 +8)+8))), (void *) 0); | 0 | ||||||||||||||||||||||||
81 | else | - | ||||||||||||||||||||||||
82 | QMessageLogger(__FILE__, 124, __PRETTY_FUNCTION__).warning("evdevtablet: ERROR: The device is grabbed by another process. No events will be read."); never executed: QMessageLogger(__FILE__, 124, __PRETTY_FUNCTION__).warning("evdevtablet: ERROR: The device is grabbed by another process. No events will be read."); | 0 | ||||||||||||||||||||||||
83 | } | - | ||||||||||||||||||||||||
84 | - | |||||||||||||||||||||||||
85 | void QEvdevTabletData::processInputEvent(input_event *ev) | - | ||||||||||||||||||||||||
86 | { | - | ||||||||||||||||||||||||
87 | if (ev->type == 0x03
| 0 | ||||||||||||||||||||||||
88 | switch (ev->code) { | - | ||||||||||||||||||||||||
89 | case never executed: 0x00:case 0x00: never executed: case 0x00: | 0 | ||||||||||||||||||||||||
90 | state.x = ev->value; | - | ||||||||||||||||||||||||
91 | break; never executed: break; | 0 | ||||||||||||||||||||||||
92 | case never executed: 0x01:case 0x01: never executed: case 0x01: | 0 | ||||||||||||||||||||||||
93 | state.y = ev->value; | - | ||||||||||||||||||||||||
94 | break; never executed: break; | 0 | ||||||||||||||||||||||||
95 | case never executed: 0x18:case 0x18: never executed: case 0x18: | 0 | ||||||||||||||||||||||||
96 | state.p = ev->value; | - | ||||||||||||||||||||||||
97 | break; never executed: break; | 0 | ||||||||||||||||||||||||
98 | case never executed: 0x19:case 0x19: never executed: case 0x19: | 0 | ||||||||||||||||||||||||
99 | state.d = ev->value; | - | ||||||||||||||||||||||||
100 | break; never executed: break; | 0 | ||||||||||||||||||||||||
101 | default never executed: :default: never executed: default: | 0 | ||||||||||||||||||||||||
102 | break; never executed: break; | 0 | ||||||||||||||||||||||||
103 | } | - | ||||||||||||||||||||||||
104 | } else if (ev->type == 0x01
| 0 | ||||||||||||||||||||||||
105 | - | |||||||||||||||||||||||||
106 | - | |||||||||||||||||||||||||
107 | - | |||||||||||||||||||||||||
108 | - | |||||||||||||||||||||||||
109 | switch (ev->code) { | - | ||||||||||||||||||||||||
110 | case never executed: 0x14a:case 0x14a: never executed: case 0x14a: | 0 | ||||||||||||||||||||||||
111 | state.down = ev->value != 0; | - | ||||||||||||||||||||||||
112 | break; never executed: break; | 0 | ||||||||||||||||||||||||
113 | case never executed: 0x140:case 0x140: never executed: case 0x140: | 0 | ||||||||||||||||||||||||
114 | state.tool = ev->value
| 0 | ||||||||||||||||||||||||
115 | break; never executed: break; | 0 | ||||||||||||||||||||||||
116 | case never executed: 0x141:case 0x141: never executed: case 0x141: | 0 | ||||||||||||||||||||||||
117 | state.tool = ev->value
| 0 | ||||||||||||||||||||||||
118 | break; never executed: break; | 0 | ||||||||||||||||||||||||
119 | default never executed: :default: never executed: default: | 0 | ||||||||||||||||||||||||
120 | break; never executed: break; | 0 | ||||||||||||||||||||||||
121 | } | - | ||||||||||||||||||||||||
122 | } else if (ev->type == 0x00
| 0 | ||||||||||||||||||||||||
123 | report(); | - | ||||||||||||||||||||||||
124 | } never executed: end of block | 0 | ||||||||||||||||||||||||
125 | lastEventType = ev->type; | - | ||||||||||||||||||||||||
126 | } never executed: end of block | 0 | ||||||||||||||||||||||||
127 | - | |||||||||||||||||||||||||
128 | void QEvdevTabletData::reportProximityEnter() | - | ||||||||||||||||||||||||
129 | { | - | ||||||||||||||||||||||||
130 | QWindowSystemInterface::handleTabletEnterProximityEvent(QTabletEvent::Stylus, state.tool, 1); | - | ||||||||||||||||||||||||
131 | } never executed: end of block | 0 | ||||||||||||||||||||||||
132 | - | |||||||||||||||||||||||||
133 | void QEvdevTabletData::reportProximityLeave() | - | ||||||||||||||||||||||||
134 | { | - | ||||||||||||||||||||||||
135 | QWindowSystemInterface::handleTabletLeaveProximityEvent(QTabletEvent::Stylus, state.tool, 1); | - | ||||||||||||||||||||||||
136 | } never executed: end of block | 0 | ||||||||||||||||||||||||
137 | - | |||||||||||||||||||||||||
138 | void QEvdevTabletData::report() | - | ||||||||||||||||||||||||
139 | { | - | ||||||||||||||||||||||||
140 | if (!state.lastReportTool
| 0 | ||||||||||||||||||||||||
141 | reportProximityEnter(); never executed: reportProximityEnter(); | 0 | ||||||||||||||||||||||||
142 | - | |||||||||||||||||||||||||
143 | qreal nx = (state.x - minValues.x) / qreal(maxValues.x - minValues.x); | - | ||||||||||||||||||||||||
144 | qreal ny = (state.y - minValues.y) / qreal(maxValues.y - minValues.y); | - | ||||||||||||||||||||||||
145 | - | |||||||||||||||||||||||||
146 | QRect winRect = QGuiApplication::primaryScreen()->geometry(); | - | ||||||||||||||||||||||||
147 | QPointF globalPos(nx * winRect.width(), ny * winRect.height()); | - | ||||||||||||||||||||||||
148 | int pointer = state.tool; | - | ||||||||||||||||||||||||
149 | - | |||||||||||||||||||||||||
150 | if (!state.down
| 0 | ||||||||||||||||||||||||
151 | globalPos = state.lastReportPos; | - | ||||||||||||||||||||||||
152 | pointer = state.lastReportTool; | - | ||||||||||||||||||||||||
153 | } never executed: end of block | 0 | ||||||||||||||||||||||||
154 | - | |||||||||||||||||||||||||
155 | qreal pressure = (state.p - minValues.p) / qreal(maxValues.p - minValues.p); | - | ||||||||||||||||||||||||
156 | - | |||||||||||||||||||||||||
157 | if (state.down
| 0 | ||||||||||||||||||||||||
158 | QWindowSystemInterface::handleTabletEvent(0, state.down, QPointF(), globalPos, | - | ||||||||||||||||||||||||
159 | QTabletEvent::Stylus, pointer, | - | ||||||||||||||||||||||||
160 | pressure, 0, 0, 0, 0, 0, 1, (static_cast<QGuiApplication *>(QCoreApplication::instance()))->keyboardModifiers()); | - | ||||||||||||||||||||||||
161 | } never executed: end of block | 0 | ||||||||||||||||||||||||
162 | - | |||||||||||||||||||||||||
163 | if (state.lastReportTool
| 0 | ||||||||||||||||||||||||
164 | reportProximityLeave(); never executed: reportProximityLeave(); | 0 | ||||||||||||||||||||||||
165 | - | |||||||||||||||||||||||||
166 | state.lastReportDown = state.down; | - | ||||||||||||||||||||||||
167 | state.lastReportTool = state.tool; | - | ||||||||||||||||||||||||
168 | state.lastReportPos = globalPos; | - | ||||||||||||||||||||||||
169 | } never executed: end of block | 0 | ||||||||||||||||||||||||
170 | - | |||||||||||||||||||||||||
171 | - | |||||||||||||||||||||||||
172 | QEvdevTabletHandler::QEvdevTabletHandler(const QString &spec, QObject *parent) | - | ||||||||||||||||||||||||
173 | : QObject(parent), d(0) | - | ||||||||||||||||||||||||
174 | { | - | ||||||||||||||||||||||||
175 | setObjectName(QLatin1String("Evdev Tablet Handler")); | - | ||||||||||||||||||||||||
176 | d = new QEvdevTabletData(this); | - | ||||||||||||||||||||||||
177 | QString dev; | - | ||||||||||||||||||||||||
178 | QStringList args = spec.split(QLatin1Char(':')); | - | ||||||||||||||||||||||||
179 | for (int i = 0; i < args.count()
| 0 | ||||||||||||||||||||||||
180 | if (args.at(i).startsWith(QLatin1String("/dev/"))
| 0 | ||||||||||||||||||||||||
181 | dev = args.at(i); | - | ||||||||||||||||||||||||
182 | break; never executed: break; | 0 | ||||||||||||||||||||||||
183 | } | - | ||||||||||||||||||||||||
184 | } never executed: end of block | 0 | ||||||||||||||||||||||||
185 | if (dev.isEmpty()
| 0 | ||||||||||||||||||||||||
186 | QScopedPointer<QDeviceDiscovery> deviceDiscovery( | - | ||||||||||||||||||||||||
187 | QDeviceDiscovery::create(QDeviceDiscovery::Device_Tablet, this)); | - | ||||||||||||||||||||||||
188 | if (deviceDiscovery
| 0 | ||||||||||||||||||||||||
189 | QStringList devices = deviceDiscovery->scanConnectedDevices(); | - | ||||||||||||||||||||||||
190 | if (!devices.isEmpty()
| 0 | ||||||||||||||||||||||||
191 | dev = devices.at(0); never executed: dev = devices.at(0); | 0 | ||||||||||||||||||||||||
192 | } never executed: end of block | 0 | ||||||||||||||||||||||||
193 | } never executed: end of block | 0 | ||||||||||||||||||||||||
194 | if (!dev.isEmpty()
| 0 | ||||||||||||||||||||||||
195 | for (bool qt_category_enabled = qLcEvdevTablet().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 237, __PRETTY_FUNCTION__, qLcEvdevTablet().categoryName()).debug("evdevtablet: using %s", QString(dev).toLocal8Bit().constData()); | 0 | ||||||||||||||||||||||||
196 | d->fd = qt_safe_open(dev.toLocal8Bit().constData(), 00 | 04000, 0); | - | ||||||||||||||||||||||||
197 | if (d->fd >= 0
| 0 | ||||||||||||||||||||||||
198 | d->testGrab(); | - | ||||||||||||||||||||||||
199 | if (d->queryLimits()
| 0 | ||||||||||||||||||||||||
200 | d->notifier = new QSocketNotifier(d->fd, QSocketNotifier::Read, this); | - | ||||||||||||||||||||||||
201 | connect(d->notifier, qFlagLocation("2""activated(int)" "\0" __FILE__ ":" "243"), this, qFlagLocation("1""readData()" "\0" __FILE__ ":" "243")); | - | ||||||||||||||||||||||||
202 | } never executed: end of block | 0 | ||||||||||||||||||||||||
203 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
204 | qErrnoWarning((*__errno_location ()), "evdevtablet: Cannot open input device"); | - | ||||||||||||||||||||||||
205 | } never executed: end of block | 0 | ||||||||||||||||||||||||
206 | } | - | ||||||||||||||||||||||||
207 | } never executed: end of block | 0 | ||||||||||||||||||||||||
208 | - | |||||||||||||||||||||||||
209 | QEvdevTabletHandler::~QEvdevTabletHandler() | - | ||||||||||||||||||||||||
210 | { | - | ||||||||||||||||||||||||
211 | delete d->notifier; | - | ||||||||||||||||||||||||
212 | if (d->fd >= 0
| 0 | ||||||||||||||||||||||||
213 | qt_safe_close(d->fd); never executed: qt_safe_close(d->fd); | 0 | ||||||||||||||||||||||||
214 | - | |||||||||||||||||||||||||
215 | delete d; | - | ||||||||||||||||||||||||
216 | } never executed: end of block | 0 | ||||||||||||||||||||||||
217 | - | |||||||||||||||||||||||||
218 | void QEvdevTabletHandler::readData() | - | ||||||||||||||||||||||||
219 | { | - | ||||||||||||||||||||||||
220 | static input_event buffer[32]; | - | ||||||||||||||||||||||||
221 | int n = 0; | - | ||||||||||||||||||||||||
222 | for (; ;) { | - | ||||||||||||||||||||||||
223 | int result = qt_safe_read(d->fd, reinterpret_cast<char*>(buffer) + n, sizeof(buffer) - n); | - | ||||||||||||||||||||||||
224 | if (!result
| 0 | ||||||||||||||||||||||||
225 | QMessageLogger(__FILE__, 267, __PRETTY_FUNCTION__).warning("evdevtablet: Got EOF from input device"); | - | ||||||||||||||||||||||||
226 | return; never executed: return; | 0 | ||||||||||||||||||||||||
227 | } else if (result < 0
| 0 | ||||||||||||||||||||||||
228 | if ((*
| 0 | ||||||||||||||||||||||||
229 | qErrnoWarning((*__errno_location ()), "evdevtablet: Could not read from input device"); | - | ||||||||||||||||||||||||
230 | if ((*
| 0 | ||||||||||||||||||||||||
231 | delete d->notifier; | - | ||||||||||||||||||||||||
232 | d->notifier = 0; | - | ||||||||||||||||||||||||
233 | qt_safe_close(d->fd); | - | ||||||||||||||||||||||||
234 | d->fd = -1; | - | ||||||||||||||||||||||||
235 | } never executed: end of block | 0 | ||||||||||||||||||||||||
236 | return; never executed: return; | 0 | ||||||||||||||||||||||||
237 | } | - | ||||||||||||||||||||||||
238 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
239 | n += result; | - | ||||||||||||||||||||||||
240 | if (n % sizeof(input_event) == 0
| 0 | ||||||||||||||||||||||||
241 | break; never executed: break; | 0 | ||||||||||||||||||||||||
242 | } never executed: end of block | 0 | ||||||||||||||||||||||||
243 | } | - | ||||||||||||||||||||||||
244 | - | |||||||||||||||||||||||||
245 | n /= sizeof(input_event); | - | ||||||||||||||||||||||||
246 | - | |||||||||||||||||||||||||
247 | for (int i = 0; i < n
| 0 | ||||||||||||||||||||||||
248 | d->processInputEvent(&buffer[i]); never executed: d->processInputEvent(&buffer[i]); | 0 | ||||||||||||||||||||||||
249 | } never executed: end of block | 0 | ||||||||||||||||||||||||
250 | - | |||||||||||||||||||||||||
251 | - | |||||||||||||||||||||||||
252 | QEvdevTabletHandlerThread::QEvdevTabletHandlerThread(const QString &spec, QObject *parent) | - | ||||||||||||||||||||||||
253 | : QDaemonThread(parent), m_spec(spec), m_handler(0) | - | ||||||||||||||||||||||||
254 | { | - | ||||||||||||||||||||||||
255 | start(); | - | ||||||||||||||||||||||||
256 | } never executed: end of block | 0 | ||||||||||||||||||||||||
257 | - | |||||||||||||||||||||||||
258 | QEvdevTabletHandlerThread::~QEvdevTabletHandlerThread() | - | ||||||||||||||||||||||||
259 | { | - | ||||||||||||||||||||||||
260 | quit(); | - | ||||||||||||||||||||||||
261 | wait(); | - | ||||||||||||||||||||||||
262 | } never executed: end of block | 0 | ||||||||||||||||||||||||
263 | - | |||||||||||||||||||||||||
264 | void QEvdevTabletHandlerThread::run() | - | ||||||||||||||||||||||||
265 | { | - | ||||||||||||||||||||||||
266 | m_handler = new QEvdevTabletHandler(m_spec); | - | ||||||||||||||||||||||||
267 | exec(); | - | ||||||||||||||||||||||||
268 | delete m_handler; | - | ||||||||||||||||||||||||
269 | m_handler = 0; | - | ||||||||||||||||||||||||
270 | } never executed: end of block | 0 | ||||||||||||||||||||||||
271 | - | |||||||||||||||||||||||||
272 | - | |||||||||||||||||||||||||
273 | - | |||||||||||||||||||||||||
Switch to Source code | Preprocessed file |