Commit 62900e48b54855daec8a74f6b28591411c2f76fa

  • avatar
  • Peter Hutterer <peter.hutterer @wh…t.net>
  • Thu Dec 24 12:07:58 CET 2009
Re-indent property code to what's used in the rest of the driver.

All files use 8-char tab indentation, not 4 spaces. Re-indent to be conform
with the rest of the code.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
  
167167/* Special case: format -32 means type is XA_ATOM */
168168static Atom InitWcmAtom(DeviceIntPtr dev, char *name, int format, int nvalues, int *values)
169169{
170 int i;
171 Atom atom;
172 uint8_t val_8[WCM_MAX_MOUSE_BUTTONS];
173 uint16_t val_16[WCM_MAX_MOUSE_BUTTONS];
174 uint32_t val_32[WCM_MAX_MOUSE_BUTTONS];
175 pointer converted = val_32;
176 Atom type = XA_INTEGER;
170 int i;
171 Atom atom;
172 uint8_t val_8[WCM_MAX_MOUSE_BUTTONS];
173 uint16_t val_16[WCM_MAX_MOUSE_BUTTONS];
174 uint32_t val_32[WCM_MAX_MOUSE_BUTTONS];
175 pointer converted = val_32;
176 Atom type = XA_INTEGER;
177177
178 if (format == -32)
179 {
180 type = XA_ATOM;
181 format = 32;
182 }
178 if (format == -32)
179 {
180 type = XA_ATOM;
181 format = 32;
182 }
183183
184 for (i = 0; i < nvalues; i++)
185 {
186 switch(format)
187 {
188 case 8: val_8[i] = values[i]; break;
189 case 16: val_16[i] = values[i]; break;
190 case 32: val_32[i] = values[i]; break;
191 }
192 }
184 for (i = 0; i < nvalues; i++)
185 {
186 switch(format)
187 {
188 case 8: val_8[i] = values[i]; break;
189 case 16: val_16[i] = values[i]; break;
190 case 32: val_32[i] = values[i]; break;
191 }
192 }
193193
194 switch(format)
195 {
196 case 8: converted = val_8; break;
197 case 16: converted = val_16; break;
198 case 32: converted = val_32; break;
199 }
194 switch(format)
195 {
196 case 8: converted = val_8; break;
197 case 16: converted = val_16; break;
198 case 32: converted = val_32; break;
199 }
200200
201 atom = MakeAtom(name, strlen(name), TRUE);
202 XIChangeDeviceProperty(dev, atom, type, format,
203 PropModeReplace, nvalues,
204 converted, FALSE);
205 XISetDevicePropertyDeletable(dev, atom, FALSE);
206 return atom;
201 atom = MakeAtom(name, strlen(name), TRUE);
202 XIChangeDeviceProperty(dev, atom, type, format,
203 PropModeReplace, nvalues,
204 converted, FALSE);
205 XISetDevicePropertyDeletable(dev, atom, FALSE);
206 return atom;
207207}
208208
209209void InitWcmDeviceProperties(LocalDevicePtr local)
210210{
211 WacomDevicePtr priv = (WacomDevicePtr) local->private;
212 WacomCommonPtr common = priv->common;
213 int values[WCM_MAX_MOUSE_BUTTONS];
211 WacomDevicePtr priv = (WacomDevicePtr) local->private;
212 WacomCommonPtr common = priv->common;
213 int values[WCM_MAX_MOUSE_BUTTONS];
214214
215 DBG(10, priv, "\n");
215 DBG(10, priv, "\n");
216216
217 values[0] = priv->topX;
218 values[1] = priv->topY;
219 values[2] = priv->bottomX;
220 values[3] = priv->bottomY;
221 prop_tablet_area = InitWcmAtom(local->dev, WACOM_PROP_TABLET_AREA, 32, 4, values);
217 values[0] = priv->topX;
218 values[1] = priv->topY;
219 values[2] = priv->bottomX;
220 values[3] = priv->bottomY;
221 prop_tablet_area = InitWcmAtom(local->dev, WACOM_PROP_TABLET_AREA, 32, 4, values);
222222
223 values[0] = common->wcmRotate;
224 prop_rotation = InitWcmAtom(local->dev, WACOM_PROP_ROTATION, 8, 1, values);
223 values[0] = common->wcmRotate;
224 prop_rotation = InitWcmAtom(local->dev, WACOM_PROP_ROTATION, 8, 1, values);
225225
226 values[0] = 0;
227 values[1] = 0;
228 values[2] = 100;
229 values[3] = 100;
230 prop_pressurecurve = InitWcmAtom(local->dev, WACOM_PROP_PRESSURECURVE, 32, 4, values);
226 values[0] = 0;
227 values[1] = 0;
228 values[2] = 100;
229 values[3] = 100;
230 prop_pressurecurve = InitWcmAtom(local->dev, WACOM_PROP_PRESSURECURVE, 32, 4, values);
231231
232 values[0] = common->tablet_id;
233 values[1] = priv->old_serial;
234 values[2] = priv->old_device_id;
235 values[3] = priv->serial;
236 prop_serials = InitWcmAtom(local->dev, WACOM_PROP_SERIALIDS, 32, 4, values);
232 values[0] = common->tablet_id;
233 values[1] = priv->old_serial;
234 values[2] = priv->old_device_id;
235 values[3] = priv->serial;
236 prop_serials = InitWcmAtom(local->dev, WACOM_PROP_SERIALIDS, 32, 4, values);
237237
238 values[0] = priv->striplup;
239 values[1] = priv->stripldn;
240 values[2] = priv->striprup;
241 values[3] = priv->striprdn;
242 prop_strip_buttons = InitWcmAtom(local->dev, WACOM_PROP_STRIPBUTTONS, 8, 4, values);
238 values[0] = priv->striplup;
239 values[1] = priv->stripldn;
240 values[2] = priv->striprup;
241 values[3] = priv->striprdn;
242 prop_strip_buttons = InitWcmAtom(local->dev, WACOM_PROP_STRIPBUTTONS, 8, 4, values);
243243
244 values[0] = priv->relup;
245 values[1] = priv->reldn;
246 values[2] = priv->wheelup;
247 values[3] = priv->wheeldn;
248 prop_wheel_buttons = InitWcmAtom(local->dev, WACOM_PROP_WHEELBUTTONS, 8, 4, values);
244 values[0] = priv->relup;
245 values[1] = priv->reldn;
246 values[2] = priv->wheelup;
247 values[3] = priv->wheeldn;
248 prop_wheel_buttons = InitWcmAtom(local->dev, WACOM_PROP_WHEELBUTTONS, 8, 4, values);
249249
250 values[0] = priv->tvResolution[0];
251 values[1] = priv->tvResolution[1];
252 values[2] = priv->tvResolution[2];
253 values[3] = priv->tvResolution[3];
254 prop_tv_resolutions = InitWcmAtom(local->dev, WACOM_PROP_TWINVIEW_RES, 32, 4, values);
250 values[0] = priv->tvResolution[0];
251 values[1] = priv->tvResolution[1];
252 values[2] = priv->tvResolution[2];
253 values[3] = priv->tvResolution[3];
254 prop_tv_resolutions = InitWcmAtom(local->dev, WACOM_PROP_TWINVIEW_RES, 32, 4, values);
255255
256256
257 values[0] = priv->screen_no;
258 values[1] = priv->twinview;
259 values[2] = priv->wcmMMonitor;
260 prop_display = InitWcmAtom(local->dev, WACOM_PROP_DISPLAY_OPTS, 8, 3, values);
257 values[0] = priv->screen_no;
258 values[1] = priv->twinview;
259 values[2] = priv->wcmMMonitor;
260 prop_display = InitWcmAtom(local->dev, WACOM_PROP_DISPLAY_OPTS, 8, 3, values);
261261
262 values[0] = priv->screenTopX[priv->currentScreen];
263 values[1] = priv->screenTopY[priv->currentScreen];
264 values[2] = priv->screenBottomX[priv->currentScreen];
265 values[3] = priv->screenBottomY[priv->currentScreen];
266 prop_screen = InitWcmAtom(local->dev, WACOM_PROP_SCREENAREA, 32, 4, values);
262 values[0] = priv->screenTopX[priv->currentScreen];
263 values[1] = priv->screenTopY[priv->currentScreen];
264 values[2] = priv->screenBottomX[priv->currentScreen];
265 values[3] = priv->screenBottomY[priv->currentScreen];
266 prop_screen = InitWcmAtom(local->dev, WACOM_PROP_SCREENAREA, 32, 4, values);
267267
268 values[0] = common->wcmCursorProxoutDist;
269 prop_cursorprox = InitWcmAtom(local->dev, WACOM_PROP_PROXIMITY_THRESHOLD, 32, 1, values);
268 values[0] = common->wcmCursorProxoutDist;
269 prop_cursorprox = InitWcmAtom(local->dev, WACOM_PROP_PROXIMITY_THRESHOLD, 32, 1, values);
270270
271 values[0] = common->wcmCapacity;
272 prop_capacity = InitWcmAtom(local->dev, WACOM_PROP_CAPACITY, 32, 1, values);
271 values[0] = common->wcmCapacity;
272 prop_capacity = InitWcmAtom(local->dev, WACOM_PROP_CAPACITY, 32, 1, values);
273273
274 values[0] = (!common->wcmMaxZ) ? 0 : common->wcmThreshold;
275 prop_threshold = InitWcmAtom(local->dev, WACOM_PROP_PRESSURE_THRESHOLD, 32, 1, values);
274 values[0] = (!common->wcmMaxZ) ? 0 : common->wcmThreshold;
275 prop_threshold = InitWcmAtom(local->dev, WACOM_PROP_PRESSURE_THRESHOLD, 32, 1, values);
276276
277 values[0] = common->wcmSuppress;
278 values[1] = common->wcmRawSample;
279 prop_suppress = InitWcmAtom(local->dev, WACOM_PROP_SAMPLE, 32, 2, values);
277 values[0] = common->wcmSuppress;
278 values[1] = common->wcmRawSample;
279 prop_suppress = InitWcmAtom(local->dev, WACOM_PROP_SAMPLE, 32, 2, values);
280280
281 values[0] = common->wcmTouch;
282 prop_touch = InitWcmAtom(local->dev, WACOM_PROP_TOUCH, 8, 1, values);
281 values[0] = common->wcmTouch;
282 prop_touch = InitWcmAtom(local->dev, WACOM_PROP_TOUCH, 8, 1, values);
283283
284 values[0] = !common->wcmTPCButton;
285 prop_hover = InitWcmAtom(local->dev, WACOM_PROP_HOVER, 8, 1, values);
284 values[0] = !common->wcmTPCButton;
285 prop_hover = InitWcmAtom(local->dev, WACOM_PROP_HOVER, 8, 1, values);
286286
287287
288 values[0] = MakeAtom(local->type_name, strlen(local->type_name), TRUE);
289 prop_tooltype = InitWcmAtom(local->dev, WACOM_PROP_TOOL_TYPE, -32, 1, values);
288 values[0] = MakeAtom(local->type_name, strlen(local->type_name), TRUE);
289 prop_tooltype = InitWcmAtom(local->dev, WACOM_PROP_TOOL_TYPE, -32, 1, values);
290290
291 /* default to no actions */
292 memset(values, 0, sizeof(values));
293 prop_btnactions = InitWcmAtom(local->dev, WACOM_PROP_BUTTON_ACTIONS, -32, WCM_MAX_MOUSE_BUTTONS, values);
291 /* default to no actions */
292 memset(values, 0, sizeof(values));
293 prop_btnactions = InitWcmAtom(local->dev, WACOM_PROP_BUTTON_ACTIONS, -32, WCM_MAX_MOUSE_BUTTONS, values);
294294
295295#ifdef DEBUG
296 values[0] = priv->debugLevel;
297 values[1] = common->debugLevel;
298 prop_debuglevels = InitWcmAtom(local->dev, WACOM_PROP_DEBUGLEVELS, 8, 2, values);
296 values[0] = priv->debugLevel;
297 values[1] = common->debugLevel;
298 prop_debuglevels = InitWcmAtom(local->dev, WACOM_PROP_DEBUGLEVELS, 8, 2, values);
299299#endif
300300}
301301
302302int xf86WcmSetProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr prop,
303 BOOL checkonly)
303 BOOL checkonly)
304304{
305 LocalDevicePtr local = (LocalDevicePtr) dev->public.devicePrivate;
306 WacomDevicePtr priv = (WacomDevicePtr) local->private;
307 WacomCommonPtr common = priv->common;
305 LocalDevicePtr local = (LocalDevicePtr) dev->public.devicePrivate;
306 WacomDevicePtr priv = (WacomDevicePtr) local->private;
307 WacomCommonPtr common = priv->common;
308308
309 DBG(10, priv, "\n");
309 DBG(10, priv, "\n");
310310
311 if (property == prop_tablet_area)
312 {
313 INT32 *values = (INT32*)prop->data;
314 WacomToolAreaPtr area = priv->toolarea;
311 if (property == prop_tablet_area)
312 {
313 INT32 *values = (INT32*)prop->data;
314 WacomToolAreaPtr area = priv->toolarea;
315315
316 if (prop->size != 4 || prop->format != 32)
317 return BadValue;
316 if (prop->size != 4 || prop->format != 32)
317 return BadValue;
318318
319 /* value validation is unnecessary since we let utility programs, such as
320 * xsetwacom and userland control panel take care of the validation role.
321 * when all four values are set to -1, it is an area reset (xydefault) */
322 if ((values[0] != -1) || (values[1] != -1) ||
323 (values[2] != -1) || (values[3] != -1))
324 {
325 WacomToolArea tmp_area = *area;
319 /* value validation is unnecessary since we let utility programs, such as
320 * xsetwacom and userland control panel take care of the validation role.
321 * when all four values are set to -1, it is an area reset (xydefault) */
322 if ((values[0] != -1) || (values[1] != -1) ||
323 (values[2] != -1) || (values[3] != -1))
324 {
325 WacomToolArea tmp_area = *area;
326326
327 area->topX = values[0];
328 area->topY = values[1];
329 area->bottomX = values[2];
330 area->bottomY = values[3];
327 area->topX = values[0];
328 area->topY = values[1];
329 area->bottomX = values[2];
330 area->bottomY = values[3];
331331
332 /* validate the area */
333 if (WcmAreaListOverlap(area, priv->tool->arealist))
334 {
335 *area = tmp_area;
336 return BadValue;
337 }
338 *area = tmp_area;
339 }
332 /* validate the area */
333 if (WcmAreaListOverlap(area, priv->tool->arealist))
334 {
335 *area = tmp_area;
336 return BadValue;
337 }
338 *area = tmp_area;
339 }
340340
341 if (!checkonly)
342 {
343 if ((values[0] == -1) && (values[1] == -1) &&
344 (values[2] == -1) && (values[3] == -1))
345 {
346 values[0] = 0;
347 values[1] = 0;
348 values[2] = priv->maxX;
349 values[3] = priv->maxY;
350 }
341 if (!checkonly)
342 {
343 if ((values[0] == -1) && (values[1] == -1) &&
344 (values[2] == -1) && (values[3] == -1))
345 {
346 values[0] = 0;
347 values[1] = 0;
348 values[2] = priv->maxX;
349 values[3] = priv->maxY;
350 }
351351
352 priv->topX = area->topX = values[0];
353 priv->topY = area->topY = values[1];
354 priv->bottomX = area->bottomX = values[2];
355 priv->bottomY = area->bottomY = values[3];
356 xf86WcmInitialCoordinates(local, 0);
357 xf86WcmInitialCoordinates(local, 1);
358 }
359 } else if (property == prop_pressurecurve)
360 {
361 INT32 *pcurve;
352 priv->topX = area->topX = values[0];
353 priv->topY = area->topY = values[1];
354 priv->bottomX = area->bottomX = values[2];
355 priv->bottomY = area->bottomY = values[3];
356 xf86WcmInitialCoordinates(local, 0);
357 xf86WcmInitialCoordinates(local, 1);
358 }
359 } else if (property == prop_pressurecurve)
360 {
361 INT32 *pcurve;
362362
363 if (prop->size != 4 || prop->format != 32)
364 return BadValue;
363 if (prop->size != 4 || prop->format != 32)
364 return BadValue;
365365
366 pcurve = (INT32*)prop->data;
366 pcurve = (INT32*)prop->data;
367367
368 if ((pcurve[0] > 100) || (pcurve[1] > 100) ||
369 (pcurve[2] > 100) || (pcurve[3] > 100))
370 return BadValue;
368 if ((pcurve[0] > 100) || (pcurve[1] > 100) ||
369 (pcurve[2] > 100) || (pcurve[3] > 100))
370 return BadValue;
371371
372 if (IsCursor(priv) || IsPad (priv) || IsTouch (priv))
373 return BadValue;
372 if (IsCursor(priv) || IsPad (priv) || IsTouch (priv))
373 return BadValue;
374374
375 if (!checkonly)
376 wcmSetPressureCurve (priv, pcurve[0], pcurve[1],
377 pcurve[2], pcurve[3]);
378 } else if (property == prop_suppress)
379 {
380 CARD32 *values;
375 if (!checkonly)
376 wcmSetPressureCurve (priv, pcurve[0], pcurve[1],
377 pcurve[2], pcurve[3]);
378 } else if (property == prop_suppress)
379 {
380 CARD32 *values;
381381
382 if (prop->size != 2 || prop->format != 32)
383 return BadValue;
382 if (prop->size != 2 || prop->format != 32)
383 return BadValue;
384384
385 values = (CARD32*)prop->data;
385 values = (CARD32*)prop->data;
386386
387 if ((values[0] < 0) || (values[0] > 100))
388 return BadValue;
387 if ((values[0] < 0) || (values[0] > 100))
388 return BadValue;
389389
390 if ((values[1] < 0) || (values[1] > XWACOM_MAX_SAMPLES))
391 return BadValue;
390 if ((values[1] < 0) || (values[1] > XWACOM_MAX_SAMPLES))
391 return BadValue;
392392
393 if (!checkonly)
394 {
395 common->wcmSuppress = values[0];
396 common->wcmRawSample = values[1];
397 }
398 } else if (property == prop_rotation)
399 {
400 CARD8 value;
401 if (prop->size != 1 || prop->format != 8)
402 return BadValue;
393 if (!checkonly)
394 {
395 common->wcmSuppress = values[0];
396 common->wcmRawSample = values[1];
397 }
398 } else if (property == prop_rotation)
399 {
400 CARD8 value;
401 if (prop->size != 1 || prop->format != 8)
402 return BadValue;
403403
404 value = *(CARD8*)prop->data;
404 value = *(CARD8*)prop->data;
405405
406 if (value > 3)
407 return BadValue;
406 if (value > 3)
407 return BadValue;
408408
409 if (!checkonly && common->wcmRotate != value)
410 xf86WcmRotateTablet(local, value);
411 } else if (property == prop_serials)
412 {
413 return BadValue; /* Read-only */
414 } else if (property == prop_strip_buttons)
415 {
416 CARD8 *values;
409 if (!checkonly && common->wcmRotate != value)
410 xf86WcmRotateTablet(local, value);
411 } else if (property == prop_serials)
412 {
413 return BadValue; /* Read-only */
414 } else if (property == prop_strip_buttons)
415 {
416 CARD8 *values;
417417
418 if (prop->size != 4 || prop->format != 8)
419 return BadValue;
418 if (prop->size != 4 || prop->format != 8)
419 return BadValue;
420420
421 values = (CARD8*)prop->data;
421 values = (CARD8*)prop->data;
422422
423 if (values[0] > WCM_MAX_MOUSE_BUTTONS ||
424 values[1] > WCM_MAX_MOUSE_BUTTONS ||
425 values[2] > WCM_MAX_MOUSE_BUTTONS ||
426 values[3] > WCM_MAX_MOUSE_BUTTONS)
427 return BadValue;
423 if (values[0] > WCM_MAX_MOUSE_BUTTONS ||
424 values[1] > WCM_MAX_MOUSE_BUTTONS ||
425 values[2] > WCM_MAX_MOUSE_BUTTONS ||
426 values[3] > WCM_MAX_MOUSE_BUTTONS)
427 return BadValue;
428428
429 if (!checkonly)
430 {
431 /* FIXME: needs to take AC_* into account */
432 priv->striplup = values[0];
433 priv->stripldn = values[1];
434 priv->striprup = values[2];
435 priv->striprdn = values[3];
436 }
429 if (!checkonly)
430 {
431 /* FIXME: needs to take AC_* into account */
432 priv->striplup = values[0];
433 priv->stripldn = values[1];
434 priv->striprup = values[2];
435 priv->striprdn = values[3];
436 }
437437
438 } else if (property == prop_wheel_buttons)
439 {
440 CARD8 *values;
438 } else if (property == prop_wheel_buttons)
439 {
440 CARD8 *values;
441441
442 if (prop->size != 4 || prop->format != 8)
443 return BadValue;
442 if (prop->size != 4 || prop->format != 8)
443 return BadValue;
444444
445 values = (CARD8*)prop->data;
445 values = (CARD8*)prop->data;
446446
447 if (values[0] > WCM_MAX_MOUSE_BUTTONS ||
448 values[1] > WCM_MAX_MOUSE_BUTTONS ||
449 values[2] > WCM_MAX_MOUSE_BUTTONS ||
450 values[3] > WCM_MAX_MOUSE_BUTTONS)
451 return BadValue;
447 if (values[0] > WCM_MAX_MOUSE_BUTTONS ||
448 values[1] > WCM_MAX_MOUSE_BUTTONS ||
449 values[2] > WCM_MAX_MOUSE_BUTTONS ||
450 values[3] > WCM_MAX_MOUSE_BUTTONS)
451 return BadValue;
452452
453 if (!checkonly)
454 {
455 /* FIXME: needs to take AC_* into account */
456 priv->relup = values[0];
457 priv->reldn = values[1];
458 priv->wheelup = values[2];
459 priv->wheeldn = values[3];
460 }
461 } else if (property == prop_screen)
462 {
463 /* Long-term, this property should be removed, there's other ways to
464 * get the screen resolution. For now, we leave it in for backwards
465 * compat */
466 return BadValue; /* Read-only */
467 } else if (property == prop_display)
468 {
469 INT8 *values;
453 if (!checkonly)
454 {
455 /* FIXME: needs to take AC_* into account */
456 priv->relup = values[0];
457 priv->reldn = values[1];
458 priv->wheelup = values[2];
459 priv->wheeldn = values[3];
460 }
461 } else if (property == prop_screen)
462 {
463 /* Long-term, this property should be removed, there's other ways to
464 * get the screen resolution. For now, we leave it in for backwards
465 * compat */
466 return BadValue; /* Read-only */
467 } else if (property == prop_display)
468 {
469 INT8 *values;
470470
471 if (prop->size != 3 || prop->format != 8)
472 return BadValue;
471 if (prop->size != 3 || prop->format != 8)
472 return BadValue;
473473
474 values = (INT8*)prop->data;
474 values = (INT8*)prop->data;
475475
476 if (values[0] < -1 || values[0] >= priv->numScreen)
477 return BadValue;
476 if (values[0] < -1 || values[0] >= priv->numScreen)
477 return BadValue;
478478
479 if (values[1] < TV_NONE || values[1] > TV_MAX)
480 return BadValue;
479 if (values[1] < TV_NONE || values[1] > TV_MAX)
480 return BadValue;
481481
482 if ((values[2] != 0) && (values[2] != 1))
483 return BadValue;
482 if ((values[2] != 0) && (values[2] != 1))
483 return BadValue;
484484
485 if (!checkonly)
486 {
487 if (priv->screen_no != values[0])
488 xf86WcmChangeScreen(local, values[0]);
489 priv->screen_no = values[0];
485 if (!checkonly)
486 {
487 if (priv->screen_no != values[0])
488 xf86WcmChangeScreen(local, values[0]);
489 priv->screen_no = values[0];
490490
491 if (priv->twinview != values[1])
492 {
493 int screen = priv->screen_no;
494 priv->twinview = values[1];
491 if (priv->twinview != values[1])
492 {
493 int screen = priv->screen_no;
494 priv->twinview = values[1];
495495
496 /* Can not restrict the cursor to a particular screen */
497 if (!values[1] && (screenInfo.numScreens == 1))
498 {
499 screen = -1;
500 priv->currentScreen = 0;
501 DBG(10, priv, "TwinView sets to "
502 "TV_NONE: can't change screen_no. \n");
503 }
504 xf86WcmChangeScreen(local, screen);
505 }
496 /* Can not restrict the cursor to a particular screen */
497 if (!values[1] && (screenInfo.numScreens == 1))
498 {
499 screen = -1;
500 priv->currentScreen = 0;
501 DBG(10, priv, "TwinView sets to "
502 "TV_NONE: can't change screen_no. \n");
503 }
504 xf86WcmChangeScreen(local, screen);
505 }
506506
507 priv->wcmMMonitor = values[2];
508 }
509 } else if (property == prop_cursorprox)
510 {
511 CARD32 value;
507 priv->wcmMMonitor = values[2];
508 }
509 } else if (property == prop_cursorprox)
510 {
511 CARD32 value;
512512
513 if (prop->size != 1 || prop->format != 32)
514 return BadValue;
513 if (prop->size != 1 || prop->format != 32)
514 return BadValue;
515515
516 if (!IsCursor (priv))
517 return BadValue;
516 if (!IsCursor (priv))
517 return BadValue;
518518
519 value = *(CARD32*)prop->data;
519 value = *(CARD32*)prop->data;
520520
521 if (value > 255)
522 return BadValue;
521 if (value > 255)
522 return BadValue;
523523
524 if (!checkonly)
525 common->wcmCursorProxoutDist = value;
526 } else if (property == prop_capacity)
527 {
528 INT32 value;
524 if (!checkonly)
525 common->wcmCursorProxoutDist = value;
526 } else if (property == prop_capacity)
527 {
528 INT32 value;
529529
530 if (prop->size != 1 || prop->format != 32)
531 return BadValue;
530 if (prop->size != 1 || prop->format != 32)
531 return BadValue;
532532
533 value = *(INT32*)prop->data;
533 value = *(INT32*)prop->data;
534534
535 if ((value < -1) || (value > 5))
536 return BadValue;
535 if ((value < -1) || (value > 5))
536 return BadValue;
537537
538 if (!checkonly)
539 common->wcmCapacity = value;
538 if (!checkonly)
539 common->wcmCapacity = value;
540540
541 } else if (property == prop_threshold)
542 {
543 CARD32 value;
541 } else if (property == prop_threshold)
542 {
543 CARD32 value;
544544
545 if (prop->size != 1 || prop->format != 32)
546 return BadValue;
545 if (prop->size != 1 || prop->format != 32)
546 return BadValue;
547547
548 value = *(CARD32*)prop->data;
548 value = *(CARD32*)prop->data;
549549
550 if ((value < 1) || (value > 21))
551 return BadValue;
550 if ((value < 1) || (value > 21))
551 return BadValue;
552552
553 if (!checkonly)
554 common->wcmThreshold = value;
555 } else if (property == prop_touch)
556 {
557 CARD8 *values = (CARD8*)prop->data;
553 if (!checkonly)
554 common->wcmThreshold = value;
555 } else if (property == prop_touch)
556 {
557 CARD8 *values = (CARD8*)prop->data;
558558
559 if (prop->size != 1 || prop->format != 8)
560 return BadValue;
559 if (prop->size != 1 || prop->format != 8)
560 return BadValue;
561561
562 if ((values[0] != 0) && (values[0] != 1))
563 return BadValue;
562 if ((values[0] != 0) && (values[0] != 1))
563 return BadValue;
564564
565 if (!checkonly && common->wcmTouch != values[0])
566 common->wcmTouch = values[0];
567 } else if (property == prop_hover)
568 {
569 CARD8 *values = (CARD8*)prop->data;
565 if (!checkonly && common->wcmTouch != values[0])
566 common->wcmTouch = values[0];
567 } else if (property == prop_hover)
568 {
569 CARD8 *values = (CARD8*)prop->data;
570570
571 if (prop->size != 1 || prop->format != 8)
572 return BadValue;
571 if (prop->size != 1 || prop->format != 8)
572 return BadValue;
573573
574 if ((values[0] != 0) && (values[0] != 1))
575 return BadValue;
574 if ((values[0] != 0) && (values[0] != 1))
575 return BadValue;
576576
577 if (!checkonly && common->wcmTPCButton != !values[0])
578 common->wcmTPCButton = !values[0];
579 } else if (property == prop_tv_resolutions)
580 {
581 CARD32 *values;
577 if (!checkonly && common->wcmTPCButton != !values[0])
578 common->wcmTPCButton = !values[0];
579 } else if (property == prop_tv_resolutions)
580 {
581 CARD32 *values;
582582
583 if (prop->size != 4 || prop->format != 32)
584 return BadValue;
583 if (prop->size != 4 || prop->format != 32)
584 return BadValue;
585585
586 values = (CARD32*)prop->data;
586 values = (CARD32*)prop->data;
587587
588 /* non-TwinView settings can not set TwinView RESOLUTION */
589 if ((priv->twinview == TV_NONE) || (values[0] < 0) ||
590 (values[1] < 0) || (values[2] < 0) || (values[3] < 0) ||
591 ((values[0] + values[2]) != screenInfo.screens[0]->width) ||
592 ((values[1] + values[3]) != screenInfo.screens[0]->height))
593 return BadValue;
588 /* non-TwinView settings can not set TwinView RESOLUTION */
589 if ((priv->twinview == TV_NONE) || (values[0] < 0) ||
590 (values[1] < 0) || (values[2] < 0) || (values[3] < 0) ||
591 ((values[0] + values[2]) != screenInfo.screens[0]->width) ||
592 ((values[1] + values[3]) != screenInfo.screens[0]->height))
593 return BadValue;
594594
595 if (!checkonly)
596 {
597 priv->tvResolution[0] = values[0];
598 priv->tvResolution[1] = values[1];
599 priv->tvResolution[2] = values[2];
600 priv->tvResolution[3] = values[3];
595 if (!checkonly)
596 {
597 priv->tvResolution[0] = values[0];
598 priv->tvResolution[1] = values[1];
599 priv->tvResolution[2] = values[2];
600 priv->tvResolution[3] = values[3];
601601
602 /* reset screen info */
603 xf86WcmChangeScreen(local, priv->screen_no);
604 }
602 /* reset screen info */
603 xf86WcmChangeScreen(local, priv->screen_no);
604 }
605605#ifdef DEBUG
606 } else if (property == prop_debuglevels)
607 {
608 CARD8 *values;
606 } else if (property == prop_debuglevels)
607 {
608 CARD8 *values;
609609
610 if (prop->size != 2 || prop->format != 8)
611 return BadMatch;
610 if (prop->size != 2 || prop->format != 8)
611 return BadMatch;
612612
613 values = (CARD8*)prop->data;
614 if (values[0] > 10 || values[1] > 10)
615 return BadValue;
613 values = (CARD8*)prop->data;
614 if (values[0] > 10 || values[1] > 10)
615 return BadValue;
616616
617 if (!checkonly)
618 {
619 priv->debugLevel = values[0];
620 common->debugLevel = values[1];
621 }
617 if (!checkonly)
618 {
619 priv->debugLevel = values[0];
620 common->debugLevel = values[1];
621 }
622622#endif
623 } else if (property == prop_btnactions)
624 {
625 Atom *values;
626 int i, j;
627 XIPropertyValuePtr val;
623 } else if (property == prop_btnactions)
624 {
625 Atom *values;
626 int i, j;
627 XIPropertyValuePtr val;
628628
629 if (prop->size != WCM_MAX_MOUSE_BUTTONS || prop->format != 32 ||
630 prop->type != XA_ATOM)
631 return BadMatch;
629 if (prop->size != WCM_MAX_MOUSE_BUTTONS || prop->format != 32 ||
630 prop->type != XA_ATOM)
631 return BadMatch;
632632
633 /* How this works:
634 * prop_btnactions has a list of atoms stored. Any atom references
635 * another property on that device that contains the actual action.
636 * If this property changes, all action-properties are queried for
637 * their value and their value is stored in priv->key[button].
638 *
639 * If the button is pressed, the actions are executed.
640 *
641 * Any button action property needs to be monitored by this property
642 * handler too.
643 */
633 /* How this works:
634 * prop_btnactions has a list of atoms stored. Any atom references
635 * another property on that device that contains the actual action.
636 * If this property changes, all action-properties are queried for
637 * their value and their value is stored in priv->key[button].
638 *
639 * If the button is pressed, the actions are executed.
640 *
641 * Any button action property needs to be monitored by this property
642 * handler too.
643 */
644644
645 values = (Atom*)prop->data;
645 values = (Atom*)prop->data;
646646
647 for (i = 0; i < prop->size; i++)
648 {
649 if (!values[i])
650 continue;
647 for (i = 0; i < prop->size; i++)
648 {
649 if (!values[i])
650 continue;
651651
652 if (values[i] == property || !ValidAtom(values[i]))
653 return BadValue;
652 if (values[i] == property || !ValidAtom(values[i]))
653 return BadValue;
654654
655 if (XIGetDeviceProperty(local->dev, values[i], &val) != Success)
656 return BadValue;
657 }
655 if (XIGetDeviceProperty(local->dev, values[i], &val) != Success)
656 return BadValue;
657 }
658658
659 if (!checkonly)
660 {
661 /* any action property needs to be registered for this handler. */
662 for (i = 0; i < prop->size; i++)
663 priv->btn_actions[i] = values[i];
659 if (!checkonly)
660 {
661 /* any action property needs to be registered for this handler. */
662 for (i = 0; i < prop->size; i++)
663 priv->btn_actions[i] = values[i];
664664
665 for (i = 0; i < prop->size; i++)
666 {
667 if (!values[i])
668 continue;
665 for (i = 0; i < prop->size; i++)
666 {
667 if (!values[i])
668 continue;
669669
670 XIGetDeviceProperty(local->dev, values[i], &val);
670 XIGetDeviceProperty(local->dev, values[i], &val);
671671
672 memset(priv->keys[i], 0, sizeof(priv->keys[i]));
673 for (j = 0; j < val->size; j++)
674 priv->keys[i][j] = ((unsigned int*)val->data)[j];
675 }
672 memset(priv->keys[i], 0, sizeof(priv->keys[i]));
673 for (j = 0; j < val->size; j++)
674 priv->keys[i][j] = ((unsigned int*)val->data)[j];
675 }
676676
677 }
678 } else
679 {
680 int i, j;
677 }
678 } else
679 {
680 int i, j;
681681
682 /* check all properties used for button actions */
683 for (i = 0; i < ARRAY_SIZE(priv->btn_actions); i++)
684 if (priv->btn_actions[i] == property)
685 break;
682 /* check all properties used for button actions */
683 for (i = 0; i < ARRAY_SIZE(priv->btn_actions); i++)
684 if (priv->btn_actions[i] == property)
685 break;
686686
687 if (i < ARRAY_SIZE(priv->btn_actions))
688 {
689 CARD32 *data;
690 int code;
691 int type;
687 if (i < ARRAY_SIZE(priv->btn_actions))
688 {
689 CARD32 *data;
690 int code;
691 int type;
692692
693 if (prop->size >= 255 || prop->format != 32 ||
694 prop->type != XA_INTEGER)
695 return BadMatch;
693 if (prop->size >= 255 || prop->format != 32 ||
694 prop->type != XA_INTEGER)
695 return BadMatch;
696696
697 data = (CARD32*)prop->data;
697 data = (CARD32*)prop->data;
698698
699 for (j = 0;j < prop->size; j++)
700 {
701 code = data[j] & AC_CODE;
702 type = data[j] & AC_TYPE;
699 for (j = 0;j < prop->size; j++)
700 {
701 code = data[j] & AC_CODE;
702 type = data[j] & AC_TYPE;
703703
704 switch(type)
705 {
706 case AC_KEY:
707 break;
708 case AC_BUTTON:
709 if (code > WCM_MAX_MOUSE_BUTTONS)
710 return BadValue;
711 break;
712 case AC_DISPLAYTOGGLE:
713 case AC_MODETOGGLE:
714 case AC_DBLCLICK:
715 break;
716 default:
717 return BadValue;
718 }
704 switch(type)
705 {
706 case AC_KEY:
707 break;
708 case AC_BUTTON:
709 if (code > WCM_MAX_MOUSE_BUTTONS)
710 return BadValue;
711 break;
712 case AC_DISPLAYTOGGLE:
713 case AC_MODETOGGLE:
714 case AC_DBLCLICK:
715 break;
716 default:
717 return BadValue;
718 }
719719
720 if (!checkonly)
721 {
722 memset(priv->keys[i], 0, sizeof(priv->keys[i]));
723 for (j = 0; j < prop->size; j++)
724 priv->keys[i][j] = data[j];
725 }
726 }
727 }
728 }
720 if (!checkonly)
721 {
722 memset(priv->keys[i], 0, sizeof(priv->keys[i]));
723 for (j = 0; j < prop->size; j++)
724 priv->keys[i][j] = data[j];
725 }
726 }
727 }
728 }
729729
730 return Success;
730 return Success;
731731}
732732#endif /* GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 3 */
733733/* vim: set noexpandtab shiftwidth=8: */