1 | /************************************************************ |
2 | |
3 | Copyright 1989, 1998 The Open Group |
4 | |
5 | Permission to use, copy, modify, distribute, and sell this software and its |
6 | documentation for any purpose is hereby granted without fee, provided that |
7 | the above copyright notice appear in all copies and that both that |
8 | copyright notice and this permission notice appear in supporting |
9 | documentation. |
10 | |
11 | The above copyright notice and this permission notice shall be included in |
12 | all copies or substantial portions of the Software. |
13 | |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
17 | OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN |
18 | AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
19 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
20 | |
21 | Except as contained in this notice, the name of The Open Group shall not be |
22 | used in advertising or otherwise to promote the sale, use or other dealings |
23 | in this Software without prior written authorization from The Open Group. |
24 | |
25 | Copyright 1989 by Hewlett-Packard Company, Palo Alto, California. |
26 | |
27 | All Rights Reserved |
28 | |
29 | Permission to use, copy, modify, and distribute this software and its |
30 | documentation for any purpose and without fee is hereby granted, |
31 | provided that the above copyright notice appear in all copies and that |
32 | both that copyright notice and this permission notice appear in |
33 | supporting documentation, and that the name of Hewlett-Packard not be |
34 | used in advertising or publicity pertaining to distribution of the |
35 | software without specific, written prior permission. |
36 | |
37 | HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING |
38 | ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL |
39 | HEWLETT-PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR |
40 | ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, |
41 | WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, |
42 | ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS |
43 | SOFTWARE. |
44 | |
45 | ********************************************************/ |
46 | |
47 | /* Definitions used by the library and client */ |
48 | |
49 | #ifndef _XINPUT_H_ |
50 | #define _XINPUT_H_ |
51 | |
52 | #include <X11/Xlib.h> |
53 | #include <X11/extensions/XI.h> |
54 | |
55 | #define _deviceKeyPress 0 |
56 | #define _deviceKeyRelease 1 |
57 | |
58 | #define _deviceButtonPress 0 |
59 | #define _deviceButtonRelease 1 |
60 | |
61 | #define _deviceMotionNotify 0 |
62 | |
63 | #define _deviceFocusIn 0 |
64 | #define _deviceFocusOut 1 |
65 | |
66 | #define _proximityIn 0 |
67 | #define _proximityOut 1 |
68 | |
69 | #define _deviceStateNotify 0 |
70 | #define _deviceMappingNotify 1 |
71 | #define _changeDeviceNotify 2 |
72 | /* Space of 3 between is necessary! Reserved for DeviceKeyStateNotify, |
73 | DeviceButtonStateNotify, DevicePresenceNotify (essentially unused). This |
74 | code has to be in sync with FixExtensionEvents() in xserver/Xi/extinit.c */ |
75 | #define _propertyNotify 6 |
76 | |
77 | #define FindTypeAndClass(d,type,_class,classid,offset) \ |
78 | { int _i; XInputClassInfo *_ip; \ |
79 | type = 0; _class = 0; \ |
80 | for (_i=0, _ip= ((XDevice *) d)->classes; \ |
81 | _i< ((XDevice *) d)->num_classes; \ |
82 | _i++, _ip++) \ |
83 | if (_ip->input_class == classid) \ |
84 | {type = _ip->event_type_base + offset; \ |
85 | _class = ((XDevice *) d)->device_id << 8 | type;}} |
86 | |
87 | #define DeviceKeyPress(d,type,_class) \ |
88 | FindTypeAndClass(d, type, _class, KeyClass, _deviceKeyPress) |
89 | |
90 | #define DeviceKeyRelease(d,type,_class) \ |
91 | FindTypeAndClass(d, type, _class, KeyClass, _deviceKeyRelease) |
92 | |
93 | #define DeviceButtonPress(d,type,_class) \ |
94 | FindTypeAndClass(d, type, _class, ButtonClass, _deviceButtonPress) |
95 | |
96 | #define DeviceButtonRelease(d,type,_class) \ |
97 | FindTypeAndClass(d, type, _class, ButtonClass, _deviceButtonRelease) |
98 | |
99 | #define DeviceMotionNotify(d,type,_class) \ |
100 | FindTypeAndClass(d, type, _class, ValuatorClass, _deviceMotionNotify) |
101 | |
102 | #define DeviceFocusIn(d,type,_class) \ |
103 | FindTypeAndClass(d, type, _class, FocusClass, _deviceFocusIn) |
104 | |
105 | #define DeviceFocusOut(d,type,_class) \ |
106 | FindTypeAndClass(d, type, _class, FocusClass, _deviceFocusOut) |
107 | |
108 | #define ProximityIn(d,type,_class) \ |
109 | FindTypeAndClass(d, type, _class, ProximityClass, _proximityIn) |
110 | |
111 | #define ProximityOut(d,type,_class) \ |
112 | FindTypeAndClass(d, type, _class, ProximityClass, _proximityOut) |
113 | |
114 | #define DeviceStateNotify(d,type,_class) \ |
115 | FindTypeAndClass(d, type, _class, OtherClass, _deviceStateNotify) |
116 | |
117 | #define DeviceMappingNotify(d,type,_class) \ |
118 | FindTypeAndClass(d, type, _class, OtherClass, _deviceMappingNotify) |
119 | |
120 | #define ChangeDeviceNotify(d,type,_class) \ |
121 | FindTypeAndClass(d, type, _class, OtherClass, _changeDeviceNotify) |
122 | |
123 | #define DevicePropertyNotify(d, type, _class) \ |
124 | FindTypeAndClass(d, type, _class, OtherClass, _propertyNotify) |
125 | |
126 | #define DevicePointerMotionHint(d,type,_class) \ |
127 | { _class = ((XDevice *) d)->device_id << 8 | _devicePointerMotionHint;} |
128 | |
129 | #define DeviceButton1Motion(d,type,_class) \ |
130 | { _class = ((XDevice *) d)->device_id << 8 | _deviceButton1Motion;} |
131 | |
132 | #define DeviceButton2Motion(d,type,_class) \ |
133 | { _class = ((XDevice *) d)->device_id << 8 | _deviceButton2Motion;} |
134 | |
135 | #define DeviceButton3Motion(d,type,_class) \ |
136 | { _class = ((XDevice *) d)->device_id << 8 | _deviceButton3Motion;} |
137 | |
138 | #define DeviceButton4Motion(d,type, _class) \ |
139 | { _class = ((XDevice *) d)->device_id << 8 | _deviceButton4Motion;} |
140 | |
141 | #define DeviceButton5Motion(d,type,_class) \ |
142 | { _class = ((XDevice *) d)->device_id << 8 | _deviceButton5Motion;} |
143 | |
144 | #define DeviceButtonMotion(d,type, _class) \ |
145 | { _class = ((XDevice *) d)->device_id << 8 | _deviceButtonMotion;} |
146 | |
147 | #define DeviceOwnerGrabButton(d,type,_class) \ |
148 | { _class = ((XDevice *) d)->device_id << 8 | _deviceOwnerGrabButton;} |
149 | |
150 | #define DeviceButtonPressGrab(d,type,_class) \ |
151 | { _class = ((XDevice *) d)->device_id << 8 | _deviceButtonGrab;} |
152 | |
153 | #define NoExtensionEvent(d,type,_class) \ |
154 | { _class = ((XDevice *) d)->device_id << 8 | _noExtensionEvent;} |
155 | |
156 | |
157 | /* We need the declaration for DevicePresence. */ |
158 | #if defined(__cplusplus) || defined(c_plusplus) |
159 | extern "C" { |
160 | #endif |
161 | extern int _XiGetDevicePresenceNotifyEvent(Display *); |
162 | extern void _xibaddevice( Display *dpy, int *error); |
163 | extern void _xibadclass( Display *dpy, int *error); |
164 | extern void _xibadevent( Display *dpy, int *error); |
165 | extern void _xibadmode( Display *dpy, int *error); |
166 | extern void _xidevicebusy( Display *dpy, int *error); |
167 | #if defined(__cplusplus) || defined(c_plusplus) |
168 | } |
169 | #endif |
170 | |
171 | #define DevicePresence(dpy, type, _class) \ |
172 | { \ |
173 | type = _XiGetDevicePresenceNotifyEvent(dpy); \ |
174 | _class = (0x10000 | _devicePresence); \ |
175 | } |
176 | |
177 | /* Errors */ |
178 | #define BadDevice(dpy,error) _xibaddevice(dpy, &error) |
179 | |
180 | #define BadClass(dpy,error) _xibadclass(dpy, &error) |
181 | |
182 | #define BadEvent(dpy,error) _xibadevent(dpy, &error) |
183 | |
184 | #define BadMode(dpy,error) _xibadmode(dpy, &error) |
185 | |
186 | #define DeviceBusy(dpy,error) _xidevicebusy(dpy, &error) |
187 | |
188 | typedef struct _XAnyClassinfo *XAnyClassPtr; |
189 | |
190 | /*************************************************************** |
191 | * |
192 | * DeviceKey events. These events are sent by input devices that |
193 | * support input class Keys. |
194 | * The location of the X pointer is reported in the coordinate |
195 | * fields of the x,y and x_root,y_root fields. |
196 | * |
197 | */ |
198 | |
199 | typedef struct |
200 | { |
201 | int type; /* of event */ |
202 | unsigned long serial; /* # of last request processed */ |
203 | Bool send_event; /* true if from SendEvent request */ |
204 | Display *display; /* Display the event was read from */ |
205 | Window window; /* "event" window reported relative to */ |
206 | XID deviceid; |
207 | Window root; /* root window event occured on */ |
208 | Window subwindow; /* child window */ |
209 | Time time; /* milliseconds */ |
210 | int x, y; /* x, y coordinates in event window */ |
211 | int x_root; /* coordinates relative to root */ |
212 | int y_root; /* coordinates relative to root */ |
213 | unsigned int state; /* key or button mask */ |
214 | unsigned int keycode; /* detail */ |
215 | Bool same_screen; /* same screen flag */ |
216 | unsigned int device_state; /* device key or button mask */ |
217 | unsigned char axes_count; |
218 | unsigned char first_axis; |
219 | int axis_data[6]; |
220 | } XDeviceKeyEvent; |
221 | |
222 | typedef XDeviceKeyEvent XDeviceKeyPressedEvent; |
223 | typedef XDeviceKeyEvent XDeviceKeyReleasedEvent; |
224 | |
225 | /******************************************************************* |
226 | * |
227 | * DeviceButton events. These events are sent by extension devices |
228 | * that support input class Buttons. |
229 | * |
230 | */ |
231 | |
232 | typedef struct { |
233 | int type; /* of event */ |
234 | unsigned long serial; /* # of last request processed by server */ |
235 | Bool send_event; /* true if from a SendEvent request */ |
236 | Display *display; /* Display the event was read from */ |
237 | Window window; /* "event" window reported relative to */ |
238 | XID deviceid; |
239 | Window root; /* root window that the event occured on */ |
240 | Window subwindow; /* child window */ |
241 | Time time; /* milliseconds */ |
242 | int x, y; /* x, y coordinates in event window */ |
243 | int x_root; /* coordinates relative to root */ |
244 | int y_root; /* coordinates relative to root */ |
245 | unsigned int state; /* key or button mask */ |
246 | unsigned int button; /* detail */ |
247 | Bool same_screen; /* same screen flag */ |
248 | unsigned int device_state; /* device key or button mask */ |
249 | unsigned char axes_count; |
250 | unsigned char first_axis; |
251 | int axis_data[6]; |
252 | } XDeviceButtonEvent; |
253 | |
254 | typedef XDeviceButtonEvent XDeviceButtonPressedEvent; |
255 | typedef XDeviceButtonEvent XDeviceButtonReleasedEvent; |
256 | |
257 | /******************************************************************* |
258 | * |
259 | * DeviceMotionNotify event. These events are sent by extension devices |
260 | * that support input class Valuators. |
261 | * |
262 | */ |
263 | |
264 | typedef struct |
265 | { |
266 | int type; /* of event */ |
267 | unsigned long serial; /* # of last request processed by server */ |
268 | Bool send_event; /* true if from a SendEvent request */ |
269 | Display *display; /* Display the event was read from */ |
270 | Window window; /* "event" window reported relative to */ |
271 | XID deviceid; |
272 | Window root; /* root window that the event occured on */ |
273 | Window subwindow; /* child window */ |
274 | Time time; /* milliseconds */ |
275 | int x, y; /* x, y coordinates in event window */ |
276 | int x_root; /* coordinates relative to root */ |
277 | int y_root; /* coordinates relative to root */ |
278 | unsigned int state; /* key or button mask */ |
279 | char is_hint; /* detail */ |
280 | Bool same_screen; /* same screen flag */ |
281 | unsigned int device_state; /* device key or button mask */ |
282 | unsigned char axes_count; |
283 | unsigned char first_axis; |
284 | int axis_data[6]; |
285 | } XDeviceMotionEvent; |
286 | |
287 | /******************************************************************* |
288 | * |
289 | * DeviceFocusChange events. These events are sent when the focus |
290 | * of an extension device that can be focused is changed. |
291 | * |
292 | */ |
293 | |
294 | typedef struct |
295 | { |
296 | int type; /* of event */ |
297 | unsigned long serial; /* # of last request processed by server */ |
298 | Bool send_event; /* true if from a SendEvent request */ |
299 | Display *display; /* Display the event was read from */ |
300 | Window window; /* "event" window reported relative to */ |
301 | XID deviceid; |
302 | int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */ |
303 | int detail; |
304 | /* |
305 | * NotifyAncestor, NotifyVirtual, NotifyInferior, |
306 | * NotifyNonLinear,NotifyNonLinearVirtual, NotifyPointer, |
307 | * NotifyPointerRoot, NotifyDetailNone |
308 | */ |
309 | Time time; |
310 | } XDeviceFocusChangeEvent; |
311 | |
312 | typedef XDeviceFocusChangeEvent XDeviceFocusInEvent; |
313 | typedef XDeviceFocusChangeEvent XDeviceFocusOutEvent; |
314 | |
315 | /******************************************************************* |
316 | * |
317 | * ProximityNotify events. These events are sent by those absolute |
318 | * positioning devices that are capable of generating proximity information. |
319 | * |
320 | */ |
321 | |
322 | typedef struct |
323 | { |
324 | int type; /* ProximityIn or ProximityOut */ |
325 | unsigned long serial; /* # of last request processed by server */ |
326 | Bool send_event; /* true if this came from a SendEvent request */ |
327 | Display *display; /* Display the event was read from */ |
328 | Window window; |
329 | XID deviceid; |
330 | Window root; |
331 | Window subwindow; |
332 | Time time; |
333 | int x, y; |
334 | int x_root, y_root; |
335 | unsigned int state; |
336 | Bool same_screen; |
337 | unsigned int device_state; /* device key or button mask */ |
338 | unsigned char axes_count; |
339 | unsigned char first_axis; |
340 | int axis_data[6]; |
341 | } XProximityNotifyEvent; |
342 | typedef XProximityNotifyEvent XProximityInEvent; |
343 | typedef XProximityNotifyEvent XProximityOutEvent; |
344 | |
345 | /******************************************************************* |
346 | * |
347 | * DeviceStateNotify events are generated on EnterWindow and FocusIn |
348 | * for those clients who have selected DeviceState. |
349 | * |
350 | */ |
351 | |
352 | typedef struct |
353 | { |
354 | #if defined(__cplusplus) || defined(c_plusplus) |
355 | unsigned char c_class; |
356 | #else |
357 | unsigned char class; |
358 | #endif |
359 | unsigned char length; |
360 | } XInputClass; |
361 | |
362 | typedef struct { |
363 | int type; |
364 | unsigned long serial; /* # of last request processed by server */ |
365 | Bool send_event; /* true if this came from a SendEvent request */ |
366 | Display *display; /* Display the event was read from */ |
367 | Window window; |
368 | XID deviceid; |
369 | Time time; |
370 | int num_classes; |
371 | char data[64]; |
372 | } XDeviceStateNotifyEvent; |
373 | |
374 | typedef struct { |
375 | #if defined(__cplusplus) || defined(c_plusplus) |
376 | unsigned char c_class; |
377 | #else |
378 | unsigned char class; |
379 | #endif |
380 | unsigned char length; |
381 | unsigned char num_valuators; |
382 | unsigned char mode; |
383 | int valuators[6]; |
384 | } XValuatorStatus; |
385 | |
386 | typedef struct { |
387 | #if defined(__cplusplus) || defined(c_plusplus) |
388 | unsigned char c_class; |
389 | #else |
390 | unsigned char class; |
391 | #endif |
392 | unsigned char length; |
393 | short num_keys; |
394 | char keys[32]; |
395 | } XKeyStatus; |
396 | |
397 | typedef struct { |
398 | #if defined(__cplusplus) || defined(c_plusplus) |
399 | unsigned char c_class; |
400 | #else |
401 | unsigned char class; |
402 | #endif |
403 | unsigned char length; |
404 | short num_buttons; |
405 | char buttons[32]; |
406 | } XButtonStatus; |
407 | |
408 | /******************************************************************* |
409 | * |
410 | * DeviceMappingNotify event. This event is sent when the key mapping, |
411 | * modifier mapping, or button mapping of an extension device is changed. |
412 | * |
413 | */ |
414 | |
415 | typedef struct { |
416 | int type; |
417 | unsigned long serial; /* # of last request processed by server */ |
418 | Bool send_event; /* true if this came from a SendEvent request */ |
419 | Display *display; /* Display the event was read from */ |
420 | Window window; /* unused */ |
421 | XID deviceid; |
422 | Time time; |
423 | int request; /* one of MappingModifier, MappingKeyboard, |
424 | MappingPointer */ |
425 | int first_keycode;/* first keycode */ |
426 | int count; /* defines range of change w. first_keycode*/ |
427 | } XDeviceMappingEvent; |
428 | |
429 | /******************************************************************* |
430 | * |
431 | * ChangeDeviceNotify event. This event is sent when an |
432 | * XChangeKeyboard or XChangePointer request is made. |
433 | * |
434 | */ |
435 | |
436 | typedef struct { |
437 | int type; |
438 | unsigned long serial; /* # of last request processed by server */ |
439 | Bool send_event; /* true if this came from a SendEvent request */ |
440 | Display *display; /* Display the event was read from */ |
441 | Window window; /* unused */ |
442 | XID deviceid; |
443 | Time time; |
444 | int request; /* NewPointer or NewKeyboard */ |
445 | } XChangeDeviceNotifyEvent; |
446 | |
447 | /******************************************************************* |
448 | * |
449 | * DevicePresenceNotify event. This event is sent when the list of |
450 | * input devices changes, in which case devchange will be false, and |
451 | * no information about the change will be contained in the event; |
452 | * the client should use XListInputDevices() to learn what has changed. |
453 | * |
454 | * If devchange is true, an attribute that the server believes is |
455 | * important has changed on a device, and the client should use |
456 | * XGetDeviceControl to examine the device. If control is non-zero, |
457 | * then that control has changed meaningfully. |
458 | */ |
459 | |
460 | typedef struct { |
461 | int type; |
462 | unsigned long serial; /* # of last request processed by server */ |
463 | Bool send_event; /* true if this came from a SendEvent request */ |
464 | Display *display; /* Display the event was read from */ |
465 | Window window; /* unused */ |
466 | Time time; |
467 | Bool devchange; |
468 | XID deviceid; |
469 | XID control; |
470 | } XDevicePresenceNotifyEvent; |
471 | |
472 | /* |
473 | * Notifies the client that a property on a device has changed value. The |
474 | * client is expected to query the server for updated value of the property. |
475 | */ |
476 | typedef struct { |
477 | int type; |
478 | unsigned long serial; /* # of last request processed by server */ |
479 | Bool send_event; /* true if this came from a SendEvent request */ |
480 | Display *display; /* Display the event was read from */ |
481 | Window window; /* unused */ |
482 | Time time; |
483 | XID deviceid; /* id of the device that changed */ |
484 | Atom atom; /* the property that changed */ |
485 | int state; /* PropertyNewValue or PropertyDeleted */ |
486 | } XDevicePropertyNotifyEvent; |
487 | |
488 | |
489 | /******************************************************************* |
490 | * |
491 | * Control structures for input devices that support input class |
492 | * Feedback. These are used by the XGetFeedbackControl and |
493 | * XChangeFeedbackControl functions. |
494 | * |
495 | */ |
496 | |
497 | typedef struct { |
498 | #if defined(__cplusplus) || defined(c_plusplus) |
499 | XID c_class; |
500 | #else |
501 | XID class; |
502 | #endif |
503 | int length; |
504 | XID id; |
505 | } XFeedbackState; |
506 | |
507 | typedef struct { |
508 | #if defined(__cplusplus) || defined(c_plusplus) |
509 | XID c_class; |
510 | #else |
511 | XID class; |
512 | #endif |
513 | int length; |
514 | XID id; |
515 | int click; |
516 | int percent; |
517 | int pitch; |
518 | int duration; |
519 | int led_mask; |
520 | int global_auto_repeat; |
521 | char auto_repeats[32]; |
522 | } XKbdFeedbackState; |
523 | |
524 | typedef struct { |
525 | #if defined(__cplusplus) || defined(c_plusplus) |
526 | XID c_class; |
527 | #else |
528 | XID class; |
529 | #endif |
530 | int length; |
531 | XID id; |
532 | int accelNum; |
533 | int accelDenom; |
534 | int threshold; |
535 | } XPtrFeedbackState; |
536 | |
537 | typedef struct { |
538 | #if defined(__cplusplus) || defined(c_plusplus) |
539 | XID c_class; |
540 | #else |
541 | XID class; |
542 | #endif |
543 | int length; |
544 | XID id; |
545 | int resolution; |
546 | int minVal; |
547 | int maxVal; |
548 | } XIntegerFeedbackState; |
549 | |
550 | typedef struct { |
551 | #if defined(__cplusplus) || defined(c_plusplus) |
552 | XID c_class; |
553 | #else |
554 | XID class; |
555 | #endif |
556 | int length; |
557 | XID id; |
558 | int max_symbols; |
559 | int num_syms_supported; |
560 | KeySym *syms_supported; |
561 | } XStringFeedbackState; |
562 | |
563 | typedef struct { |
564 | #if defined(__cplusplus) || defined(c_plusplus) |
565 | XID c_class; |
566 | #else |
567 | XID class; |
568 | #endif |
569 | int length; |
570 | XID id; |
571 | int percent; |
572 | int pitch; |
573 | int duration; |
574 | } XBellFeedbackState; |
575 | |
576 | typedef struct { |
577 | #if defined(__cplusplus) || defined(c_plusplus) |
578 | XID c_class; |
579 | #else |
580 | XID class; |
581 | #endif |
582 | int length; |
583 | XID id; |
584 | int led_values; |
585 | int led_mask; |
586 | } XLedFeedbackState; |
587 | |
588 | typedef struct { |
589 | #if defined(__cplusplus) || defined(c_plusplus) |
590 | XID c_class; |
591 | #else |
592 | XID class; |
593 | #endif |
594 | int length; |
595 | XID id; |
596 | } XFeedbackControl; |
597 | |
598 | typedef struct { |
599 | #if defined(__cplusplus) || defined(c_plusplus) |
600 | XID c_class; |
601 | #else |
602 | XID class; |
603 | #endif |
604 | int length; |
605 | XID id; |
606 | int accelNum; |
607 | int accelDenom; |
608 | int threshold; |
609 | } XPtrFeedbackControl; |
610 | |
611 | typedef struct { |
612 | #if defined(__cplusplus) || defined(c_plusplus) |
613 | XID c_class; |
614 | #else |
615 | XID class; |
616 | #endif |
617 | int length; |
618 | XID id; |
619 | int click; |
620 | int percent; |
621 | int pitch; |
622 | int duration; |
623 | int led_mask; |
624 | int led_value; |
625 | int key; |
626 | int auto_repeat_mode; |
627 | } XKbdFeedbackControl; |
628 | |
629 | typedef struct { |
630 | #if defined(__cplusplus) || defined(c_plusplus) |
631 | XID c_class; |
632 | #else |
633 | XID class; |
634 | #endif |
635 | int length; |
636 | XID id; |
637 | int num_keysyms; |
638 | KeySym *syms_to_display; |
639 | } XStringFeedbackControl; |
640 | |
641 | typedef struct { |
642 | #if defined(__cplusplus) || defined(c_plusplus) |
643 | XID c_class; |
644 | #else |
645 | XID class; |
646 | #endif |
647 | int length; |
648 | XID id; |
649 | int int_to_display; |
650 | } XIntegerFeedbackControl; |
651 | |
652 | typedef struct { |
653 | #if defined(__cplusplus) || defined(c_plusplus) |
654 | XID c_class; |
655 | #else |
656 | XID class; |
657 | #endif |
658 | int length; |
659 | XID id; |
660 | int percent; |
661 | int pitch; |
662 | int duration; |
663 | } XBellFeedbackControl; |
664 | |
665 | typedef struct { |
666 | #if defined(__cplusplus) || defined(c_plusplus) |
667 | XID c_class; |
668 | #else |
669 | XID class; |
670 | #endif |
671 | int length; |
672 | XID id; |
673 | int led_mask; |
674 | int led_values; |
675 | } XLedFeedbackControl; |
676 | |
677 | /******************************************************************* |
678 | * |
679 | * Device control structures. |
680 | * |
681 | */ |
682 | |
683 | typedef struct { |
684 | XID control; |
685 | int length; |
686 | } XDeviceControl; |
687 | |
688 | typedef struct { |
689 | XID control; |
690 | int length; |
691 | int first_valuator; |
692 | int num_valuators; |
693 | int *resolutions; |
694 | } XDeviceResolutionControl; |
695 | |
696 | typedef struct { |
697 | XID control; |
698 | int length; |
699 | int num_valuators; |
700 | int *resolutions; |
701 | int *min_resolutions; |
702 | int *max_resolutions; |
703 | } XDeviceResolutionState; |
704 | |
705 | typedef struct { |
706 | XID control; |
707 | int length; |
708 | int min_x; |
709 | int max_x; |
710 | int min_y; |
711 | int max_y; |
712 | int flip_x; |
713 | int flip_y; |
714 | int rotation; |
715 | int button_threshold; |
716 | } XDeviceAbsCalibControl, XDeviceAbsCalibState; |
717 | |
718 | typedef struct { |
719 | XID control; |
720 | int length; |
721 | int offset_x; |
722 | int offset_y; |
723 | int width; |
724 | int height; |
725 | int screen; |
726 | XID following; |
727 | } XDeviceAbsAreaControl, XDeviceAbsAreaState; |
728 | |
729 | typedef struct { |
730 | XID control; |
731 | int length; |
732 | int status; |
733 | } XDeviceCoreControl; |
734 | |
735 | typedef struct { |
736 | XID control; |
737 | int length; |
738 | int status; |
739 | int iscore; |
740 | } XDeviceCoreState; |
741 | |
742 | typedef struct { |
743 | XID control; |
744 | int length; |
745 | int enable; |
746 | } XDeviceEnableControl, XDeviceEnableState; |
747 | |
748 | /******************************************************************* |
749 | * |
750 | * An array of XDeviceList structures is returned by the |
751 | * XListInputDevices function. Each entry contains information |
752 | * about one input device. Among that information is an array of |
753 | * pointers to structures that describe the characteristics of |
754 | * the input device. |
755 | * |
756 | */ |
757 | |
758 | typedef struct _XAnyClassinfo { |
759 | #if defined(__cplusplus) || defined(c_plusplus) |
760 | XID c_class; |
761 | #else |
762 | XID class; |
763 | #endif |
764 | int length; |
765 | } XAnyClassInfo; |
766 | |
767 | typedef struct _XDeviceInfo *XDeviceInfoPtr; |
768 | |
769 | typedef struct _XDeviceInfo |
770 | { |
771 | XID id; |
772 | Atom type; |
773 | char *name; |
774 | int num_classes; |
775 | int use; |
776 | XAnyClassPtr inputclassinfo; |
777 | } XDeviceInfo; |
778 | |
779 | typedef struct _XKeyInfo *XKeyInfoPtr; |
780 | |
781 | typedef struct _XKeyInfo |
782 | { |
783 | #if defined(__cplusplus) || defined(c_plusplus) |
784 | XID c_class; |
785 | #else |
786 | XID class; |
787 | #endif |
788 | int length; |
789 | unsigned short min_keycode; |
790 | unsigned short max_keycode; |
791 | unsigned short num_keys; |
792 | } XKeyInfo; |
793 | |
794 | typedef struct _XButtonInfo *XButtonInfoPtr; |
795 | |
796 | typedef struct _XButtonInfo { |
797 | #if defined(__cplusplus) || defined(c_plusplus) |
798 | XID c_class; |
799 | #else |
800 | XID class; |
801 | #endif |
802 | int length; |
803 | short num_buttons; |
804 | } XButtonInfo; |
805 | |
806 | typedef struct _XAxisInfo *XAxisInfoPtr; |
807 | |
808 | typedef struct _XAxisInfo { |
809 | int resolution; |
810 | int min_value; |
811 | int max_value; |
812 | } XAxisInfo; |
813 | |
814 | typedef struct _XValuatorInfo *XValuatorInfoPtr; |
815 | |
816 | typedef struct _XValuatorInfo |
817 | { |
818 | #if defined(__cplusplus) || defined(c_plusplus) |
819 | XID c_class; |
820 | #else |
821 | XID class; |
822 | #endif |
823 | int length; |
824 | unsigned char num_axes; |
825 | unsigned char mode; |
826 | unsigned long motion_buffer; |
827 | XAxisInfoPtr axes; |
828 | } XValuatorInfo; |
829 | |
830 | /******************************************************************* |
831 | * |
832 | * An XDevice structure is returned by the XOpenDevice function. |
833 | * It contains an array of pointers to XInputClassInfo structures. |
834 | * Each contains information about a class of input supported by the |
835 | * device, including a pointer to an array of data for each type of event |
836 | * the device reports. |
837 | * |
838 | */ |
839 | |
840 | |
841 | typedef struct { |
842 | unsigned char input_class; |
843 | unsigned char event_type_base; |
844 | } XInputClassInfo; |
845 | |
846 | typedef struct { |
847 | XID device_id; |
848 | int num_classes; |
849 | XInputClassInfo *classes; |
850 | } XDevice; |
851 | |
852 | |
853 | /******************************************************************* |
854 | * |
855 | * The following structure is used to return information for the |
856 | * XGetSelectedExtensionEvents function. |
857 | * |
858 | */ |
859 | |
860 | typedef struct { |
861 | XEventClass event_type; |
862 | XID device; |
863 | } XEventList; |
864 | |
865 | /******************************************************************* |
866 | * |
867 | * The following structure is used to return motion history data from |
868 | * an input device that supports the input class Valuators. |
869 | * This information is returned by the XGetDeviceMotionEvents function. |
870 | * |
871 | */ |
872 | |
873 | typedef struct { |
874 | Time time; |
875 | int *data; |
876 | } XDeviceTimeCoord; |
877 | |
878 | |
879 | /******************************************************************* |
880 | * |
881 | * Device state structure. |
882 | * This is returned by the XQueryDeviceState request. |
883 | * |
884 | */ |
885 | |
886 | typedef struct { |
887 | XID device_id; |
888 | int num_classes; |
889 | XInputClass *data; |
890 | } XDeviceState; |
891 | |
892 | /******************************************************************* |
893 | * |
894 | * Note that the mode field is a bitfield that reports the Proximity |
895 | * status of the device as well as the mode. The mode field should |
896 | * be OR'd with the mask DeviceMode and compared with the values |
897 | * Absolute and Relative to determine the mode, and should be OR'd |
898 | * with the mask ProximityState and compared with the values InProximity |
899 | * and OutOfProximity to determine the proximity state. |
900 | * |
901 | */ |
902 | |
903 | typedef struct { |
904 | #if defined(__cplusplus) || defined(c_plusplus) |
905 | unsigned char c_class; |
906 | #else |
907 | unsigned char class; |
908 | #endif |
909 | unsigned char length; |
910 | unsigned char num_valuators; |
911 | unsigned char mode; |
912 | int *valuators; |
913 | } XValuatorState; |
914 | |
915 | typedef struct { |
916 | #if defined(__cplusplus) || defined(c_plusplus) |
917 | unsigned char c_class; |
918 | #else |
919 | unsigned char class; |
920 | #endif |
921 | unsigned char length; |
922 | short num_keys; |
923 | char keys[32]; |
924 | } XKeyState; |
925 | |
926 | typedef struct { |
927 | #if defined(__cplusplus) || defined(c_plusplus) |
928 | unsigned char c_class; |
929 | #else |
930 | unsigned char class; |
931 | #endif |
932 | unsigned char length; |
933 | short num_buttons; |
934 | char buttons[32]; |
935 | } XButtonState; |
936 | |
937 | |
938 | |
939 | /******************************************************************* |
940 | * |
941 | * Function definitions. |
942 | * |
943 | */ |
944 | |
945 | _XFUNCPROTOBEGIN |
946 | |
947 | extern int XChangeKeyboardDevice( |
948 | Display* /* display */, |
949 | XDevice* /* device */ |
950 | ); |
951 | |
952 | extern int XChangePointerDevice( |
953 | Display* /* display */, |
954 | XDevice* /* device */, |
955 | int /* xaxis */, |
956 | int /* yaxis */ |
957 | ); |
958 | |
959 | extern int XGrabDevice( |
960 | Display* /* display */, |
961 | XDevice* /* device */, |
962 | Window /* grab_window */, |
963 | Bool /* ownerEvents */, |
964 | int /* event count */, |
965 | XEventClass* /* event_list */, |
966 | int /* this_device_mode */, |
967 | int /* other_devices_mode */, |
968 | Time /* time */ |
969 | ); |
970 | |
971 | extern int XUngrabDevice( |
972 | Display* /* display */, |
973 | XDevice* /* device */, |
974 | Time /* time */ |
975 | ); |
976 | |
977 | extern int XGrabDeviceKey( |
978 | Display* /* display */, |
979 | XDevice* /* device */, |
980 | unsigned int /* key */, |
981 | unsigned int /* modifiers */, |
982 | XDevice* /* modifier_device */, |
983 | Window /* grab_window */, |
984 | Bool /* owner_events */, |
985 | unsigned int /* event_count */, |
986 | XEventClass* /* event_list */, |
987 | int /* this_device_mode */, |
988 | int /* other_devices_mode */ |
989 | ); |
990 | |
991 | extern int XUngrabDeviceKey( |
992 | Display* /* display */, |
993 | XDevice* /* device */, |
994 | unsigned int /* key */, |
995 | unsigned int /* modifiers */, |
996 | XDevice* /* modifier_dev */, |
997 | Window /* grab_window */ |
998 | ); |
999 | |
1000 | extern int XGrabDeviceButton( |
1001 | Display* /* display */, |
1002 | XDevice* /* device */, |
1003 | unsigned int /* button */, |
1004 | unsigned int /* modifiers */, |
1005 | XDevice* /* modifier_device */, |
1006 | Window /* grab_window */, |
1007 | Bool /* owner_events */, |
1008 | unsigned int /* event_count */, |
1009 | XEventClass* /* event_list */, |
1010 | int /* this_device_mode */, |
1011 | int /* other_devices_mode */ |
1012 | ); |
1013 | |
1014 | extern int XUngrabDeviceButton( |
1015 | Display* /* display */, |
1016 | XDevice* /* device */, |
1017 | unsigned int /* button */, |
1018 | unsigned int /* modifiers */, |
1019 | XDevice* /* modifier_dev */, |
1020 | Window /* grab_window */ |
1021 | ); |
1022 | |
1023 | extern int XAllowDeviceEvents( |
1024 | Display* /* display */, |
1025 | XDevice* /* device */, |
1026 | int /* event_mode */, |
1027 | Time /* time */ |
1028 | ); |
1029 | |
1030 | extern int XGetDeviceFocus( |
1031 | Display* /* display */, |
1032 | XDevice* /* device */, |
1033 | Window* /* focus */, |
1034 | int* /* revert_to */, |
1035 | Time* /* time */ |
1036 | ); |
1037 | |
1038 | extern int XSetDeviceFocus( |
1039 | Display* /* display */, |
1040 | XDevice* /* device */, |
1041 | Window /* focus */, |
1042 | int /* revert_to */, |
1043 | Time /* time */ |
1044 | ); |
1045 | |
1046 | extern XFeedbackState *XGetFeedbackControl( |
1047 | Display* /* display */, |
1048 | XDevice* /* device */, |
1049 | int* /* num_feedbacks */ |
1050 | ); |
1051 | |
1052 | extern void XFreeFeedbackList( |
1053 | XFeedbackState* /* list */ |
1054 | ); |
1055 | |
1056 | extern int XChangeFeedbackControl( |
1057 | Display* /* display */, |
1058 | XDevice* /* device */, |
1059 | unsigned long /* mask */, |
1060 | XFeedbackControl* /* f */ |
1061 | ); |
1062 | |
1063 | extern int XDeviceBell( |
1064 | Display* /* display */, |
1065 | XDevice* /* device */, |
1066 | XID /* feedbackclass */, |
1067 | XID /* feedbackid */, |
1068 | int /* percent */ |
1069 | ); |
1070 | |
1071 | extern KeySym *XGetDeviceKeyMapping( |
1072 | Display* /* display */, |
1073 | XDevice* /* device */, |
1074 | #if NeedWidePrototypes |
1075 | unsigned int /* first */, |
1076 | #else |
1077 | KeyCode /* first */, |
1078 | #endif |
1079 | int /* keycount */, |
1080 | int* /* syms_per_code */ |
1081 | ); |
1082 | |
1083 | extern int XChangeDeviceKeyMapping( |
1084 | Display* /* display */, |
1085 | XDevice* /* device */, |
1086 | int /* first */, |
1087 | int /* syms_per_code */, |
1088 | KeySym* /* keysyms */, |
1089 | int /* count */ |
1090 | ); |
1091 | |
1092 | extern XModifierKeymap *XGetDeviceModifierMapping( |
1093 | Display* /* display */, |
1094 | XDevice* /* device */ |
1095 | ); |
1096 | |
1097 | extern int XSetDeviceModifierMapping( |
1098 | Display* /* display */, |
1099 | XDevice* /* device */, |
1100 | XModifierKeymap* /* modmap */ |
1101 | ); |
1102 | |
1103 | extern int XSetDeviceButtonMapping( |
1104 | Display* /* display */, |
1105 | XDevice* /* device */, |
1106 | unsigned char* /* map[] */, |
1107 | int /* nmap */ |
1108 | ); |
1109 | |
1110 | extern int XGetDeviceButtonMapping( |
1111 | Display* /* display */, |
1112 | XDevice* /* device */, |
1113 | unsigned char* /* map[] */, |
1114 | unsigned int /* nmap */ |
1115 | ); |
1116 | |
1117 | extern XDeviceState *XQueryDeviceState( |
1118 | Display* /* display */, |
1119 | XDevice* /* device */ |
1120 | ); |
1121 | |
1122 | extern void XFreeDeviceState( |
1123 | XDeviceState* /* list */ |
1124 | ); |
1125 | |
1126 | extern XExtensionVersion *XGetExtensionVersion( |
1127 | Display* /* display */, |
1128 | _Xconst char* /* name */ |
1129 | ); |
1130 | |
1131 | extern XDeviceInfo *XListInputDevices( |
1132 | Display* /* display */, |
1133 | int* /* ndevices */ |
1134 | ); |
1135 | |
1136 | extern void XFreeDeviceList( |
1137 | XDeviceInfo* /* list */ |
1138 | ); |
1139 | |
1140 | extern XDevice *XOpenDevice( |
1141 | Display* /* display */, |
1142 | XID /* id */ |
1143 | ); |
1144 | |
1145 | extern int XCloseDevice( |
1146 | Display* /* display */, |
1147 | XDevice* /* device */ |
1148 | ); |
1149 | |
1150 | extern int XSetDeviceMode( |
1151 | Display* /* display */, |
1152 | XDevice* /* device */, |
1153 | int /* mode */ |
1154 | ); |
1155 | |
1156 | extern int XSetDeviceValuators( |
1157 | Display* /* display */, |
1158 | XDevice* /* device */, |
1159 | int* /* valuators */, |
1160 | int /* first_valuator */, |
1161 | int /* num_valuators */ |
1162 | ); |
1163 | |
1164 | extern XDeviceControl *XGetDeviceControl( |
1165 | Display* /* display */, |
1166 | XDevice* /* device */, |
1167 | int /* control */ |
1168 | ); |
1169 | |
1170 | extern int XChangeDeviceControl( |
1171 | Display* /* display */, |
1172 | XDevice* /* device */, |
1173 | int /* control */, |
1174 | XDeviceControl* /* d */ |
1175 | ); |
1176 | |
1177 | extern int XSelectExtensionEvent( |
1178 | Display* /* display */, |
1179 | Window /* w */, |
1180 | XEventClass* /* event_list */, |
1181 | int /* count */ |
1182 | ); |
1183 | |
1184 | extern int XGetSelectedExtensionEvents( |
1185 | Display* /* display */, |
1186 | Window /* w */, |
1187 | int* /* this_client_count */, |
1188 | XEventClass** /* this_client_list */, |
1189 | int* /* all_clients_count */, |
1190 | XEventClass** /* all_clients_list */ |
1191 | ); |
1192 | |
1193 | extern int XChangeDeviceDontPropagateList( |
1194 | Display* /* display */, |
1195 | Window /* window */, |
1196 | int /* count */, |
1197 | XEventClass* /* events */, |
1198 | int /* mode */ |
1199 | ); |
1200 | |
1201 | extern XEventClass *XGetDeviceDontPropagateList( |
1202 | Display* /* display */, |
1203 | Window /* window */, |
1204 | int* /* count */ |
1205 | ); |
1206 | |
1207 | extern Status XSendExtensionEvent( |
1208 | Display* /* display */, |
1209 | XDevice* /* device */, |
1210 | Window /* dest */, |
1211 | Bool /* prop */, |
1212 | int /* count */, |
1213 | XEventClass* /* list */, |
1214 | XEvent* /* event */ |
1215 | ); |
1216 | |
1217 | extern XDeviceTimeCoord *XGetDeviceMotionEvents( |
1218 | Display* /* display */, |
1219 | XDevice* /* device */, |
1220 | Time /* start */, |
1221 | Time /* stop */, |
1222 | int* /* nEvents */, |
1223 | int* /* mode */, |
1224 | int* /* axis_count */ |
1225 | ); |
1226 | |
1227 | extern void XFreeDeviceMotionEvents( |
1228 | XDeviceTimeCoord* /* events */ |
1229 | ); |
1230 | |
1231 | extern void XFreeDeviceControl( |
1232 | XDeviceControl* /* control */ |
1233 | ); |
1234 | |
1235 | extern Atom* XListDeviceProperties( |
1236 | Display* /* dpy */, |
1237 | XDevice* /* dev */, |
1238 | int* /* nprops_return */ |
1239 | ); |
1240 | |
1241 | extern void XChangeDeviceProperty( |
1242 | Display* /* dpy */, |
1243 | XDevice* /* dev */, |
1244 | Atom /* property */, |
1245 | Atom /* type */, |
1246 | int /* format */, |
1247 | int /* mode */, |
1248 | _Xconst unsigned char * /*data */, |
1249 | int /* nelements */ |
1250 | ); |
1251 | |
1252 | extern void |
1253 | XDeleteDeviceProperty( |
1254 | Display* /* dpy */, |
1255 | XDevice* /* dev */, |
1256 | Atom /* property */ |
1257 | ); |
1258 | |
1259 | extern Status |
1260 | XGetDeviceProperty( |
1261 | Display* /* dpy*/, |
1262 | XDevice* /* dev*/, |
1263 | Atom /* property*/, |
1264 | long /* offset*/, |
1265 | long /* length*/, |
1266 | Bool /* delete*/, |
1267 | Atom /* req_type*/, |
1268 | Atom* /* actual_type*/, |
1269 | int* /* actual_format*/, |
1270 | unsigned long* /* nitems*/, |
1271 | unsigned long* /* bytes_after*/, |
1272 | unsigned char** /* prop*/ |
1273 | ); |
1274 | |
1275 | _XFUNCPROTOEND |
1276 | |
1277 | #endif /* _XINPUT_H_ */ |
1278 | |