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