1 | /* |
2 | * Copyright © 2009 Red Hat, Inc. |
3 | * |
4 | * Permission is hereby granted, free of charge, to any person obtaining a |
5 | * copy of this software and associated documentation files (the "Software"), |
6 | * to deal in the Software without restriction, including without limitation |
7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
8 | * and/or sell copies of the Software, and to permit persons to whom the |
9 | * Software is furnished to do so, subject to the following conditions: |
10 | * |
11 | * The above copyright notice and this permission notice (including the next |
12 | * paragraph) shall be included in all copies or substantial portions of the |
13 | * Software. |
14 | * |
15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
16 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
18 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
19 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
20 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
21 | * DEALINGS IN THE SOFTWARE. |
22 | * |
23 | */ |
24 | |
25 | /* Definitions used by the library and client */ |
26 | |
27 | #ifndef _XINPUT2_H_ |
28 | #define _XINPUT2_H_ |
29 | |
30 | #include <X11/Xlib.h> |
31 | #include <X11/extensions/XI2.h> |
32 | #include <X11/extensions/Xge.h> |
33 | #include <X11/extensions/Xfixes.h> /* PointerBarrier */ |
34 | |
35 | /******************************************************************* |
36 | * |
37 | */ |
38 | typedef struct { |
39 | int type; |
40 | char* name; |
41 | Bool send_core; |
42 | Bool enable; |
43 | } XIAddMasterInfo; |
44 | |
45 | typedef struct { |
46 | int type; |
47 | int deviceid; |
48 | int return_mode; /* AttachToMaster, Floating */ |
49 | int return_pointer; |
50 | int return_keyboard; |
51 | } XIRemoveMasterInfo; |
52 | |
53 | typedef struct { |
54 | int type; |
55 | int deviceid; |
56 | int new_master; |
57 | } XIAttachSlaveInfo; |
58 | |
59 | typedef struct { |
60 | int type; |
61 | int deviceid; |
62 | } XIDetachSlaveInfo; |
63 | |
64 | typedef union { |
65 | int type; /* must be first element */ |
66 | XIAddMasterInfo add; |
67 | XIRemoveMasterInfo remove; |
68 | XIAttachSlaveInfo attach; |
69 | XIDetachSlaveInfo detach; |
70 | } XIAnyHierarchyChangeInfo; |
71 | |
72 | typedef struct |
73 | { |
74 | int base; |
75 | int latched; |
76 | int locked; |
77 | int effective; |
78 | } XIModifierState; |
79 | |
80 | typedef XIModifierState XIGroupState; |
81 | |
82 | typedef struct { |
83 | int mask_len; |
84 | unsigned char *mask; |
85 | } XIButtonState; |
86 | |
87 | typedef struct { |
88 | int mask_len; |
89 | unsigned char *mask; |
90 | double *values; |
91 | } XIValuatorState; |
92 | |
93 | |
94 | typedef struct |
95 | { |
96 | int deviceid; |
97 | int mask_len; |
98 | unsigned char* mask; |
99 | } XIEventMask; |
100 | |
101 | typedef struct |
102 | { |
103 | int type; |
104 | int sourceid; |
105 | } XIAnyClassInfo; |
106 | |
107 | typedef struct |
108 | { |
109 | int type; |
110 | int sourceid; |
111 | int num_buttons; |
112 | Atom *labels; |
113 | XIButtonState state; |
114 | } XIButtonClassInfo; |
115 | |
116 | typedef struct |
117 | { |
118 | int type; |
119 | int sourceid; |
120 | int num_keycodes; |
121 | int *keycodes; |
122 | } XIKeyClassInfo; |
123 | |
124 | typedef struct |
125 | { |
126 | int type; |
127 | int sourceid; |
128 | int number; |
129 | Atom label; |
130 | double min; |
131 | double max; |
132 | double value; |
133 | int resolution; |
134 | int mode; |
135 | } XIValuatorClassInfo; |
136 | |
137 | /* new in XI 2.1 */ |
138 | typedef struct |
139 | { |
140 | int type; |
141 | int sourceid; |
142 | int number; |
143 | int scroll_type; |
144 | double increment; |
145 | int flags; |
146 | } XIScrollClassInfo; |
147 | |
148 | typedef struct |
149 | { |
150 | int type; |
151 | int sourceid; |
152 | int mode; |
153 | int num_touches; |
154 | } XITouchClassInfo; |
155 | |
156 | typedef struct |
157 | { |
158 | int deviceid; |
159 | char *name; |
160 | int use; |
161 | int attachment; |
162 | Bool enabled; |
163 | int num_classes; |
164 | XIAnyClassInfo **classes; |
165 | } XIDeviceInfo; |
166 | |
167 | typedef struct |
168 | { |
169 | int modifiers; |
170 | int status; |
171 | } XIGrabModifiers; |
172 | |
173 | typedef unsigned int BarrierEventID; |
174 | |
175 | typedef struct |
176 | { |
177 | int deviceid; |
178 | PointerBarrier barrier; |
179 | BarrierEventID eventid; |
180 | } XIBarrierReleasePointerInfo; |
181 | |
182 | /** |
183 | * Generic XI2 event. All XI2 events have the same header. |
184 | */ |
185 | typedef struct { |
186 | int type; /* GenericEvent */ |
187 | unsigned long serial; /* # of last request processed by server */ |
188 | Bool send_event; /* true if this came from a SendEvent request */ |
189 | Display *display; /* Display the event was read from */ |
190 | int extension; /* XI extension offset */ |
191 | int evtype; |
192 | Time time; |
193 | } XIEvent; |
194 | |
195 | |
196 | typedef struct { |
197 | int deviceid; |
198 | int attachment; |
199 | int use; |
200 | Bool enabled; |
201 | int flags; |
202 | } XIHierarchyInfo; |
203 | |
204 | /* |
205 | * Notifies the client that the device hierarchy has been changed. The client |
206 | * is expected to re-query the server for the device hierarchy. |
207 | */ |
208 | typedef struct { |
209 | int type; /* GenericEvent */ |
210 | unsigned long serial; /* # of last request processed by server */ |
211 | Bool send_event; /* true if this came from a SendEvent request */ |
212 | Display *display; /* Display the event was read from */ |
213 | int extension; /* XI extension offset */ |
214 | int evtype; /* XI_HierarchyChanged */ |
215 | Time time; |
216 | int flags; |
217 | int num_info; |
218 | XIHierarchyInfo *info; |
219 | } XIHierarchyEvent; |
220 | |
221 | /* |
222 | * Notifies the client that the classes have been changed. This happens when |
223 | * the slave device that sends through the master changes. |
224 | */ |
225 | typedef struct { |
226 | int type; /* GenericEvent */ |
227 | unsigned long serial; /* # of last request processed by server */ |
228 | Bool send_event; /* true if this came from a SendEvent request */ |
229 | Display *display; /* Display the event was read from */ |
230 | int extension; /* XI extension offset */ |
231 | int evtype; /* XI_DeviceChanged */ |
232 | Time time; |
233 | int deviceid; /* id of the device that changed */ |
234 | int sourceid; /* Source for the new classes. */ |
235 | int reason; /* Reason for the change */ |
236 | int num_classes; |
237 | XIAnyClassInfo **classes; /* same as in XIDeviceInfo */ |
238 | } XIDeviceChangedEvent; |
239 | |
240 | typedef struct { |
241 | int type; /* GenericEvent */ |
242 | unsigned long serial; /* # of last request processed by server */ |
243 | Bool send_event; /* true if this came from a SendEvent request */ |
244 | Display *display; /* Display the event was read from */ |
245 | int extension; /* XI extension offset */ |
246 | int evtype; |
247 | Time time; |
248 | int deviceid; |
249 | int sourceid; |
250 | int detail; |
251 | Window root; |
252 | Window event; |
253 | Window child; |
254 | double root_x; |
255 | double root_y; |
256 | double event_x; |
257 | double event_y; |
258 | int flags; |
259 | XIButtonState buttons; |
260 | XIValuatorState valuators; |
261 | XIModifierState mods; |
262 | XIGroupState group; |
263 | } XIDeviceEvent; |
264 | |
265 | typedef struct { |
266 | int type; /* GenericEvent */ |
267 | unsigned long serial; /* # of last request processed by server */ |
268 | Bool send_event; /* true if this came from a SendEvent request */ |
269 | Display *display; /* Display the event was read from */ |
270 | int extension; /* XI extension offset */ |
271 | int evtype; /* XI_RawKeyPress, XI_RawKeyRelease, etc. */ |
272 | Time time; |
273 | int deviceid; |
274 | int sourceid; /* Bug: Always 0. https://bugs.freedesktop.org//show_bug.cgi?id=34240 */ |
275 | int detail; |
276 | int flags; |
277 | XIValuatorState valuators; |
278 | double *raw_values; |
279 | } XIRawEvent; |
280 | |
281 | typedef struct { |
282 | int type; /* GenericEvent */ |
283 | unsigned long serial; /* # of last request processed by server */ |
284 | Bool send_event; /* true if this came from a SendEvent request */ |
285 | Display *display; /* Display the event was read from */ |
286 | int extension; /* XI extension offset */ |
287 | int evtype; |
288 | Time time; |
289 | int deviceid; |
290 | int sourceid; |
291 | int detail; |
292 | Window root; |
293 | Window event; |
294 | Window child; |
295 | double root_x; |
296 | double root_y; |
297 | double event_x; |
298 | double event_y; |
299 | int mode; |
300 | Bool focus; |
301 | Bool same_screen; |
302 | XIButtonState buttons; |
303 | XIModifierState mods; |
304 | XIGroupState group; |
305 | } XIEnterEvent; |
306 | |
307 | typedef XIEnterEvent XILeaveEvent; |
308 | typedef XIEnterEvent XIFocusInEvent; |
309 | typedef XIEnterEvent XIFocusOutEvent; |
310 | |
311 | typedef struct { |
312 | int type; /* GenericEvent */ |
313 | unsigned long serial; /* # of last request processed by server */ |
314 | Bool send_event; /* true if this came from a SendEvent request */ |
315 | Display *display; /* Display the event was read from */ |
316 | int extension; /* XI extension offset */ |
317 | int evtype; /* XI_PropertyEvent */ |
318 | Time time; |
319 | int deviceid; /* id of the device that changed */ |
320 | Atom property; |
321 | int what; |
322 | } XIPropertyEvent; |
323 | |
324 | typedef struct { |
325 | int type; /* GenericEvent */ |
326 | unsigned long serial; /* # of last request processed by server */ |
327 | Bool send_event; /* true if this came from a SendEvent request */ |
328 | Display *display; /* Display the event was read from */ |
329 | int extension; /* XI extension offset */ |
330 | int evtype; |
331 | Time time; |
332 | int deviceid; |
333 | int sourceid; |
334 | unsigned int touchid; |
335 | Window root; |
336 | Window event; |
337 | Window child; |
338 | int flags; |
339 | } XITouchOwnershipEvent; |
340 | |
341 | typedef struct { |
342 | int type; /* GenericEvent */ |
343 | unsigned long serial; /* # of last request processed by server */ |
344 | Bool send_event; /* true if this came from a SendEvent request */ |
345 | Display *display; /* Display the event was read from */ |
346 | int extension; /* XI extension offset */ |
347 | int evtype; |
348 | Time time; |
349 | int deviceid; |
350 | int sourceid; |
351 | Window event; |
352 | Window root; |
353 | double root_x; |
354 | double root_y; |
355 | double dx; |
356 | double dy; |
357 | int dtime; |
358 | int flags; |
359 | PointerBarrier barrier; |
360 | BarrierEventID eventid; |
361 | } XIBarrierEvent; |
362 | |
363 | _XFUNCPROTOBEGIN |
364 | |
365 | extern Bool XIQueryPointer( |
366 | Display* display, |
367 | int deviceid, |
368 | Window win, |
369 | Window* root, |
370 | Window* child, |
371 | double* root_x, |
372 | double* root_y, |
373 | double* win_x, |
374 | double* win_y, |
375 | XIButtonState *buttons, |
376 | XIModifierState *mods, |
377 | XIGroupState *group |
378 | ); |
379 | |
380 | extern Bool XIWarpPointer( |
381 | Display* display, |
382 | int deviceid, |
383 | Window src_win, |
384 | Window dst_win, |
385 | double src_x, |
386 | double src_y, |
387 | unsigned int src_width, |
388 | unsigned int src_height, |
389 | double dst_x, |
390 | double dst_y |
391 | ); |
392 | |
393 | extern Status XIDefineCursor( |
394 | Display* display, |
395 | int deviceid, |
396 | Window win, |
397 | Cursor cursor |
398 | ); |
399 | |
400 | extern Status XIUndefineCursor( |
401 | Display* display, |
402 | int deviceid, |
403 | Window win |
404 | ); |
405 | |
406 | extern Status XIChangeHierarchy( |
407 | Display* display, |
408 | XIAnyHierarchyChangeInfo* changes, |
409 | int num_changes |
410 | ); |
411 | |
412 | extern Status XISetClientPointer( |
413 | Display* dpy, |
414 | Window win, |
415 | int deviceid |
416 | ); |
417 | |
418 | extern Bool XIGetClientPointer( |
419 | Display* dpy, |
420 | Window win, |
421 | int* deviceid |
422 | ); |
423 | |
424 | extern int XISelectEvents( |
425 | Display* dpy, |
426 | Window win, |
427 | XIEventMask *masks, |
428 | int num_masks |
429 | ); |
430 | |
431 | extern XIEventMask *XIGetSelectedEvents( |
432 | Display* dpy, |
433 | Window win, |
434 | int *num_masks_return |
435 | ); |
436 | |
437 | extern Status XIQueryVersion( |
438 | Display* dpy, |
439 | int* major_version_inout, |
440 | int* minor_version_inout |
441 | ); |
442 | |
443 | extern XIDeviceInfo* XIQueryDevice( |
444 | Display* dpy, |
445 | int deviceid, |
446 | int* ndevices_return |
447 | ); |
448 | |
449 | extern Status XISetFocus( |
450 | Display* dpy, |
451 | int deviceid, |
452 | Window focus, |
453 | Time time |
454 | ); |
455 | |
456 | extern Status XIGetFocus( |
457 | Display* dpy, |
458 | int deviceid, |
459 | Window *focus_return); |
460 | |
461 | extern Status XIGrabDevice( |
462 | Display* dpy, |
463 | int deviceid, |
464 | Window grab_window, |
465 | Time time, |
466 | Cursor cursor, |
467 | int grab_mode, |
468 | int paired_device_mode, |
469 | Bool owner_events, |
470 | XIEventMask *mask |
471 | ); |
472 | |
473 | extern Status XIUngrabDevice( |
474 | Display* dpy, |
475 | int deviceid, |
476 | Time time |
477 | ); |
478 | |
479 | extern Status XIAllowEvents( |
480 | Display* display, |
481 | int deviceid, |
482 | int event_mode, |
483 | Time time |
484 | ); |
485 | |
486 | extern Status XIAllowTouchEvents( |
487 | Display* display, |
488 | int deviceid, |
489 | unsigned int touchid, |
490 | Window grab_window, |
491 | int event_mode |
492 | ); |
493 | |
494 | extern int XIGrabButton( |
495 | Display* display, |
496 | int deviceid, |
497 | int button, |
498 | Window grab_window, |
499 | Cursor cursor, |
500 | int grab_mode, |
501 | int paired_device_mode, |
502 | int owner_events, |
503 | XIEventMask *mask, |
504 | int num_modifiers, |
505 | XIGrabModifiers *modifiers_inout |
506 | ); |
507 | |
508 | extern int XIGrabKeycode( |
509 | Display* display, |
510 | int deviceid, |
511 | int keycode, |
512 | Window grab_window, |
513 | int grab_mode, |
514 | int paired_device_mode, |
515 | int owner_events, |
516 | XIEventMask *mask, |
517 | int num_modifiers, |
518 | XIGrabModifiers *modifiers_inout |
519 | ); |
520 | |
521 | extern int XIGrabEnter( |
522 | Display* display, |
523 | int deviceid, |
524 | Window grab_window, |
525 | Cursor cursor, |
526 | int grab_mode, |
527 | int paired_device_mode, |
528 | int owner_events, |
529 | XIEventMask *mask, |
530 | int num_modifiers, |
531 | XIGrabModifiers *modifiers_inout |
532 | ); |
533 | |
534 | extern int XIGrabFocusIn( |
535 | Display* display, |
536 | int deviceid, |
537 | Window grab_window, |
538 | int grab_mode, |
539 | int paired_device_mode, |
540 | int owner_events, |
541 | XIEventMask *mask, |
542 | int num_modifiers, |
543 | XIGrabModifiers *modifiers_inout |
544 | ); |
545 | |
546 | extern int XIGrabTouchBegin( |
547 | Display* display, |
548 | int deviceid, |
549 | Window grab_window, |
550 | int owner_events, |
551 | XIEventMask *mask, |
552 | int num_modifiers, |
553 | XIGrabModifiers *modifiers_inout |
554 | ); |
555 | |
556 | extern Status XIUngrabButton( |
557 | Display* display, |
558 | int deviceid, |
559 | int button, |
560 | Window grab_window, |
561 | int num_modifiers, |
562 | XIGrabModifiers *modifiers |
563 | ); |
564 | |
565 | extern Status XIUngrabKeycode( |
566 | Display* display, |
567 | int deviceid, |
568 | int keycode, |
569 | Window grab_window, |
570 | int num_modifiers, |
571 | XIGrabModifiers *modifiers |
572 | ); |
573 | |
574 | extern Status XIUngrabEnter( |
575 | Display* display, |
576 | int deviceid, |
577 | Window grab_window, |
578 | int num_modifiers, |
579 | XIGrabModifiers *modifiers |
580 | ); |
581 | |
582 | extern Status XIUngrabFocusIn( |
583 | Display* display, |
584 | int deviceid, |
585 | Window grab_window, |
586 | int num_modifiers, |
587 | XIGrabModifiers *modifiers |
588 | ); |
589 | |
590 | extern Status XIUngrabTouchBegin( |
591 | Display* display, |
592 | int deviceid, |
593 | Window grab_window, |
594 | int num_modifiers, |
595 | XIGrabModifiers *modifiers |
596 | ); |
597 | |
598 | extern Atom *XIListProperties( |
599 | Display* display, |
600 | int deviceid, |
601 | int *num_props_return |
602 | ); |
603 | |
604 | extern void XIChangeProperty( |
605 | Display* display, |
606 | int deviceid, |
607 | Atom property, |
608 | Atom type, |
609 | int format, |
610 | int mode, |
611 | unsigned char *data, |
612 | int num_items |
613 | ); |
614 | |
615 | extern void |
616 | XIDeleteProperty( |
617 | Display* display, |
618 | int deviceid, |
619 | Atom property |
620 | ); |
621 | |
622 | extern Status |
623 | XIGetProperty( |
624 | Display* display, |
625 | int deviceid, |
626 | Atom property, |
627 | long offset, |
628 | long length, |
629 | Bool delete_property, |
630 | Atom type, |
631 | Atom *type_return, |
632 | int *format_return, |
633 | unsigned long *num_items_return, |
634 | unsigned long *bytes_after_return, |
635 | unsigned char **data |
636 | ); |
637 | |
638 | extern void |
639 | XIBarrierReleasePointers( |
640 | Display* display, |
641 | XIBarrierReleasePointerInfo *barriers, |
642 | int num_barriers |
643 | ); |
644 | |
645 | extern void |
646 | XIBarrierReleasePointer( |
647 | Display* display, |
648 | int deviceid, |
649 | PointerBarrier barrier, |
650 | BarrierEventID eventid |
651 | ); |
652 | |
653 | extern void XIFreeDeviceInfo(XIDeviceInfo *info); |
654 | |
655 | _XFUNCPROTOEND |
656 | |
657 | #endif /* XINPUT2_H */ |
658 | |