2 * Copyright © 2009 Red Hat, Inc.
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:
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
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.
25 /* Conventions for this file:
27 * structs: always typedef'd, prefixed with xXI, CamelCase
28 * struct members: lower_case_with_underscores
29 * Exceptions: reqType, ReqType, repType, RepType, sequenceNumber are
30 * named as such for historical reasons.
31 * request opcodes: X_XIRequestName as CamelCase
32 * defines: defines used in client applications must go in XI2.h
33 * defines used only in protocol handling: XISOMENAME
35 * Data types: unless there is a historical name for a datatype (e.g.
36 * Window), use stdint types specifying the size of the datatype.
37 * historical data type names must be defined and undefined at the top and
42 * structs specific to a request or reply added before the request
43 * definition. structs used in more than one request, reply or event
44 * appended to the common structs section before the definition of the
46 * members of structs vertically aligned on column 16 if datatypes permit.
47 * otherwise alingned on next available 8n column.
51 * Protocol definitions for the XI2 protocol.
52 * This file should not be included by clients that merely use XI2, but do not
53 * need the wire protocol. Such clients should include XI2.h, or the matching
54 * header from the library.
60 #include <X11/Xproto.h>
62 #include <X11/extensions/XI2.h>
65 /* make sure types have right sizes for protocol structures. */
66 #define Window uint32_t
69 #define Cursor uint32_t
70 #define Barrier uint32_t
75 #define X_XIQueryPointer 40
76 #define X_XIWarpPointer 41
77 #define X_XIChangeCursor 42
78 #define X_XIChangeHierarchy 43
79 #define X_XISetClientPointer 44
80 #define X_XIGetClientPointer 45
81 #define X_XISelectEvents 46
82 #define X_XIQueryVersion 47
83 #define X_XIQueryDevice 48
84 #define X_XISetFocus 49
85 #define X_XIGetFocus 50
86 #define X_XIGrabDevice 51
87 #define X_XIUngrabDevice 52
88 #define X_XIAllowEvents 53
89 #define X_XIPassiveGrabDevice 54
90 #define X_XIPassiveUngrabDevice 55
91 #define X_XIListProperties 56
92 #define X_XIChangeProperty 57
93 #define X_XIDeleteProperty 58
94 #define X_XIGetProperty 59
95 #define X_XIGetSelectedEvents 60
96 #define X_XIBarrierReleasePointer 61
98 /** Number of XI requests */
99 #define XI2REQUESTS (X_XIBarrierReleasePointer - X_XIQueryPointer + 1)
100 /** Number of XI2 events */
101 #define XI2EVENTS (XI_LASTEVENT + 1)
103 /*************************************************************************************
107 *************************************************************************************/
108 /** Fixed point 16.16 */
109 typedef int32_t FP1616;
111 /** Fixed point 32.32 */
118 * Struct to describe a device.
120 * For a MasterPointer or a MasterKeyboard, 'attachment' specifies the
121 * paired master device.
122 * For a SlaveKeyboard or SlavePointer, 'attachment' specifies the master
123 * device this device is attached to.
124 * For a FloatingSlave, 'attachment' is undefined.
128 uint16_t use; /**< ::XIMasterPointer, ::XIMasterKeyboard,
129 ::XISlavePointer, ::XISlaveKeyboard,
131 uint16_t attachment; /**< Current attachment or pairing.*/
132 uint16_t num_classes; /**< Number of classes following this struct. */
133 uint16_t name_len; /**< Length of name in bytes. */
134 uint8_t enabled; /**< TRUE if device is enabled. */
139 * Default template for a device class.
140 * A device class is equivalent to a device's capabilities. Multiple classes
141 * are supported per device.
144 uint16_t type; /**< One of *class */
145 uint16_t length; /**< Length in 4 byte units */
146 uint16_t sourceid; /**< source device for this class */
151 * Denotes button capability on a device.
152 * Struct is followed by num_buttons * Atom that names the buttons in the
153 * device-native setup (i.e. ignoring button mappings).
156 uint16_t type; /**< Always ButtonClass */
157 uint16_t length; /**< Length in 4 byte units */
158 uint16_t sourceid; /**< source device for this class */
159 uint16_t num_buttons; /**< Number of buttons provided */
163 * Denotes key capability on a device.
164 * Struct is followed by num_keys * CARD32 that lists the keycodes available
168 uint16_t type; /**< Always KeyClass */
169 uint16_t length; /**< Length in 4 byte units */
170 uint16_t sourceid; /**< source device for this class */
171 uint16_t num_keycodes; /**< Number of keys provided */
175 * Denotes an valuator capability on a device.
176 * One XIValuatorInfo describes exactly one valuator (axis) on the device.
179 uint16_t type; /**< Always ValuatorClass */
180 uint16_t length; /**< Length in 4 byte units */
181 uint16_t sourceid; /**< source device for this class */
182 uint16_t number; /**< Valuator number */
183 Atom label; /**< Axis label */
184 FP3232 min; /**< Min value */
185 FP3232 max; /**< Max value */
186 FP3232 value; /**< Last published value */
187 uint32_t resolution; /**< Resolutions in units/m */
188 uint8_t mode; /**< ModeRelative or ModeAbsolute */
194 * Denotes a scroll valuator on a device.
195 * One XIScrollInfo describes exactly one scroll valuator that must have a
196 * XIValuatorInfo struct.
199 uint16_t type; /**< Always ValuatorClass */
200 uint16_t length; /**< Length in 4 byte units */
201 uint16_t sourceid; /**< source device for this class */
202 uint16_t number; /**< Valuator number */
203 uint16_t scroll_type; /**< ::XIScrollTypeVertical, ::XIScrollTypeHorizontal */
205 uint32_t flags; /**< ::XIScrollFlagEmulate, ::XIScrollFlagPreferred */
206 FP3232 increment; /**< Increment for one unit of scrolling */
210 * Denotes multitouch capability on a device.
213 uint16_t type; /**< Always TouchClass */
214 uint16_t length; /**< Length in 4 byte units */
215 uint16_t sourceid; /**< source device for this class */
216 uint8_t mode; /**< DirectTouch or DependentTouch */
217 uint8_t num_touches; /**< Maximum number of touches (0==unlimited) */
221 * Used to select for events on a given window.
222 * Struct is followed by (mask_len * CARD8), with each bit set representing
223 * the event mask for the given type. A mask bit represents an event type if
224 * (mask == (1 << type)).
227 uint16_t deviceid; /**< Device id to select for */
228 uint16_t mask_len; /**< Length of mask in 4 byte units */
232 * XKB modifier information.
233 * The effective modifier is a binary mask of base, latched, and locked
238 uint32_t base_mods; /**< Logically pressed modifiers */
239 uint32_t latched_mods; /**< Logically latched modifiers */
240 uint32_t locked_mods; /**< Logically locked modifiers */
241 uint32_t effective_mods; /**< Effective modifiers */
245 * XKB group information.
246 * The effective group is the mathematical sum of base, latched, and locked
247 * group after group wrapping is taken into account.
251 uint8_t base_group; /**< Logically "pressed" group */
252 uint8_t latched_group; /**< Logically latched group */
253 uint8_t locked_group; /**< Logically locked group */
254 uint8_t effective_group; /**< Effective group */
258 /*************************************************************************************
262 *************************************************************************************/
265 * Query the server for the supported X Input extension version.
269 uint8_t reqType; /**< Input extension major code */
270 uint8_t ReqType; /**< Always ::X_XIQueryVersion */
271 uint16_t length; /**< Length in 4 byte units */
272 uint16_t major_version;
273 uint16_t minor_version;
274 } xXIQueryVersionReq;
275 #define sz_xXIQueryVersionReq 8
278 uint8_t repType; /**< ::X_Reply */
279 uint8_t RepType; /**< Always ::X_XIQueryVersion */
280 uint16_t sequenceNumber;
282 uint16_t major_version;
283 uint16_t minor_version;
289 } xXIQueryVersionReply;
290 #define sz_xXIQueryVersionReply 32
293 * Query the server for information about a specific device or all input
297 uint8_t reqType; /**< Input extension major code */
298 uint8_t ReqType; /**< Always ::X_XIQueryDevice */
299 uint16_t length; /**< Length in 4 byte units */
303 #define sz_xXIQueryDeviceReq 8
306 uint8_t repType; /**< ::X_Reply */
307 uint8_t RepType; /**< Always ::X_XIQueryDevice */
308 uint16_t sequenceNumber;
310 uint16_t num_devices;
317 } xXIQueryDeviceReply;
318 #define sz_xXIQueryDeviceReply 32
321 * Select for events on a given window.
324 uint8_t reqType; /**< Input extension major code */
325 uint8_t ReqType; /**< Always ::X_XISelectEvents */
326 uint16_t length; /**< Length in 4 byte units */
330 } xXISelectEventsReq;
331 #define sz_xXISelectEventsReq 12
334 * Query for selected events on a given window.
337 uint8_t reqType; /**< Input extension major code */
338 uint8_t ReqType; /**< Always ::X_XIGetSelectedEvents */
339 uint16_t length; /**< Length in 4 byte units */
341 } xXIGetSelectedEventsReq;
342 #define sz_xXIGetSelectedEventsReq 8
345 uint8_t repType; /**< Input extension major opcode */
346 uint8_t RepType; /**< Always ::X_XIGetSelectedEvents */
347 uint16_t sequenceNumber;
349 uint16_t num_masks; /**< Number of xXIEventMask structs
350 trailing the reply */
357 } xXIGetSelectedEventsReply;
358 #define sz_xXIGetSelectedEventsReply 32
361 * Query the given device's screen/window coordinates.
365 uint8_t reqType; /**< Input extension major code */
366 uint8_t ReqType; /**< Always ::X_XIQueryPointer */
367 uint16_t length; /**< Length in 4 byte units */
371 } xXIQueryPointerReq;
372 #define sz_xXIQueryPointerReq 12
376 uint8_t repType; /**< Input extension major opcode */
377 uint8_t RepType; /**< Always ::X_XIQueryPointer */
378 uint16_t sequenceNumber;
388 uint16_t buttons_len;
389 xXIModifierInfo mods;
391 } xXIQueryPointerReply;
392 #define sz_xXIQueryPointerReply 56
395 * Warp the given device's pointer to the specified position.
399 uint8_t reqType; /**< Input extension major code */
400 uint8_t ReqType; /**< Always ::X_XIWarpPointer */
401 uint16_t length; /**< Length in 4 byte units */
413 #define sz_xXIWarpPointerReq 36
416 * Change the given device's sprite to the given cursor.
420 uint8_t reqType; /**< Input extension major code */
421 uint8_t ReqType; /**< Always ::X_XIChangeCursor */
422 uint16_t length; /**< Length in 4 byte units */
427 } xXIChangeCursorReq;
428 #define sz_xXIChangeCursorReq 16
431 * Modify the device hierarchy.
435 uint8_t reqType; /**< Input extension major code */
436 uint8_t ReqType; /**< Always ::X_XIChangeHierarchy */
437 uint16_t length; /**< Length in 4 byte units */
441 } xXIChangeHierarchyReq;
442 #define sz_xXIChangeHierarchyReq 8
445 * Generic header for any hierarchy change.
449 uint16_t length; /**< Length in 4 byte units */
450 } xXIAnyHierarchyChangeInfo;
453 * Create a new master device.
454 * Name of new master follows struct (4-byte padded)
457 uint16_t type; /**< Always ::XIAddMaster */
458 uint16_t length; /**< 2 + (namelen + padding)/4 */
465 * Delete a master device. Will automatically delete the master device paired
466 * with the given master device.
469 uint16_t type; /**< Always ::XIRemoveMaster */
470 uint16_t length; /**< 3 */
472 uint8_t return_mode; /**< ::XIAttachToMaster, ::XIFloating */
474 uint16_t return_pointer; /**< Pointer to attach slave ptr devices to */
475 uint16_t return_keyboard; /**< keyboard to attach slave keybd devices to*/
476 } xXIRemoveMasterInfo;
479 * Attach an SD to a new device.
480 * NewMaster has to be of same type (pointer->pointer, keyboard->keyboard);
483 uint16_t type; /**< Always ::XIAttachSlave */
484 uint16_t length; /**< 2 */
486 uint16_t new_master; /**< id of new master device */
487 } xXIAttachSlaveInfo;
490 * Detach an SD from its current master device.
493 uint16_t type; /**< Always ::XIDetachSlave */
494 uint16_t length; /**< 2 */
497 } xXIDetachSlaveInfo;
501 * Set the window/client's ClientPointer.
505 uint8_t ReqType; /**< Always ::X_XISetClientPointer */
506 uint16_t length; /**< Length in 4 byte units */
510 } xXISetClientPointerReq;
511 #define sz_xXISetClientPointerReq 12
514 * Query the given window/client's ClientPointer setting.
518 uint8_t ReqType; /**< Always ::X_GetClientPointer */
519 uint16_t length; /**< Length in 4 byte units */
521 } xXIGetClientPointerReq;
522 #define sz_xXIGetClientPointerReq 8
525 uint8_t repType; /**< Input extension major opcode */
526 uint8_t RepType; /**< Always ::X_GetClientPointer */
527 uint16_t sequenceNumber;
529 BOOL set; /**< client pointer is set? */
537 } xXIGetClientPointerReply;
538 #define sz_xXIGetClientPointerReply 32
541 * Set the input focus to the specified window.
545 uint8_t ReqType; /**< Always ::X_XISetFocus */
546 uint16_t length; /**< Length in 4 byte units */
552 #define sz_xXISetFocusReq 16
555 * Query the current input focus.
559 uint8_t ReqType; /**< Always ::X_XIGetDeviceFocus */
560 uint16_t length; /**< Length in 4 byte units */
564 #define sz_xXIGetFocusReq 8
567 uint8_t repType; /**< Input extension major opcode */
568 uint8_t RepType; /**< Always ::X_XIGetFocus */
569 uint16_t sequenceNumber;
578 #define sz_xXIGetFocusReply 32
582 * Grab the given device.
586 uint8_t ReqType; /**< Always ::X_XIGrabDevice */
587 uint16_t length; /**< Length in 4 byte units */
593 uint8_t paired_device_mode;
594 uint8_t owner_events;
598 #define sz_xXIGrabDeviceReq 24
601 * Return codes from a XIPassiveGrabDevice request.
604 uint32_t modifiers; /**< Modifier state */
605 uint8_t status; /**< Grab status code */
608 } xXIGrabModifierInfo;
611 uint8_t repType; /**< Input extension major opcode */
612 uint8_t RepType; /**< Always ::X_XIGrabDevice */
613 uint16_t sequenceNumber;
623 } xXIGrabDeviceReply;
624 #define sz_xXIGrabDeviceReply 32
627 * Ungrab the specified device.
632 uint8_t ReqType; /**< Always ::X_XIUngrabDevice */
633 uint16_t length; /**< Length in 4 byte units */
637 } xXIUngrabDeviceReq;
638 #define sz_xXIUngrabDeviceReq 12
642 * Allow or replay events on the specified grabbed device.
646 uint8_t ReqType; /**< Always ::X_XIAllowEvents */
647 uint16_t length; /**< Length in 4 byte units */
653 #define sz_xXIAllowEventsReq 12
656 * Allow or replay events on the specified grabbed device.
661 uint8_t ReqType; /**< Always ::X_XIAllowEvents */
662 uint16_t length; /**< Length in 4 byte units */
667 uint32_t touchid; /**< Since XI 2.2 */
668 Window grab_window; /**< Since XI 2.2 */
669 } xXI2_2AllowEventsReq;
670 #define sz_xXI2_2AllowEventsReq 20
674 * Passively grab the device.
678 uint8_t ReqType; /**< Always ::X_XIPassiveGrabDevice */
679 uint16_t length; /**< Length in 4 byte units */
685 uint16_t num_modifiers;
689 uint8_t paired_device_mode;
690 uint8_t owner_events;
692 } xXIPassiveGrabDeviceReq;
693 #define sz_xXIPassiveGrabDeviceReq 32
696 uint8_t repType; /**< Input extension major opcode */
697 uint8_t RepType; /**< Always ::X_XIPassiveGrabDevice */
698 uint16_t sequenceNumber;
700 uint16_t num_modifiers;
707 } xXIPassiveGrabDeviceReply;
708 #define sz_xXIPassiveGrabDeviceReply 32
711 * Delete a passive grab for the given device.
715 uint8_t ReqType; /**< Always ::X_XIPassiveUngrabDevice */
716 uint16_t length; /**< Length in 4 byte units */
720 uint16_t num_modifiers;
724 } xXIPassiveUngrabDeviceReq;
725 #define sz_xXIPassiveUngrabDeviceReq 20
728 * List all device properties on the specified device.
732 uint8_t ReqType; /**< Always ::X_XIListProperties */
733 uint16_t length; /**< Length in 4 byte units */
736 } xXIListPropertiesReq;
737 #define sz_xXIListPropertiesReq 8
740 uint8_t repType; /**< Input extension major opcode */
741 uint8_t RepType; /**< Always ::X_XIListProperties */
742 uint16_t sequenceNumber;
744 uint16_t num_properties;
751 } xXIListPropertiesReply;
752 #define sz_xXIListPropertiesReply 32
755 * Change a property on the specified device.
759 uint8_t ReqType; /**< Always ::X_XIChangeProperty */
760 uint16_t length; /**< Length in 4 byte units */
767 } xXIChangePropertyReq;
768 #define sz_xXIChangePropertyReq 20
771 * Delete the specified property.
775 uint8_t ReqType; /**< Always X_XIDeleteProperty */
776 uint16_t length; /**< Length in 4 byte units */
780 } xXIDeletePropertyReq;
781 #define sz_xXIDeletePropertyReq 12
784 * Query the specified property's values.
788 uint8_t ReqType; /**< Always X_XIGetProperty */
789 uint16_t length; /**< Length in 4 byte units */
791 #if defined(__cplusplus) || defined(c_plusplus)
802 #define sz_xXIGetPropertyReq 24
805 uint8_t repType; /**< Input extension major opcode */
806 uint8_t RepType; /**< Always X_XIGetProperty */
807 uint16_t sequenceNumber;
810 uint32_t bytes_after;
817 } xXIGetPropertyReply;
818 #define sz_xXIGetPropertyReply 32
825 } xXIBarrierReleasePointerInfo;
828 uint8_t reqType; /**< Input extension major opcode */
829 uint8_t ReqType; /**< Always X_XIBarrierReleasePointer */
831 uint32_t num_barriers;
832 /* array of xXIBarrierReleasePointerInfo */
833 } xXIBarrierReleasePointerReq;
834 #define sz_xXIBarrierReleasePointerReq 8
836 /*************************************************************************************
840 *************************************************************************************/
843 * Generic XI2 event header. All XI2 events use the same header.
848 uint8_t extension; /**< XI extension offset */
849 uint16_t sequenceNumber;
854 } xXIGenericDeviceEvent;
857 * Device hierarchy information.
862 uint16_t attachment; /**< ID of master or paired device */
863 uint8_t use; /**< ::XIMasterKeyboard,
868 BOOL enabled; /**< TRUE if the device is enabled */
870 uint32_t flags; /**< ::XIMasterAdded, ::XIMasterRemoved,
871 ::XISlaveAttached, ::XISlaveDetached,
872 ::XISlaveAdded, ::XISlaveRemoved,
873 ::XIDeviceEnabled, ::XIDeviceDisabled */
877 * The device hierarchy has been modified. This event includes the device
878 * hierarchy after the modification has been applied.
882 uint8_t type; /**< Always GenericEvent */
883 uint8_t extension; /**< XI extension offset */
884 uint16_t sequenceNumber;
885 uint32_t length; /**< Length in 4 byte units */
886 uint16_t evtype; /**< ::XI_Hierarchy */
889 uint32_t flags; /**< ::XIMasterAdded, ::XIMasterDeleted,
890 ::XISlaveAttached, ::XISlaveDetached,
891 ::XISlaveAdded, ::XISlaveRemoved,
892 ::XIDeviceEnabled, ::XIDeviceDisabled */
900 * A device has changed capabilities.
904 uint8_t type; /**< Always GenericEvent */
905 uint8_t extension; /**< XI extension offset */
906 uint16_t sequenceNumber;
907 uint32_t length; /**< Length in 4 byte units */
908 uint16_t evtype; /**< XI_DeviceChanged */
909 uint16_t deviceid; /**< Device that has changed */
911 uint16_t num_classes; /**< Number of classes that have changed */
912 uint16_t sourceid; /**< Source of the new classes */
913 uint8_t reason; /**< ::XISlaveSwitch, ::XIDeviceChange */
918 } xXIDeviceChangedEvent;
921 * The owner of a touch stream has passed on ownership to another client.
925 uint8_t type; /**< Always GenericEvent */
926 uint8_t extension; /**< XI extension offset */
927 uint16_t sequenceNumber;
928 uint32_t length; /**< Length in 4 byte units */
929 uint16_t evtype; /**< XI_TouchOwnership */
930 uint16_t deviceid; /**< Device that has changed */
936 /* └──────── 32 byte boundary ────────┘ */
942 } xXITouchOwnershipEvent;
945 * Default input event for pointer, keyboard or touch input.
949 uint8_t type; /**< Always GenericEvent */
950 uint8_t extension; /**< XI extension offset */
951 uint16_t sequenceNumber;
952 uint32_t length; /**< Length in 4 byte uints */
956 uint32_t detail; /**< Keycode or button */
960 /* └──────── 32 byte boundary ────────┘ */
961 FP1616 root_x; /**< Always screen coords, 16.16 fixed point */
963 FP1616 event_x; /**< Always screen coords, 16.16 fixed point */
965 uint16_t buttons_len; /**< Len of button flags in 4 b units */
966 uint16_t valuators_len; /**< Len of val. flags in 4 b units */
967 uint16_t sourceid; /**< The source device */
969 uint32_t flags; /**< ::XIKeyRepeat */
970 xXIModifierInfo mods;
976 * Sent when an input event is generated. RawEvents include valuator
977 * information in both device-specific data (i.e. unaccelerated) and
978 * processed data (i.e. accelerated, if applicable).
982 uint8_t type; /**< Always GenericEvent */
983 uint8_t extension; /**< XI extension offset */
984 uint16_t sequenceNumber;
985 uint32_t length; /**< Length in 4 byte uints */
986 uint16_t evtype; /**< ::XI_RawEvent */
990 uint16_t sourceid; /**< The source device (XI 2.1) */
991 uint16_t valuators_len; /**< Length of trailing valuator
992 mask in 4 byte units */
993 uint32_t flags; /**< ::XIKeyRepeat */
998 * Note that the layout of root, event, child, root_x, root_y, event_x,
999 * event_y must be identical to the xXIDeviceEvent.
1003 uint8_t type; /**< Always GenericEvent */
1004 uint8_t extension; /**< XI extension offset */
1005 uint16_t sequenceNumber;
1006 uint32_t length; /**< Length in 4 byte uints */
1007 uint16_t evtype; /**< ::XI_Enter */
1016 /* └──────── 32 byte boundary ────────┘ */
1023 uint16_t buttons_len; /**< Length of trailing button mask
1025 xXIModifierInfo mods;
1029 typedef xXIEnterEvent xXILeaveEvent;
1030 typedef xXIEnterEvent xXIFocusInEvent;
1031 typedef xXIEnterEvent xXIFocusOutEvent;
1034 * Sent when a device property is created, modified or deleted. Does not
1035 * include property data, the client is required to query the data.
1039 uint8_t type; /**< Always GenericEvent */
1040 uint8_t extension; /**< XI extension offset */
1041 uint16_t sequenceNumber;
1042 uint32_t length; /**< Length in 4 byte units */
1043 uint16_t evtype; /**< ::XI_PropertyEvent */
1047 uint8_t what; /**< ::XIPropertyDeleted,
1048 ::XIPropertyCreated,
1049 ::XIPropertyMotified */
1058 uint8_t type; /**< Always GenericEvent */
1059 uint8_t extension; /**< XI extension offset */
1060 uint16_t sequenceNumber;
1061 uint32_t length; /**< Length in 4 byte units */
1062 uint16_t evtype; /**< ::XI_BarrierHit or ::XI_BarrierLeave */
1069 /* └──────── 32 byte boundary ────────┘ */
1071 uint32_t flags; /**< ::XIBarrierPointerReleased
1072 ::XIBarrierDeviceIsGrabbed */
1081 typedef xXIBarrierEvent xXIBarrierHitEvent;
1082 typedef xXIBarrierEvent xXIBarrierPointerReleasedEvent;
1083 typedef xXIBarrierEvent xXIBarrierLeaveEvent;
1091 #endif /* _XI2PROTO_H_ */