1 module x11.extensions.XInput2;
2 
3 version(Posix):
4 
5 import x11.Xlib;
6 import x11.X;
7 import x11.extensions.XI2;
8 import x11.extensions.Xge;
9 import core.stdc.config;
10 
11 extern (C) nothrow:
12 
13 /*******************************************************************
14  *
15  */
16 struct XIAddMasterInfo{
17     int                 type;
18     char*               name;
19     Bool                send_core;
20     Bool                enable;
21 }
22 
23 struct XIRemoveMasterInfo{
24     int                 type;
25     int                 deviceid;
26     int                 return_mode; /* AttachToMaster, Floating */
27     int                 return_pointer;
28     int                 return_keyboard;
29 }
30 
31 struct XIAttachSlaveInfo{
32     int                 type;
33     int                 deviceid;
34     int                 new_master;
35 }
36 
37 struct XIDetachSlaveInfo{
38     int                 type;
39     int                 deviceid;
40 }
41 
42 union XIAnyHierarchyChangeInfo{
43     int                   type; /* must be first element */
44     XIAddMasterInfo       add;
45     XIRemoveMasterInfo    remove;
46     XIAttachSlaveInfo     attach;
47     XIDetachSlaveInfo     detach;
48 }
49 
50 struct XIModifierState{
51     int    base;
52     int    latched;
53     int    locked;
54     int    effective;
55 }
56 
57 alias XIModifierState XIGroupState;
58 
59 struct XIButtonState{
60     int             mask_len;
61     ubyte*          mask;
62 } 
63 
64 struct XIValuatorState{
65     int             mask_len;
66     ubyte           mask;
67     double*         values;
68 } 
69 
70 
71 struct XIEventMask{
72     int                 deviceid;
73     int                 mask_len;
74     ubyte*              mask;
75 } 
76 
77 struct XIAnyClassInfo{
78     int         type;
79     int         sourceid;
80 } 
81 
82 struct XIButtonClassInfo{
83     int             type;
84     int             sourceid;
85     int             num_buttons;
86     Atom*           labels;
87     XIButtonState   state;
88 } 
89 
90 struct XIKeyClassInfo{
91     int         type;
92     int         sourceid;
93     int         num_keycodes;
94     int*        keycodes;
95 } 
96 
97 struct XIValuatorClassInfo{
98     int         type;
99     int         sourceid;
100     int         number;
101     Atom        label;
102     double      min;
103     double      max;
104     double      value;
105     int         resolution;
106     int         mode;
107 } 
108 
109 struct XIDeviceInfo{
110     int                 deviceid;
111     char*               name;
112     int                 use;
113     int                 attachment;
114     Bool                enabled;
115     int                 num_classes;
116     XIAnyClassInfo**    classes;
117 } 
118 
119 struct XIGrabModifiers{
120     int                 modifiers;
121     int                 status;
122 } 
123 
124 /**
125  * Generic XI2 event. All XI2 events have the same header.
126  */
127 struct XIEvent{
128     int           type;         /* GenericEvent */
129     c_ulong serial;             /* # of last request processed by server */
130     Bool          send_event;   /* true if this came from a SendEvent request */
131     Display*      display;      /* Display the event was read from */
132     int           extension;    /* XI extension offset */
133     int           evtype;
134     Time          time;
135 } 
136 
137 
138 struct XIHierarchyInfo{
139     int           deviceid;
140     int           attachment;
141     int           use;
142     Bool          enabled;
143     int           flags;
144 } 
145 
146 /*
147  * Notifies the client that the device hierarchy has been changed. The client
148  * is expected to re-query the server for the device hierarchy.
149  */
150 struct XIHierarchyEvent{
151     int                 type;           /* GenericEvent */
152     c_ulong             serial;         /* # of last request processed by server */
153     Bool                send_event;     /* true if this came from a SendEvent request */
154     Display*            display;        /* Display the event was read from */
155     int                 extension;      /* XI extension offset */
156     int                 evtype;         /* XI_HierarchyChanged */
157     Time                time;
158     int                 flags;
159     int                 num_info;
160     XIHierarchyInfo*    info;
161 }
162 
163 /*
164  * Notifies the client that the classes have been changed. This happens when
165  * the slave device that sends through the master changes.
166  */
167 struct XIDeviceChangedEvent{
168     int                 type;         /* GenericEvent */
169     c_ulong             serial;       /* # of last request processed by server */
170     Bool                send_event;   /* true if this came from a SendEvent request */
171     Display*            display;      /* Display the event was read from */
172     int                 extension;    /* XI extension offset */
173     int                 evtype;       /* XI_DeviceChanged */
174     Time                time;
175     int                 deviceid;     /* id of the device that changed */
176     int                 sourceid;     /* Source for the new classes. */
177     int                 reason;       /* Reason for the change */
178     int                 num_classes;
179     XIAnyClassInfo**    classes; /* same as in XIDeviceInfo */
180 }
181 
182 struct XIDeviceEvent{
183     int                 type;           /* GenericEvent */
184     c_ulong             serial;         /* # of last request processed by server */
185     Bool                send_event;     /* true if this came from a SendEvent request */
186     Display*            display;        /* Display the event was read from */
187     int                 extension;      /* XI extension offset */
188     int                 evtype;
189     Time                time;
190     int                 deviceid;
191     int                 sourceid;
192     int                 detail;
193     Window              root;
194     Window              event;
195     Window              child;
196     double              root_x;
197     double              root_y;
198     double              event_x;
199     double              event_y;
200     int                 flags;
201     XIButtonState       buttons;
202     XIValuatorState     valuators;
203     XIModifierState     mods;
204     XIGroupState        group;
205 }
206 
207 struct XIRawEvent{
208     int             type;         /* GenericEvent */
209     c_ulong         serial;       /* # of last request processed by server */
210     Bool            send_event;   /* true if this came from a SendEvent request */
211     Display*        display;      /* Display the event was read from */
212     int             extension;    /* XI extension offset */
213     int             evtype;       /* XI_RawKeyPress, XI_RawKeyRelease, etc. */
214     Time            time;
215     int             deviceid;
216     int             sourceid;     /* Bug: Always 0. https://bugs.freedesktop.org//show_bug.cgi?id=34240 */
217     int             detail;
218     int             flags;
219     XIValuatorState valuators;
220     double*         raw_values;
221 }
222 
223 struct XIEnterEvent{
224     int                 type;           /* GenericEvent */
225     c_ulong             serial;         /* # of last request processed by server */
226     Bool                send_event;     /* true if this came from a SendEvent request */
227     Display*            display;        /* Display the event was read from */
228     int                 extension;      /* XI extension offset */
229     int                 evtype;
230     Time                time;
231     int                 deviceid;
232     int                 sourceid;
233     int                 detail;
234     Window              root;
235     Window              event;
236     Window              child;
237     double              root_x;
238     double              root_y;
239     double              event_x;
240     double              event_y;
241     int                 mode;
242     Bool                focus;
243     Bool                same_screen;
244     XIButtonState       buttons;
245     XIModifierState     mods;
246     XIGroupState        group;
247 }
248 
249 alias XIEnterEvent XILeaveEvent;
250 alias XIEnterEvent XIFocusInEvent;
251 alias XIEnterEvent XIFocusOutEvent;
252 
253 struct XIPropertyEvent{
254     int             type;           /* GenericEvent */
255     c_ulong         serial;         /* # of last request processed by server */
256     Bool            send_event;     /* true if this came from a SendEvent request */
257     Display*        display;        /* Display the event was read from */
258     int             extension;      /* XI extension offset */
259     int             evtype;         /* XI_PropertyEvent */
260     Time            time;
261     int             deviceid;       /* id of the device that changed */
262     Atom            property;
263     int             what;
264 }
265 
266 extern Bool     XIQueryPointer(
267     Display*            display,
268     int                 deviceid,
269     Window              win,
270     Window*             root,
271     Window*             child,
272     double*             root_x,
273     double*             root_y,
274     double*             win_x,
275     double*             win_y,
276     XIButtonState*      buttons,
277     XIModifierState*    mods,
278     XIGroupState*       group
279 );
280 
281 extern Bool     XIWarpPointer(
282     Display*            display,
283     int                 deviceid,
284     Window              src_win,
285     Window              dst_win,
286     double              src_x,
287     double              src_y,
288     uint                src_width,
289     uint                src_height,
290     double              dst_x,
291     double              dst_y
292 );
293 
294 extern Status   XIDefineCursor(
295     Display*            display,
296     int                 deviceid,
297     Window              win,
298     Cursor              cursor
299 );
300 
301 extern Status   XIUndefineCursor(
302     Display*            display,
303     int                 deviceid,
304     Window              win
305 );
306 
307 extern Status   XIChangeHierarchy(
308     Display*                    display,
309     XIAnyHierarchyChangeInfo*   changes,
310     int                         num_changes
311 );
312 
313 extern Status   XISetClientPointer(
314     Display*            dpy,
315     Window              win,
316     int                 deviceid
317 );
318 
319 extern Bool     XIGetClientPointer(
320     Display*            dpy,
321     Window              win,
322     int*                deviceid
323 );
324 
325 extern int      XISelectEvents(
326      Display*            dpy,
327      Window              win,
328      XIEventMask*        masks,
329      int                 num_masks
330 );
331 
332 extern XIEventMask *XIGetSelectedEvents(
333      Display*            dpy,
334      Window              win,
335      int*                num_masks_return
336 );
337 
338 extern Status XIQueryVersion(
339      Display*           dpy,
340      int*               major_version_inout,
341      int*               minor_version_inout
342 );
343 
344 extern XIDeviceInfo* XIQueryDevice(
345      Display*           dpy,
346      int                deviceid,
347      int*               ndevices_return
348 );
349 
350 extern Status XISetFocus(
351      Display*           dpy,
352      int                deviceid,
353      Window             focus,
354      Time               time
355 );
356 
357 extern Status XIGetFocus(
358      Display*           dpy,
359      int                deviceid,
360      Window*            focus_return);
361 
362 extern Status XIGrabDevice(
363      Display*           dpy,
364      int                deviceid,
365      Window             grab_window,
366      Time               time,
367      Cursor             cursor,
368      int                grab_mode,
369      int                paired_device_mode,
370      Bool               owner_events,
371      XIEventMask*       mask
372 );
373 
374 extern Status XIUngrabDevice(
375      Display*           dpy,
376      int                deviceid,
377      Time               time
378 );
379 
380 extern Status XIAllowEvents(
381     Display*            display,
382     int                 deviceid,
383     int                 event_mode,
384     Time                time
385 );
386 
387 extern int XIGrabButton(
388     Display*            display,
389     int                 deviceid,
390     int                 button,
391     Window              grab_window,
392     Cursor              cursor,
393     int                 grab_mode,
394     int                 paired_device_mode,
395     int                 owner_events,
396     XIEventMask*        mask,
397     int                 num_modifiers,
398     XIGrabModifiers*    modifiers_inout
399 );
400 
401 extern int XIGrabKeycode(
402     Display*            display,
403     int                 deviceid,
404     int                 keycode,
405     Window              grab_window,
406     int                 grab_mode,
407     int                 paired_device_mode,
408     int                 owner_events,
409     XIEventMask*        mask,
410     int                 num_modifiers,
411     XIGrabModifiers*    modifiers_inout
412 );
413 
414 extern int XIGrabEnter(
415     Display*            display,
416     int                 deviceid,
417     Window              grab_window,
418     Cursor              cursor,
419     int                 grab_mode,
420     int                 paired_device_mode,
421     int                 owner_events,
422     XIEventMask*        mask,
423     int                 num_modifiers,
424     XIGrabModifiers*    modifiers_inout
425 );
426 
427 extern int XIGrabFocusIn(
428     Display*            display,
429     int                 deviceid,
430     Window              grab_window,
431     int                 grab_mode,
432     int                 paired_device_mode,
433     int                 owner_events,
434     XIEventMask*        mask,
435     int                 num_modifiers,
436     XIGrabModifiers*    modifiers_inout
437 );
438 extern Status XIUngrabButton(
439     Display*            display,
440     int                 deviceid,
441     int                 button,
442     Window              grab_window,
443     int                 num_modifiers,
444     XIGrabModifiers*    modifiers
445 );
446 
447 extern Status XIUngrabKeycode(
448     Display*            display,
449     int                 deviceid,
450     int                 keycode,
451     Window              grab_window,
452     int                 num_modifiers,
453     XIGrabModifiers*    modifiers
454 );
455 
456 extern Status XIUngrabEnter(
457     Display*            display,
458     int                 deviceid,
459     Window              grab_window,
460     int                 num_modifiers,
461     XIGrabModifiers*    modifiers
462 );
463 
464 extern Status XIUngrabFocusIn(
465     Display*            display,
466     int                 deviceid,
467     Window              grab_window,
468     int                 num_modifiers,
469     XIGrabModifiers*    modifiers
470 );
471 
472 
473 extern Atom *XIListProperties(
474     Display*            display,
475     int                 deviceid,
476     int*                num_props_return
477 );
478 
479 extern void XIChangeProperty(
480     Display*            display,
481     int                 deviceid,
482     Atom                property,
483     Atom                type,
484     int                 format,
485     int                 mode,
486     ubyte*              data,
487     int                 num_items
488 );
489 
490 extern void
491 XIDeleteProperty(
492     Display*            display,
493     int                 deviceid,
494     Atom                property
495 );
496 
497 extern Status
498 XIGetProperty(
499     Display*            display,
500     int                 deviceid,
501     Atom                property,
502     long                offset,
503     long                length,
504     Bool                delete_property,
505     Atom                type,
506     Atom*               type_return,
507     int*                format_return,
508     c_ulong*            num_items_return,
509     c_ulong*            bytes_after_return,
510     ubyte**             data
511 );
512 
513 extern void XIFreeDeviceInfo(XIDeviceInfo* info);