Home | History | Annotate | Line # | 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 /* new in XI 2.4 */
    157 typedef struct
    158 {
    159     int         type;
    160     int         sourceid;
    161     int         num_touches;
    162 } XIGestureClassInfo;
    163 
    164 typedef struct
    165 {
    166     int                 deviceid;
    167     char                *name;
    168     int                 use;
    169     int                 attachment;
    170     Bool                enabled;
    171     int                 num_classes;
    172     XIAnyClassInfo      **classes;
    173 } XIDeviceInfo;
    174 
    175 typedef struct
    176 {
    177     int                 modifiers;
    178     int                 status;
    179 } XIGrabModifiers;
    180 
    181 typedef unsigned int BarrierEventID;
    182 
    183 typedef struct
    184 {
    185     int                 deviceid;
    186     PointerBarrier      barrier;
    187     BarrierEventID      eventid;
    188 } XIBarrierReleasePointerInfo;
    189 
    190 /**
    191  * Generic XI2 event. All XI2 events have the same header.
    192  */
    193 typedef struct {
    194     int           type;         /* GenericEvent */
    195     unsigned long serial;       /* # of last request processed by server */
    196     Bool          send_event;   /* true if this came from a SendEvent request */
    197     Display       *display;     /* Display the event was read from */
    198     int           extension;    /* XI extension offset */
    199     int           evtype;
    200     Time          time;
    201 } XIEvent;
    202 
    203 
    204 typedef struct {
    205     int           deviceid;
    206     int           attachment;
    207     int           use;
    208     Bool          enabled;
    209     int           flags;
    210 } XIHierarchyInfo;
    211 
    212 /*
    213  * Notifies the client that the device hierarchy has been changed. The client
    214  * is expected to re-query the server for the device hierarchy.
    215  */
    216 typedef struct {
    217     int           type;         /* GenericEvent */
    218     unsigned long serial;       /* # of last request processed by server */
    219     Bool          send_event;   /* true if this came from a SendEvent request */
    220     Display       *display;     /* Display the event was read from */
    221     int           extension;    /* XI extension offset */
    222     int           evtype;       /* XI_HierarchyChanged */
    223     Time          time;
    224     int           flags;
    225     int           num_info;
    226     XIHierarchyInfo *info;
    227 } XIHierarchyEvent;
    228 
    229 /*
    230  * Notifies the client that the classes have been changed. This happens when
    231  * the slave device that sends through the master changes.
    232  */
    233 typedef struct {
    234     int           type;         /* GenericEvent */
    235     unsigned long serial;       /* # of last request processed by server */
    236     Bool          send_event;   /* true if this came from a SendEvent request */
    237     Display       *display;     /* Display the event was read from */
    238     int           extension;    /* XI extension offset */
    239     int           evtype;       /* XI_DeviceChanged */
    240     Time          time;
    241     int           deviceid;     /* id of the device that changed */
    242     int           sourceid;     /* Source for the new classes. */
    243     int           reason;       /* Reason for the change */
    244     int           num_classes;
    245     XIAnyClassInfo **classes; /* same as in XIDeviceInfo */
    246 } XIDeviceChangedEvent;
    247 
    248 typedef struct {
    249     int           type;         /* GenericEvent */
    250     unsigned long serial;       /* # of last request processed by server */
    251     Bool          send_event;   /* true if this came from a SendEvent request */
    252     Display       *display;     /* Display the event was read from */
    253     int           extension;    /* XI extension offset */
    254     int           evtype;
    255     Time          time;
    256     int           deviceid;
    257     int           sourceid;
    258     int           detail;
    259     Window        root;
    260     Window        event;
    261     Window        child;
    262     double        root_x;
    263     double        root_y;
    264     double        event_x;
    265     double        event_y;
    266     int           flags;
    267     XIButtonState       buttons;
    268     XIValuatorState     valuators;
    269     XIModifierState     mods;
    270     XIGroupState        group;
    271 } XIDeviceEvent;
    272 
    273 typedef struct {
    274     int           type;         /* GenericEvent */
    275     unsigned long serial;       /* # of last request processed by server */
    276     Bool          send_event;   /* true if this came from a SendEvent request */
    277     Display       *display;     /* Display the event was read from */
    278     int           extension;    /* XI extension offset */
    279     int           evtype;       /* XI_RawKeyPress, XI_RawKeyRelease, etc. */
    280     Time          time;
    281     int           deviceid;
    282     int           sourceid;     /* Bug: Always 0. https://bugs.freedesktop.org//show_bug.cgi?id=34240 */
    283     int           detail;
    284     int           flags;
    285     XIValuatorState valuators;
    286     double        *raw_values;
    287 } XIRawEvent;
    288 
    289 typedef struct {
    290     int           type;         /* GenericEvent */
    291     unsigned long serial;       /* # of last request processed by server */
    292     Bool          send_event;   /* true if this came from a SendEvent request */
    293     Display       *display;     /* Display the event was read from */
    294     int           extension;    /* XI extension offset */
    295     int           evtype;
    296     Time          time;
    297     int           deviceid;
    298     int           sourceid;
    299     int           detail;
    300     Window        root;
    301     Window        event;
    302     Window        child;
    303     double        root_x;
    304     double        root_y;
    305     double        event_x;
    306     double        event_y;
    307     int           mode;
    308     Bool          focus;
    309     Bool          same_screen;
    310     XIButtonState       buttons;
    311     XIModifierState     mods;
    312     XIGroupState        group;
    313 } XIEnterEvent;
    314 
    315 typedef XIEnterEvent XILeaveEvent;
    316 typedef XIEnterEvent XIFocusInEvent;
    317 typedef XIEnterEvent XIFocusOutEvent;
    318 
    319 typedef struct {
    320     int           type;         /* GenericEvent */
    321     unsigned long serial;       /* # of last request processed by server */
    322     Bool          send_event;   /* true if this came from a SendEvent request */
    323     Display       *display;     /* Display the event was read from */
    324     int           extension;    /* XI extension offset */
    325     int           evtype;       /* XI_PropertyEvent */
    326     Time          time;
    327     int           deviceid;     /* id of the device that changed */
    328     Atom          property;
    329     int           what;
    330 } XIPropertyEvent;
    331 
    332 typedef struct {
    333     int           type;         /* GenericEvent */
    334     unsigned long serial;       /* # of last request processed by server */
    335     Bool          send_event;   /* true if this came from a SendEvent request */
    336     Display       *display;     /* Display the event was read from */
    337     int           extension;    /* XI extension offset */
    338     int           evtype;
    339     Time          time;
    340     int           deviceid;
    341     int           sourceid;
    342     unsigned int  touchid;
    343     Window        root;
    344     Window        event;
    345     Window        child;
    346     int           flags;
    347 } XITouchOwnershipEvent;
    348 
    349 typedef struct {
    350     int           type;         /* GenericEvent */
    351     unsigned long serial;       /* # of last request processed by server */
    352     Bool          send_event;   /* true if this came from a SendEvent request */
    353     Display       *display;     /* Display the event was read from */
    354     int           extension;    /* XI extension offset */
    355     int           evtype;
    356     Time          time;
    357     int           deviceid;
    358     int           sourceid;
    359     Window        event;
    360     Window        root;
    361     double        root_x;
    362     double        root_y;
    363     double        dx;
    364     double        dy;
    365     int           dtime;
    366     int           flags;
    367     PointerBarrier barrier;
    368     BarrierEventID eventid;
    369 } XIBarrierEvent;
    370 
    371 typedef struct {
    372     int           type;         /* GenericEvent */
    373     unsigned long serial;       /* # of last request processed by server */
    374     Bool          send_event;   /* true if this came from a SendEvent request */
    375     Display       *display;     /* Display the event was read from */
    376     int           extension;    /* XI extension offset */
    377     int           evtype;
    378     Time          time;
    379     int           deviceid;
    380     int           sourceid;
    381     int           detail;
    382     Window        root;
    383     Window        event;
    384     Window        child;
    385     double        root_x;
    386     double        root_y;
    387     double        event_x;
    388     double        event_y;
    389     double        delta_x;
    390     double        delta_y;
    391     double        delta_unaccel_x;
    392     double        delta_unaccel_y;
    393     double        scale;
    394     double        delta_angle;
    395     int           flags;
    396     XIModifierState     mods;
    397     XIGroupState        group;
    398 } XIGesturePinchEvent;
    399 
    400 typedef struct {
    401     int           type;         /* GenericEvent */
    402     unsigned long serial;       /* # of last request processed by server */
    403     Bool          send_event;   /* true if this came from a SendEvent request */
    404     Display       *display;     /* Display the event was read from */
    405     int           extension;    /* XI extension offset */
    406     int           evtype;
    407     Time          time;
    408     int           deviceid;
    409     int           sourceid;
    410     int           detail;
    411     Window        root;
    412     Window        event;
    413     Window        child;
    414     double        root_x;
    415     double        root_y;
    416     double        event_x;
    417     double        event_y;
    418     double        delta_x;
    419     double        delta_y;
    420     double        delta_unaccel_x;
    421     double        delta_unaccel_y;
    422     int           flags;
    423     XIModifierState     mods;
    424     XIGroupState        group;
    425 } XIGestureSwipeEvent;
    426 
    427 _XFUNCPROTOBEGIN
    428 
    429 extern Bool     XIQueryPointer(
    430     Display*            display,
    431     int                 deviceid,
    432     Window              win,
    433     Window*             root,
    434     Window*             child,
    435     double*             root_x,
    436     double*             root_y,
    437     double*             win_x,
    438     double*             win_y,
    439     XIButtonState       *buttons,
    440     XIModifierState     *mods,
    441     XIGroupState        *group
    442 );
    443 
    444 extern Bool     XIWarpPointer(
    445     Display*            display,
    446     int                 deviceid,
    447     Window              src_win,
    448     Window              dst_win,
    449     double              src_x,
    450     double              src_y,
    451     unsigned int        src_width,
    452     unsigned int        src_height,
    453     double              dst_x,
    454     double              dst_y
    455 );
    456 
    457 extern Status   XIDefineCursor(
    458     Display*            display,
    459     int                 deviceid,
    460     Window              win,
    461     Cursor              cursor
    462 );
    463 
    464 extern Status   XIUndefineCursor(
    465     Display*            display,
    466     int                 deviceid,
    467     Window              win
    468 );
    469 
    470 extern Status   XIChangeHierarchy(
    471     Display*            display,
    472     XIAnyHierarchyChangeInfo*  changes,
    473     int                 num_changes
    474 );
    475 
    476 extern Status   XISetClientPointer(
    477     Display*            dpy,
    478     Window              win,
    479     int                 deviceid
    480 );
    481 
    482 extern Bool     XIGetClientPointer(
    483     Display*            dpy,
    484     Window              win,
    485     int*                deviceid
    486 );
    487 
    488 extern int      XISelectEvents(
    489      Display*            dpy,
    490      Window              win,
    491      XIEventMask         *masks,
    492      int                 num_masks
    493 );
    494 
    495 extern XIEventMask *XIGetSelectedEvents(
    496      Display*            dpy,
    497      Window              win,
    498      int                 *num_masks_return
    499 );
    500 
    501 extern Status XIQueryVersion(
    502      Display*           dpy,
    503      int*               major_version_inout,
    504      int*               minor_version_inout
    505 );
    506 
    507 extern XIDeviceInfo* XIQueryDevice(
    508      Display*           dpy,
    509      int                deviceid,
    510      int*               ndevices_return
    511 );
    512 
    513 extern Status XISetFocus(
    514      Display*           dpy,
    515      int                deviceid,
    516      Window             focus,
    517      Time               time
    518 );
    519 
    520 extern Status XIGetFocus(
    521      Display*           dpy,
    522      int                deviceid,
    523      Window             *focus_return);
    524 
    525 extern Status XIGrabDevice(
    526      Display*           dpy,
    527      int                deviceid,
    528      Window             grab_window,
    529      Time               time,
    530      Cursor             cursor,
    531      int                grab_mode,
    532      int                paired_device_mode,
    533      Bool               owner_events,
    534      XIEventMask        *mask
    535 );
    536 
    537 extern Status XIUngrabDevice(
    538      Display*           dpy,
    539      int                deviceid,
    540      Time               time
    541 );
    542 
    543 extern Status XIAllowEvents(
    544     Display*            display,
    545     int                 deviceid,
    546     int                 event_mode,
    547     Time                time
    548 );
    549 
    550 extern Status XIAllowTouchEvents(
    551     Display*            display,
    552     int                 deviceid,
    553     unsigned int        touchid,
    554     Window              grab_window,
    555     int                 event_mode
    556 );
    557 
    558 extern int XIGrabButton(
    559     Display*            display,
    560     int                 deviceid,
    561     int                 button,
    562     Window              grab_window,
    563     Cursor              cursor,
    564     int                 grab_mode,
    565     int                 paired_device_mode,
    566     int                 owner_events,
    567     XIEventMask         *mask,
    568     int                 num_modifiers,
    569     XIGrabModifiers     *modifiers_inout
    570 );
    571 
    572 extern int XIGrabKeycode(
    573     Display*            display,
    574     int                 deviceid,
    575     int                 keycode,
    576     Window              grab_window,
    577     int                 grab_mode,
    578     int                 paired_device_mode,
    579     int                 owner_events,
    580     XIEventMask         *mask,
    581     int                 num_modifiers,
    582     XIGrabModifiers     *modifiers_inout
    583 );
    584 
    585 extern int XIGrabEnter(
    586     Display*            display,
    587     int                 deviceid,
    588     Window              grab_window,
    589     Cursor              cursor,
    590     int                 grab_mode,
    591     int                 paired_device_mode,
    592     int                 owner_events,
    593     XIEventMask         *mask,
    594     int                 num_modifiers,
    595     XIGrabModifiers     *modifiers_inout
    596 );
    597 
    598 extern int XIGrabFocusIn(
    599     Display*            display,
    600     int                 deviceid,
    601     Window              grab_window,
    602     int                 grab_mode,
    603     int                 paired_device_mode,
    604     int                 owner_events,
    605     XIEventMask         *mask,
    606     int                 num_modifiers,
    607     XIGrabModifiers     *modifiers_inout
    608 );
    609 
    610 extern int XIGrabTouchBegin(
    611     Display*            display,
    612     int                 deviceid,
    613     Window              grab_window,
    614     int                 owner_events,
    615     XIEventMask         *mask,
    616     int                 num_modifiers,
    617     XIGrabModifiers     *modifiers_inout
    618 );
    619 
    620 extern int XIGrabPinchGestureBegin(
    621     Display*            display,
    622     int                 deviceid,
    623     Window              grab_window,
    624     int                 grab_mode,
    625     int                 paired_device_mode,
    626     int                 owner_events,
    627     XIEventMask         *mask,
    628     int                 num_modifiers,
    629     XIGrabModifiers     *modifiers_inout
    630 );
    631 
    632 extern int XIGrabSwipeGestureBegin(
    633     Display*            display,
    634     int                 deviceid,
    635     Window              grab_window,
    636     int                 grab_mode,
    637     int                 paired_device_mode,
    638     int                 owner_events,
    639     XIEventMask         *mask,
    640     int                 num_modifiers,
    641     XIGrabModifiers     *modifiers_inout
    642 );
    643 
    644 extern Status XIUngrabButton(
    645     Display*            display,
    646     int                 deviceid,
    647     int                 button,
    648     Window              grab_window,
    649     int                 num_modifiers,
    650     XIGrabModifiers     *modifiers
    651 );
    652 
    653 extern Status XIUngrabKeycode(
    654     Display*            display,
    655     int                 deviceid,
    656     int                 keycode,
    657     Window              grab_window,
    658     int                 num_modifiers,
    659     XIGrabModifiers     *modifiers
    660 );
    661 
    662 extern Status XIUngrabEnter(
    663     Display*            display,
    664     int                 deviceid,
    665     Window              grab_window,
    666     int                 num_modifiers,
    667     XIGrabModifiers     *modifiers
    668 );
    669 
    670 extern Status XIUngrabFocusIn(
    671     Display*            display,
    672     int                 deviceid,
    673     Window              grab_window,
    674     int                 num_modifiers,
    675     XIGrabModifiers     *modifiers
    676 );
    677 
    678 extern Status XIUngrabTouchBegin(
    679     Display*            display,
    680     int                 deviceid,
    681     Window              grab_window,
    682     int                 num_modifiers,
    683     XIGrabModifiers     *modifiers
    684 );
    685 
    686 extern Status XIUngrabPinchGestureBegin(
    687     Display*            display,
    688     int                 deviceid,
    689     Window              grab_window,
    690     int                 num_modifiers,
    691     XIGrabModifiers     *modifiers
    692 );
    693 
    694 extern Status XIUngrabSwipeGestureBegin(
    695     Display*            display,
    696     int                 deviceid,
    697     Window              grab_window,
    698     int                 num_modifiers,
    699     XIGrabModifiers     *modifiers
    700 );
    701 
    702 extern Atom *XIListProperties(
    703     Display*            display,
    704     int                 deviceid,
    705     int                 *num_props_return
    706 );
    707 
    708 extern void XIChangeProperty(
    709     Display*            display,
    710     int                 deviceid,
    711     Atom                property,
    712     Atom                type,
    713     int                 format,
    714     int                 mode,
    715     unsigned char       *data,
    716     int                 num_items
    717 );
    718 
    719 extern void
    720 XIDeleteProperty(
    721     Display*            display,
    722     int                 deviceid,
    723     Atom                property
    724 );
    725 
    726 extern Status
    727 XIGetProperty(
    728     Display*            display,
    729     int                 deviceid,
    730     Atom                property,
    731     long                offset,
    732     long                length,
    733     Bool                delete_property,
    734     Atom                type,
    735     Atom                *type_return,
    736     int                 *format_return,
    737     unsigned long       *num_items_return,
    738     unsigned long       *bytes_after_return,
    739     unsigned char       **data
    740 );
    741 
    742 extern void
    743 XIBarrierReleasePointers(
    744     Display*                    display,
    745     XIBarrierReleasePointerInfo *barriers,
    746     int                         num_barriers
    747 );
    748 
    749 extern void
    750 XIBarrierReleasePointer(
    751     Display*                    display,
    752     int                         deviceid,
    753     PointerBarrier              barrier,
    754     BarrierEventID              eventid
    755 );
    756 
    757 extern void XIFreeDeviceInfo(XIDeviceInfo       *info);
    758 
    759 _XFUNCPROTOEND
    760 
    761 #endif /* XINPUT2_H */
    762