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#ifndef _XI2_H_
26#define _XI2_H_
27
28#define XInput_2_0                              7
29/* DO NOT ADD TO THIS LIST. These are libXi-specific defines.
30   See commit libXi-1.4.2-21-ge8531dd */
31
32#define XI_2_Major                              2
33#define XI_2_Minor                              4
34
35/* Property event flags */
36#define XIPropertyDeleted                       0
37#define XIPropertyCreated                       1
38#define XIPropertyModified                      2
39
40/* Property modes */
41#define XIPropModeReplace                       0
42#define XIPropModePrepend                       1
43#define XIPropModeAppend                        2
44
45/* Special property type used for XIGetProperty */
46#define XIAnyPropertyType                       0L
47
48/* Enter/Leave and Focus In/Out modes */
49#define XINotifyNormal                          0
50#define XINotifyGrab                            1
51#define XINotifyUngrab                          2
52#define XINotifyWhileGrabbed                    3
53#define XINotifyPassiveGrab                     4
54#define XINotifyPassiveUngrab                   5
55
56/* Enter/Leave and focus In/out detail */
57#define XINotifyAncestor                        0
58#define XINotifyVirtual                         1
59#define XINotifyInferior                        2
60#define XINotifyNonlinear                       3
61#define XINotifyNonlinearVirtual                4
62#define XINotifyPointer                         5
63#define XINotifyPointerRoot                     6
64#define XINotifyDetailNone                      7
65
66/* Grab modes */
67#define XIGrabModeSync                          0
68#define XIGrabModeAsync                         1
69#define XIGrabModeTouch                         2
70
71/* Grab reply status codes */
72#define XIGrabSuccess                           0
73#define XIAlreadyGrabbed                        1
74#define XIGrabInvalidTime                       2
75#define XIGrabNotViewable                       3
76#define XIGrabFrozen                            4
77
78/* Grab owner events values */
79#define XIOwnerEvents                           True
80#define XINoOwnerEvents                         False
81
82/* Passive grab types */
83#define XIGrabtypeButton                        0
84#define XIGrabtypeKeycode                       1
85#define XIGrabtypeEnter                         2
86#define XIGrabtypeFocusIn                       3
87#define XIGrabtypeTouchBegin                    4
88#define XIGrabtypeGesturePinchBegin             5
89#define XIGrabtypeGestureSwipeBegin             6
90
91/* Passive grab modifier */
92#define XIAnyModifier                           (1U << 31)
93#define XIAnyButton                             0
94#define XIAnyKeycode                            0
95
96/* XIAllowEvents event-modes */
97#define XIAsyncDevice                           0
98#define XISyncDevice                            1
99#define XIReplayDevice                          2
100#define XIAsyncPairedDevice                     3
101#define XIAsyncPair                             4
102#define XISyncPair                              5
103#define XIAcceptTouch                           6
104#define XIRejectTouch                           7
105
106/* DeviceChangedEvent change reasons */
107#define XISlaveSwitch                           1
108#define XIDeviceChange                          2
109
110/* Hierarchy flags */
111#define XIMasterAdded                           (1 << 0)
112#define XIMasterRemoved                         (1 << 1)
113#define XISlaveAdded                            (1 << 2)
114#define XISlaveRemoved                          (1 << 3)
115#define XISlaveAttached                         (1 << 4)
116#define XISlaveDetached                         (1 << 5)
117#define XIDeviceEnabled                         (1 << 6)
118#define XIDeviceDisabled                        (1 << 7)
119
120/* ChangeHierarchy constants */
121#define XIAddMaster                             1
122#define XIRemoveMaster                          2
123#define XIAttachSlave                           3
124#define XIDetachSlave                           4
125
126#define XIAttachToMaster                        1
127#define XIFloating                              2
128
129/* Valuator modes */
130#define XIModeRelative                          0
131#define XIModeAbsolute                          1
132
133/* Device types */
134#define XIMasterPointer                         1
135#define XIMasterKeyboard                        2
136#define XISlavePointer                          3
137#define XISlaveKeyboard                         4
138#define XIFloatingSlave                         5
139
140/* Device classes: classes that are not identical to Xi 1.x classes must be
141 * numbered starting from 8. */
142#define XIKeyClass                              0
143#define XIButtonClass                           1
144#define XIValuatorClass                         2
145#define XIScrollClass                           3
146#define XITouchClass                            8
147#define XIGestureClass                          9
148
149/* Scroll class types */
150#define XIScrollTypeVertical                    1
151#define XIScrollTypeHorizontal                  2
152
153/* Scroll class flags */
154#define XIScrollFlagNoEmulation                 (1 << 0)
155#define XIScrollFlagPreferred                   (1 << 1)
156
157/* Device event flags (common) */
158/* Device event flags (key events only) */
159#define XIKeyRepeat                             (1 << 16)
160/* Device event flags (pointer events only) */
161#define XIPointerEmulated                       (1 << 16)
162/* Device event flags (touch events only) */
163#define XITouchPendingEnd                       (1 << 16)
164#define XITouchEmulatingPointer                 (1 << 17)
165
166/* Barrier event flags */
167#define XIBarrierPointerReleased                (1 << 0)
168#define XIBarrierDeviceIsGrabbed                (1 << 1)
169
170/* Gesture pinch event flags */
171#define XIGesturePinchEventCancelled            (1 << 0)
172
173/* Gesture swipe event flags */
174#define XIGestureSwipeEventCancelled            (1 << 0)
175
176/* Touch modes */
177#define XIDirectTouch                           1
178#define XIDependentTouch                        2
179
180/* XI2 event mask macros */
181#define XISetMask(ptr, event)   (((unsigned char*)(ptr))[(event)>>3] |=  (1 << ((event) & 7)))
182#define XIClearMask(ptr, event) (((unsigned char*)(ptr))[(event)>>3] &= ~(1 << ((event) & 7)))
183#define XIMaskIsSet(ptr, event) (((unsigned char*)(ptr))[(event)>>3] &   (1 << ((event) & 7)))
184#define XIMaskLen(event)        (((event) >> 3) + 1)
185
186/* Fake device ID's for event selection */
187#define XIAllDevices                            0
188#define XIAllMasterDevices                      1
189
190/* Event types */
191#define XI_DeviceChanged                 1
192#define XI_KeyPress                      2
193#define XI_KeyRelease                    3
194#define XI_ButtonPress                   4
195#define XI_ButtonRelease                 5
196#define XI_Motion                        6
197#define XI_Enter                         7
198#define XI_Leave                         8
199#define XI_FocusIn                       9
200#define XI_FocusOut                      10
201#define XI_HierarchyChanged              11
202#define XI_PropertyEvent                 12
203#define XI_RawKeyPress                   13
204#define XI_RawKeyRelease                 14
205#define XI_RawButtonPress                15
206#define XI_RawButtonRelease              16
207#define XI_RawMotion                     17
208#define XI_TouchBegin                    18 /* XI 2.2 */
209#define XI_TouchUpdate                   19
210#define XI_TouchEnd                      20
211#define XI_TouchOwnership                21
212#define XI_RawTouchBegin                 22
213#define XI_RawTouchUpdate                23
214#define XI_RawTouchEnd                   24
215#define XI_BarrierHit                    25 /* XI 2.3 */
216#define XI_BarrierLeave                  26
217#define XI_GesturePinchBegin             27 /* XI 2.4 */
218#define XI_GesturePinchUpdate            28
219#define XI_GesturePinchEnd               29
220#define XI_GestureSwipeBegin             30
221#define XI_GestureSwipeUpdate            31
222#define XI_GestureSwipeEnd               32
223#define XI_LASTEVENT                     XI_GestureSwipeEnd
224/* NOTE: XI2LASTEVENT in xserver/include/inputstr.h must be the same value
225 * as XI_LASTEVENT if the server is supposed to handle masks etc. for this
226 * type of event. */
227
228/* Event masks.
229 * Note: the protocol spec defines a mask to be of (1 << type). Clients are
230 * free to create masks by bitshifting instead of using these defines.
231 */
232#define XI_DeviceChangedMask             (1 << XI_DeviceChanged)
233#define XI_KeyPressMask                  (1 << XI_KeyPress)
234#define XI_KeyReleaseMask                (1 << XI_KeyRelease)
235#define XI_ButtonPressMask               (1 << XI_ButtonPress)
236#define XI_ButtonReleaseMask             (1 << XI_ButtonRelease)
237#define XI_MotionMask                    (1 << XI_Motion)
238#define XI_EnterMask                     (1 << XI_Enter)
239#define XI_LeaveMask                     (1 << XI_Leave)
240#define XI_FocusInMask                   (1 << XI_FocusIn)
241#define XI_FocusOutMask                  (1 << XI_FocusOut)
242#define XI_HierarchyChangedMask          (1 << XI_HierarchyChanged)
243#define XI_PropertyEventMask             (1 << XI_PropertyEvent)
244#define XI_RawKeyPressMask               (1 << XI_RawKeyPress)
245#define XI_RawKeyReleaseMask             (1 << XI_RawKeyRelease)
246#define XI_RawButtonPressMask            (1 << XI_RawButtonPress)
247#define XI_RawButtonReleaseMask          (1 << XI_RawButtonRelease)
248#define XI_RawMotionMask                 (1 << XI_RawMotion)
249#define XI_TouchBeginMask                (1 << XI_TouchBegin)
250#define XI_TouchEndMask                  (1 << XI_TouchEnd)
251#define XI_TouchOwnershipChangedMask     (1 << XI_TouchOwnership)
252#define XI_TouchUpdateMask               (1 << XI_TouchUpdate)
253#define XI_RawTouchBeginMask             (1 << XI_RawTouchBegin)
254#define XI_RawTouchEndMask               (1 << XI_RawTouchEnd)
255#define XI_RawTouchUpdateMask            (1 << XI_RawTouchUpdate)
256#define XI_BarrierHitMask                (1 << XI_BarrierHit)
257#define XI_BarrierLeaveMask              (1 << XI_BarrierLeave)
258
259#endif /* _XI2_H_ */
260