XInput2.h revision f1ee322d
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 */
38typedef struct {
39    int                 type;
40    char*               name;
41    Bool                send_core;
42    Bool                enable;
43} XIAddMasterInfo;
44
45typedef struct {
46    int                 type;
47    int                 deviceid;
48    int                 return_mode; /* AttachToMaster, Floating */
49    int                 return_pointer;
50    int                 return_keyboard;
51} XIRemoveMasterInfo;
52
53typedef struct {
54    int                 type;
55    int                 deviceid;
56    int                 new_master;
57} XIAttachSlaveInfo;
58
59typedef struct {
60    int                 type;
61    int                 deviceid;
62} XIDetachSlaveInfo;
63
64typedef union {
65    int                   type; /* must be first element */
66    XIAddMasterInfo       add;
67    XIRemoveMasterInfo    remove;
68    XIAttachSlaveInfo     attach;
69    XIDetachSlaveInfo     detach;
70} XIAnyHierarchyChangeInfo;
71
72typedef struct
73{
74    int    base;
75    int    latched;
76    int    locked;
77    int    effective;
78} XIModifierState;
79
80typedef XIModifierState XIGroupState;
81
82typedef struct {
83    int           mask_len;
84    unsigned char *mask;
85} XIButtonState;
86
87typedef struct {
88    int           mask_len;
89    unsigned char *mask;
90    double        *values;
91} XIValuatorState;
92
93
94typedef struct
95{
96    int                 deviceid;
97    int                 mask_len;
98    unsigned char*      mask;
99} XIEventMask;
100
101typedef struct
102{
103    int         type;
104    int         sourceid;
105} XIAnyClassInfo;
106
107typedef struct
108{
109    int         type;
110    int         sourceid;
111    int         num_buttons;
112    Atom        *labels;
113    XIButtonState state;
114} XIButtonClassInfo;
115
116typedef struct
117{
118    int         type;
119    int         sourceid;
120    int         num_keycodes;
121    int         *keycodes;
122} XIKeyClassInfo;
123
124typedef 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 */
138typedef struct
139{
140    int         type;
141    int         sourceid;
142    int         number;
143    int         scroll_type;
144    double      increment;
145    int         flags;
146} XIScrollClassInfo;
147
148typedef struct
149{
150    int         type;
151    int         sourceid;
152    int         mode;
153    int         num_touches;
154} XITouchClassInfo;
155
156typedef 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
167typedef struct
168{
169    int                 modifiers;
170    int                 status;
171} XIGrabModifiers;
172
173typedef unsigned int BarrierEventID;
174
175typedef 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 */
185typedef 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
196typedef 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 */
208typedef 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 */
225typedef 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
240typedef 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
265typedef 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
281typedef 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
307typedef XIEnterEvent XILeaveEvent;
308typedef XIEnterEvent XIFocusInEvent;
309typedef XIEnterEvent XIFocusOutEvent;
310
311typedef 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
324typedef 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
341typedef 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
365extern 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
380extern 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
393extern Status   XIDefineCursor(
394    Display*            display,
395    int                 deviceid,
396    Window              win,
397    Cursor              cursor
398);
399
400extern Status   XIUndefineCursor(
401    Display*            display,
402    int                 deviceid,
403    Window              win
404);
405
406extern Status   XIChangeHierarchy(
407    Display*            display,
408    XIAnyHierarchyChangeInfo*  changes,
409    int                 num_changes
410);
411
412extern Status   XISetClientPointer(
413    Display*            dpy,
414    Window              win,
415    int                 deviceid
416);
417
418extern Bool     XIGetClientPointer(
419    Display*            dpy,
420    Window              win,
421    int*                deviceid
422);
423
424extern int      XISelectEvents(
425     Display*            dpy,
426     Window              win,
427     XIEventMask         *masks,
428     int                 num_masks
429);
430
431extern XIEventMask *XIGetSelectedEvents(
432     Display*            dpy,
433     Window              win,
434     int                 *num_masks_return
435);
436
437extern Status XIQueryVersion(
438     Display*           dpy,
439     int*               major_version_inout,
440     int*               minor_version_inout
441);
442
443extern XIDeviceInfo* XIQueryDevice(
444     Display*           dpy,
445     int                deviceid,
446     int*               ndevices_return
447);
448
449extern Status XISetFocus(
450     Display*           dpy,
451     int                deviceid,
452     Window             focus,
453     Time               time
454);
455
456extern Status XIGetFocus(
457     Display*           dpy,
458     int                deviceid,
459     Window             *focus_return);
460
461extern 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
473extern Status XIUngrabDevice(
474     Display*           dpy,
475     int                deviceid,
476     Time               time
477);
478
479extern Status XIAllowEvents(
480    Display*            display,
481    int                 deviceid,
482    int                 event_mode,
483    Time                time
484);
485
486extern Status XIAllowTouchEvents(
487    Display*            display,
488    int                 deviceid,
489    unsigned int        touchid,
490    Window              grab_window,
491    int                 event_mode
492);
493
494extern 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
508extern 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
521extern 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
534extern 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
546extern 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
556extern Status XIUngrabButton(
557    Display*            display,
558    int                 deviceid,
559    int                 button,
560    Window              grab_window,
561    int                 num_modifiers,
562    XIGrabModifiers     *modifiers
563);
564
565extern Status XIUngrabKeycode(
566    Display*            display,
567    int                 deviceid,
568    int                 keycode,
569    Window              grab_window,
570    int                 num_modifiers,
571    XIGrabModifiers     *modifiers
572);
573
574extern Status XIUngrabEnter(
575    Display*            display,
576    int                 deviceid,
577    Window              grab_window,
578    int                 num_modifiers,
579    XIGrabModifiers     *modifiers
580);
581
582extern Status XIUngrabFocusIn(
583    Display*            display,
584    int                 deviceid,
585    Window              grab_window,
586    int                 num_modifiers,
587    XIGrabModifiers     *modifiers
588);
589
590extern Status XIUngrabTouchBegin(
591    Display*            display,
592    int                 deviceid,
593    Window              grab_window,
594    int                 num_modifiers,
595    XIGrabModifiers     *modifiers
596);
597
598extern Atom *XIListProperties(
599    Display*            display,
600    int                 deviceid,
601    int                 *num_props_return
602);
603
604extern 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
615extern void
616XIDeleteProperty(
617    Display*            display,
618    int                 deviceid,
619    Atom                property
620);
621
622extern Status
623XIGetProperty(
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
638extern void
639XIBarrierReleasePointers(
640    Display*                    display,
641    XIBarrierReleasePointerInfo *barriers,
642    int                         num_barriers
643);
644
645extern void
646XIBarrierReleasePointer(
647    Display*                    display,
648    int                         deviceid,
649    PointerBarrier              barrier,
650    BarrierEventID              eventid
651);
652
653extern void XIFreeDeviceInfo(XIDeviceInfo       *info);
654
655_XFUNCPROTOEND
656
657#endif /* XINPUT2_H */
658