1 module deimos.X11.extensions.XI;
2 
3 //import std.string : string;
4 import core.stdc.config;
5 
6 /* Definitions used by the server, library and client */
7 
8 enum sz_xGetExtensionVersionReq            = 8;
9 enum sz_xGetExtensionVersionReply          = 32;
10 enum sz_xListInputDevicesReq               = 4;
11 enum sz_xListInputDevicesReply             = 32;
12 enum sz_xOpenDeviceReq                     = 8;
13 enum sz_xOpenDeviceReply                   = 32;
14 enum sz_xCloseDeviceReq                    = 8;
15 enum sz_xSetDeviceModeReq                  = 8;
16 enum sz_xSetDeviceModeReply                = 32;
17 enum sz_xSelectExtensionEventReq           = 12;
18 enum sz_xGetSelectedExtensionEventsReq     = 8;
19 enum sz_xGetSelectedExtensionEventsReply   = 32;
20 enum sz_xChangeDeviceDontPropagateListReq  = 12;
21 enum sz_xGetDeviceDontPropagateListReq     = 8;
22 enum sz_xGetDeviceDontPropagateListReply   = 32;
23 enum sz_xGetDeviceMotionEventsReq          = 16;
24 enum sz_xGetDeviceMotionEventsReply        = 32;
25 enum sz_xChangeKeyboardDeviceReq           = 8;
26 enum sz_xChangeKeyboardDeviceReply         = 32;
27 enum sz_xChangePointerDeviceReq            = 8;
28 enum sz_xChangePointerDeviceReply          = 32;
29 enum sz_xGrabDeviceReq                     = 20;
30 enum sz_xGrabDeviceReply                   = 32;
31 enum sz_xUngrabDeviceReq                   = 12;
32 enum sz_xGrabDeviceKeyReq                  = 20;
33 enum sz_xGrabDeviceKeyReply                = 32;
34 enum sz_xUngrabDeviceKeyReq                = 16;
35 enum sz_xGrabDeviceButtonReq               = 20;
36 enum sz_xGrabDeviceButtonReply             = 32;
37 enum sz_xUngrabDeviceButtonReq             = 16;
38 enum sz_xAllowDeviceEventsReq              = 12;
39 enum sz_xGetDeviceFocusReq                 = 8;
40 enum sz_xGetDeviceFocusReply               = 32;
41 enum sz_xSetDeviceFocusReq                 = 16;
42 enum sz_xGetFeedbackControlReq             = 8;
43 enum sz_xGetFeedbackControlReply           = 32;
44 enum sz_xChangeFeedbackControlReq          = 12;
45 enum sz_xGetDeviceKeyMappingReq            = 8;
46 enum sz_xGetDeviceKeyMappingReply          = 32;
47 enum sz_xChangeDeviceKeyMappingReq         = 8;
48 enum sz_xGetDeviceModifierMappingReq       = 8;
49 enum sz_xSetDeviceModifierMappingReq       = 8;
50 enum sz_xSetDeviceModifierMappingReply     = 32;
51 enum sz_xGetDeviceButtonMappingReq         = 8;
52 enum sz_xGetDeviceButtonMappingReply       = 32;
53 enum sz_xSetDeviceButtonMappingReq         = 8;
54 enum sz_xSetDeviceButtonMappingReply       = 32;
55 enum sz_xQueryDeviceStateReq               = 8;
56 enum sz_xQueryDeviceStateReply             = 32;
57 enum sz_xSendExtensionEventReq             = 16;
58 enum sz_xDeviceBellReq                     = 8;
59 enum sz_xSetDeviceValuatorsReq             = 8;
60 enum sz_xSetDeviceValuatorsReply           = 32;
61 enum sz_xGetDeviceControlReq               = 8;
62 enum sz_xGetDeviceControlReply             = 32;
63 enum sz_xChangeDeviceControlReq            = 8;
64 enum sz_xChangeDeviceControlReply          = 32;
65 enum sz_xListDevicePropertiesReq           = 8;
66 enum sz_xListDevicePropertiesReply         = 32;
67 enum sz_xChangeDevicePropertyReq           = 20;
68 enum sz_xDeleteDevicePropertyReq           = 12;
69 enum sz_xGetDevicePropertyReq              = 24;
70 enum sz_xGetDevicePropertyReply            = 32;
71 
72 immutable char* INAME = "XInputExtension";
73 
74 immutable char* XI_KEYBOARD    = "KEYBOARD";
75 immutable char* XI_MOUSE       = "MOUSE";
76 immutable char* XI_TABLET      = "TABLET";
77 immutable char* XI_TOUCHSCREEN = "TOUCHSCREEN";
78 immutable char* XI_TOUCHPAD    = "TOUCHPAD";
79 immutable char* XI_BARCODE     = "BARCODE";
80 immutable char* XI_BUTTONBOX   = "BUTTONBOX";
81 immutable char* XI_KNOB_BOX    = "KNOB_BOX";
82 immutable char* XI_ONE_KNOB    = "ONE_KNOB";
83 immutable char* XI_NINE_KNOB   = "NINE_KNOB";
84 immutable char* XI_TRACKBALL   = "TRACKBALL";
85 immutable char* XI_QUADRATURE  = "QUADRATURE";
86 immutable char* XI_ID_MODULE   = "ID_MODULE";
87 immutable char* XI_SPACEBALL   = "SPACEBALL";
88 immutable char* XI_DATAGLOVE   = "DATAGLOVE";
89 immutable char* XI_EYETRACKER  = "EYETRACKER";
90 immutable char* XI_CURSORKEYS  = "CURSORKEYS";
91 immutable char* XI_FOOTMOUSE   = "FOOTMOUSE";
92 immutable char* XI_JOYSTICK    = "JOYSTICK";
93 
94 /* Indices into the versions[] array (XExtInt.c). Used as a index to
95  * retrieve the minimum version of XI from _XiCheckExtInit */
96 enum {
97     Dont_Check                          = 0,
98     XInput_Initial_Release              = 1,
99     XInput_Add_XDeviceBell              = 2,
100     XInput_Add_XSetDeviceValuators      = 3,
101     XInput_Add_XChangeDeviceControl     = 4,
102     XInput_Add_DevicePresenceNotify     = 5,
103     XInput_Add_DeviceProperties         = 6
104 }
105 /* DO NOT ADD TO HERE -> XI2 */
106 
107 enum {
108     XI_Absent                           = 0,
109     XI_Present                          = 1
110 }
111 
112 enum {
113     XI_Initial_Release_Major            = 1,
114     XI_Initial_Release_Minor            = 0
115 }
116 
117 enum {
118     XI_Add_XDeviceBell_Major            = 1,
119     XI_Add_XDeviceBell_Minor            = 1
120 }
121 
122 enum {
123     XI_Add_XSetDeviceValuators_Major    = 1,
124     XI_Add_XSetDeviceValuators_Minor    = 2
125 }
126 
127 enum {
128     XI_Add_XChangeDeviceControl_Major   = 1,
129     XI_Add_XChangeDeviceControl_Minor   = 3
130 }
131 
132 enum {
133     XI_Add_DevicePresenceNotify_Major   = 1,
134     XI_Add_DevicePresenceNotify_Minor   = 4
135 }
136 
137 enum {
138     XI_Add_DeviceProperties_Major       = 1,
139     XI_Add_DeviceProperties_Minor       = 5
140 }
141 
142 enum {
143     DEVICE_RESOLUTION                   = 1,
144     DEVICE_ABS_CALIB                    = 2,
145     DEVICE_CORE                         = 3,
146     DEVICE_ENABLE                       = 4,
147     DEVICE_ABS_AREA                     = 5
148 }
149 
150 enum NoSuchExtension           = 1;
151 
152 enum COUNT                     = 0;
153 enum CREATE                    = 1;
154 
155 enum NewPointer                = 0;
156 enum NewKeyboard               = 1;
157 
158 enum XPOINTER                  = 0;
159 enum XKEYBOARD                 = 1;
160 
161 enum UseXKeyboard              = 0xFF;
162 
163 enum {
164     IsXPointer                          = 0,
165     IsXKeyboard                         = 1,
166     IsXExtensionDevice                  = 2,
167     IsXExtensionKeyboard                = 3,
168     IsXExtensionPointer                 = 4
169 }
170 
171 enum {
172     AsyncThisDevice                     = 0,
173     SyncThisDevice                      = 1,
174     ReplayThisDevice                    = 2,
175     AsyncOtherDevices                   = 3,
176     AsyncAll                            = 4,
177     SyncAll                             = 5
178 }
179 
180 enum : int {
181     FollowKeyboard            = 3,
182     RevertToFollowKeyboard    = 3
183 }
184 
185 enum : c_long {
186     DvAccelNum             = (1 << 0),
187     DvAccelDenom           = (1 << 1),
188     DvThreshold            = (1 << 2),
189 
190     DvKeyClickPercent      = (1<<0),
191     DvPercent              = (1<<1),
192     DvPitch                = (1<<2),
193     DvDuration             = (1<<3),
194     DvLed                  = (1<<4),
195     DvLedMode              = (1<<5),
196     DvKey                  = (1<<6),
197     DvAutoRepeatMode       = (1<<7),
198 
199     DvString               = (1 << 0),
200 
201     DvInteger              = (1 << 0)
202 }
203 
204 enum : c_ulong {
205     DeviceMode                          = (1 << 0),
206     Relative                            = 0,
207     Absolute                            = 1
208 }
209 
210 enum : c_ulong {
211     ProximityState                      = (1 << 1),
212     InProximity                         = (0 << 1),
213     OutOfProximity                      = (1 << 1)
214 }
215 
216 enum AddToList                 = 0;
217 enum DeleteFromList            = 1;
218 
219 enum {
220     KeyClass                            = 0,
221     ButtonClass                         = 1,
222     ValuatorClass                       = 2,
223     FeedbackClass                       = 3,
224     ProximityClass                      = 4,
225     FocusClass                          = 5,
226     OtherClass                          = 6,
227     AttachClass                         = 7
228 }
229 
230 enum {
231     KbdFeedbackClass                    = 0,
232     PtrFeedbackClass                    = 1,
233     StringFeedbackClass                 = 2,
234     IntegerFeedbackClass                = 3,
235     LedFeedbackClass                    = 4,
236     BellFeedbackClass                   = 5
237 }
238 
239 enum {
240     _devicePointerMotionHint            = 0,
241     _deviceButton1Motion                = 1,
242     _deviceButton2Motion                = 2,
243     _deviceButton3Motion                = 3,
244     _deviceButton4Motion                = 4,
245     _deviceButton5Motion                = 5,
246     _deviceButtonMotion                 = 6,
247     _deviceButtonGrab                   = 7,
248     _deviceOwnerGrabButton              = 8,
249     _noExtensionEvent                   = 9
250 }
251 
252 enum _devicePresence           = 0;
253 
254 enum _deviceEnter              = 0;
255 enum _deviceLeave              = 1;
256 
257 /* Device presence notify states */
258 enum {
259     DeviceAdded                         = 0,
260     DeviceRemoved                       = 1,
261     DeviceEnabled                       = 2,
262     DeviceDisabled                      = 3,
263     DeviceUnrecoverable                 = 4,
264     DeviceControlChanged                = 5
265 }
266 
267 /* XI Errors */
268 enum {
269     XI_BadDevice                        = 0,
270     XI_BadEvent                         = 1,
271     XI_BadMode                          = 2,
272     XI_DeviceBusy                       = 3,
273     XI_BadClass                         = 4
274 }
275 
276 /*
277  * Make XEventClass be a CARD32 for 64 bit servers.  Don't affect client
278  * definition of XEventClass since that would be a library interface change.
279  * See the top of X.h for more _XSERVER64 magic.
280  *
281  * But, don't actually use the CARD32 type.  We can't get it defined here
282  * without polluting the namespace.
283  */
284 version(X86_64){
285     uint XEventClass;
286 }
287 else{
288     c_ulong XEventClass;
289 }
290 
291 /*******************************************************************
292  *
293  * Extension version structure.
294  *
295  */
296 
297 struct XExtensionVersion{
298     int     present;
299     short   major_version;
300     short   minor_version;
301 }