Home | History | Annotate | Download | only in extensions
      1 /************************************************************
      2 
      3 Copyright 1989, 1998  The Open Group
      4 
      5 Permission to use, copy, modify, distribute, and sell this software and its
      6 documentation for any purpose is hereby granted without fee, provided that
      7 the above copyright notice appear in all copies and that both that
      8 copyright notice and this permission notice appear in supporting
      9 documentation.
     10 
     11 The above copyright notice and this permission notice shall be included in
     12 all copies or substantial portions of the Software.
     13 
     14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
     17 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
     18 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     19 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     20 
     21 Except as contained in this notice, the name of The Open Group shall not be
     22 used in advertising or otherwise to promote the sale, use or other dealings
     23 in this Software without prior written authorization from The Open Group.
     24 
     25 Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
     26 
     27 			All Rights Reserved
     28 
     29 Permission to use, copy, modify, and distribute this software and its
     30 documentation for any purpose and without fee is hereby granted,
     31 provided that the above copyright notice appear in all copies and that
     32 both that copyright notice and this permission notice appear in
     33 supporting documentation, and that the name of Hewlett-Packard not be
     34 used in advertising or publicity pertaining to distribution of the
     35 software without specific, written prior permission.
     36 
     37 HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
     38 ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
     39 HEWLETT-PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
     40 ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
     41 WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
     42 ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
     43 SOFTWARE.
     44 
     45 ********************************************************/
     46 
     47 /* Definitions used by the library and client */
     48 
     49 #ifndef _XINPUT_H_
     50 #define _XINPUT_H_
     51 
     52 #include <X11/Xlib.h>
     53 #include <X11/extensions/XI.h>
     54 
     55 #define _deviceKeyPress		0
     56 #define _deviceKeyRelease	1
     57 
     58 #define _deviceButtonPress	0
     59 #define _deviceButtonRelease	1
     60 
     61 #define _deviceMotionNotify	0
     62 
     63 #define _deviceFocusIn		0
     64 #define _deviceFocusOut		1
     65 
     66 #define _proximityIn		0
     67 #define _proximityOut		1
     68 
     69 #define _deviceStateNotify	0
     70 #define _deviceMappingNotify	1
     71 #define _changeDeviceNotify	2
     72 /* Space of 3 between is necessary! Reserved for DeviceKeyStateNotify,
     73    DeviceButtonStateNotify, DevicePresenceNotify (essentially unused). This
     74    code has to be in sync with FixExtensionEvents() in xserver/Xi/extinit.c */
     75 #define _propertyNotify		6
     76 
     77 #define FindTypeAndClass(d,type,_class,classid,offset) \
     78     { int _i; XInputClassInfo *_ip; \
     79     type = 0; _class = 0; \
     80     for (_i=0, _ip= ((XDevice *) d)->classes; \
     81 	 _i< ((XDevice *) d)->num_classes; \
     82 	 _i++, _ip++) \
     83 	if (_ip->input_class == classid) \
     84 	    {type =  _ip->event_type_base + offset; \
     85 	     _class =  ((XDevice *) d)->device_id << 8 | type;}}
     86 
     87 #define DeviceKeyPress(d,type,_class) \
     88     FindTypeAndClass(d, type, _class, KeyClass, _deviceKeyPress)
     89 
     90 #define DeviceKeyRelease(d,type,_class) \
     91     FindTypeAndClass(d, type, _class, KeyClass, _deviceKeyRelease)
     92 
     93 #define DeviceButtonPress(d,type,_class) \
     94     FindTypeAndClass(d, type, _class, ButtonClass, _deviceButtonPress)
     95 
     96 #define DeviceButtonRelease(d,type,_class) \
     97     FindTypeAndClass(d, type, _class, ButtonClass, _deviceButtonRelease)
     98 
     99 #define DeviceMotionNotify(d,type,_class) \
    100     FindTypeAndClass(d, type, _class, ValuatorClass, _deviceMotionNotify)
    101 
    102 #define DeviceFocusIn(d,type,_class) \
    103     FindTypeAndClass(d, type, _class, FocusClass, _deviceFocusIn)
    104 
    105 #define DeviceFocusOut(d,type,_class) \
    106     FindTypeAndClass(d, type, _class, FocusClass, _deviceFocusOut)
    107 
    108 #define ProximityIn(d,type,_class) \
    109     FindTypeAndClass(d, type, _class, ProximityClass, _proximityIn)
    110 
    111 #define ProximityOut(d,type,_class) \
    112     FindTypeAndClass(d, type, _class, ProximityClass, _proximityOut)
    113 
    114 #define DeviceStateNotify(d,type,_class) \
    115     FindTypeAndClass(d, type, _class, OtherClass, _deviceStateNotify)
    116 
    117 #define DeviceMappingNotify(d,type,_class) \
    118     FindTypeAndClass(d, type, _class, OtherClass, _deviceMappingNotify)
    119 
    120 #define ChangeDeviceNotify(d,type,_class) \
    121     FindTypeAndClass(d, type, _class, OtherClass, _changeDeviceNotify)
    122 
    123 #define DevicePropertyNotify(d, type, _class) \
    124     FindTypeAndClass(d, type, _class, OtherClass, _propertyNotify)
    125 
    126 #define DevicePointerMotionHint(d,type,_class) \
    127     { _class =  ((XDevice *) d)->device_id << 8 | _devicePointerMotionHint;}
    128 
    129 #define DeviceButton1Motion(d,type,_class) \
    130     { _class =  ((XDevice *) d)->device_id << 8 | _deviceButton1Motion;}
    131 
    132 #define DeviceButton2Motion(d,type,_class) \
    133     { _class =  ((XDevice *) d)->device_id << 8 | _deviceButton2Motion;}
    134 
    135 #define DeviceButton3Motion(d,type,_class) \
    136     { _class =  ((XDevice *) d)->device_id << 8 | _deviceButton3Motion;}
    137 
    138 #define DeviceButton4Motion(d,type, _class) \
    139     { _class =  ((XDevice *) d)->device_id << 8 | _deviceButton4Motion;}
    140 
    141 #define DeviceButton5Motion(d,type,_class) \
    142     { _class =  ((XDevice *) d)->device_id << 8 | _deviceButton5Motion;}
    143 
    144 #define DeviceButtonMotion(d,type, _class) \
    145     { _class =  ((XDevice *) d)->device_id << 8 | _deviceButtonMotion;}
    146 
    147 #define DeviceOwnerGrabButton(d,type,_class) \
    148     { _class =  ((XDevice *) d)->device_id << 8 | _deviceOwnerGrabButton;}
    149 
    150 #define DeviceButtonPressGrab(d,type,_class) \
    151     { _class =  ((XDevice *) d)->device_id << 8 | _deviceButtonGrab;}
    152 
    153 #define NoExtensionEvent(d,type,_class) \
    154     { _class =  ((XDevice *) d)->device_id << 8 | _noExtensionEvent;}
    155 
    156 
    157 /* We need the declaration for DevicePresence. */
    158 #if defined(__cplusplus) || defined(c_plusplus)
    159 extern "C" {
    160 #endif
    161     extern int _XiGetDevicePresenceNotifyEvent(Display *);
    162     extern void _xibaddevice( Display *dpy, int *error);
    163     extern void _xibadclass( Display *dpy, int *error);
    164     extern void _xibadevent( Display *dpy, int *error);
    165     extern void _xibadmode( Display *dpy, int *error);
    166     extern void _xidevicebusy( Display *dpy, int *error);
    167 #if defined(__cplusplus) || defined(c_plusplus)
    168 }
    169 #endif
    170 
    171 #define DevicePresence(dpy, type, _class)                       \
    172     {                                                           \
    173         type = _XiGetDevicePresenceNotifyEvent(dpy);            \
    174         _class =  (0x10000 | _devicePresence);                  \
    175     }
    176 
    177 /* Errors */
    178 #define BadDevice(dpy,error) _xibaddevice(dpy, &error)
    179 
    180 #define BadClass(dpy,error) _xibadclass(dpy, &error)
    181 
    182 #define BadEvent(dpy,error) _xibadevent(dpy, &error)
    183 
    184 #define BadMode(dpy,error) _xibadmode(dpy, &error)
    185 
    186 #define DeviceBusy(dpy,error) _xidevicebusy(dpy, &error)
    187 
    188 typedef struct _XAnyClassinfo *XAnyClassPtr;
    189 
    190 /***************************************************************
    191  *
    192  * DeviceKey events.  These events are sent by input devices that
    193  * support input class Keys.
    194  * The location of the X pointer is reported in the coordinate
    195  * fields of the x,y and x_root,y_root fields.
    196  *
    197  */
    198 
    199 typedef struct
    200     {
    201     int            type;         /* of event */
    202     unsigned long  serial;       /* # of last request processed */
    203     Bool           send_event;   /* true if from SendEvent request */
    204     Display        *display;     /* Display the event was read from */
    205     Window         window;       /* "event" window reported relative to */
    206     XID            deviceid;
    207     Window         root;         /* root window event occured on */
    208     Window         subwindow;    /* child window */
    209     Time           time;         /* milliseconds */
    210     int            x, y;         /* x, y coordinates in event window */
    211     int            x_root;       /* coordinates relative to root */
    212     int            y_root;       /* coordinates relative to root */
    213     unsigned int   state;        /* key or button mask */
    214     unsigned int   keycode;      /* detail */
    215     Bool           same_screen;  /* same screen flag */
    216     unsigned int   device_state; /* device key or button mask */
    217     unsigned char  axes_count;
    218     unsigned char  first_axis;
    219     int            axis_data[6];
    220     } XDeviceKeyEvent;
    221 
    222 typedef XDeviceKeyEvent XDeviceKeyPressedEvent;
    223 typedef XDeviceKeyEvent XDeviceKeyReleasedEvent;
    224 
    225 /*******************************************************************
    226  *
    227  * DeviceButton events.  These events are sent by extension devices
    228  * that support input class Buttons.
    229  *
    230  */
    231 
    232 typedef struct {
    233     int           type;         /* of event */
    234     unsigned long serial;       /* # of last request processed by server */
    235     Bool          send_event;   /* true if from a SendEvent request */
    236     Display       *display;     /* Display the event was read from */
    237     Window        window;       /* "event" window reported relative to */
    238     XID           deviceid;
    239     Window        root;         /* root window that the event occured on */
    240     Window        subwindow;    /* child window */
    241     Time          time;         /* milliseconds */
    242     int           x, y;         /* x, y coordinates in event window */
    243     int           x_root;       /* coordinates relative to root */
    244     int           y_root;       /* coordinates relative to root */
    245     unsigned int  state;        /* key or button mask */
    246     unsigned int  button;       /* detail */
    247     Bool          same_screen;  /* same screen flag */
    248     unsigned int  device_state; /* device key or button mask */
    249     unsigned char axes_count;
    250     unsigned char first_axis;
    251     int           axis_data[6];
    252     } XDeviceButtonEvent;
    253 
    254 typedef XDeviceButtonEvent XDeviceButtonPressedEvent;
    255 typedef XDeviceButtonEvent XDeviceButtonReleasedEvent;
    256 
    257 /*******************************************************************
    258  *
    259  * DeviceMotionNotify event.  These events are sent by extension devices
    260  * that support input class Valuators.
    261  *
    262  */
    263 
    264 typedef struct
    265     {
    266     int           type;        /* of event */
    267     unsigned long serial;      /* # of last request processed by server */
    268     Bool          send_event;  /* true if from a SendEvent request */
    269     Display       *display;    /* Display the event was read from */
    270     Window        window;      /* "event" window reported relative to */
    271     XID           deviceid;
    272     Window        root;        /* root window that the event occured on */
    273     Window        subwindow;   /* child window */
    274     Time          time;        /* milliseconds */
    275     int           x, y;        /* x, y coordinates in event window */
    276     int           x_root;      /* coordinates relative to root */
    277     int           y_root;      /* coordinates relative to root */
    278     unsigned int  state;       /* key or button mask */
    279     char          is_hint;     /* detail */
    280     Bool          same_screen; /* same screen flag */
    281     unsigned int  device_state; /* device key or button mask */
    282     unsigned char axes_count;
    283     unsigned char first_axis;
    284     int           axis_data[6];
    285     } XDeviceMotionEvent;
    286 
    287 /*******************************************************************
    288  *
    289  * DeviceFocusChange events.  These events are sent when the focus
    290  * of an extension device that can be focused is changed.
    291  *
    292  */
    293 
    294 typedef struct
    295     {
    296     int           type;       /* of event */
    297     unsigned long serial;     /* # of last request processed by server */
    298     Bool          send_event; /* true if from a SendEvent request */
    299     Display       *display;   /* Display the event was read from */
    300     Window        window;     /* "event" window reported relative to */
    301     XID           deviceid;
    302     int           mode;       /* NotifyNormal, NotifyGrab, NotifyUngrab */
    303     int           detail;
    304 	/*
    305 	 * NotifyAncestor, NotifyVirtual, NotifyInferior,
    306 	 * NotifyNonLinear,NotifyNonLinearVirtual, NotifyPointer,
    307 	 * NotifyPointerRoot, NotifyDetailNone
    308 	 */
    309     Time                time;
    310     } XDeviceFocusChangeEvent;
    311 
    312 typedef XDeviceFocusChangeEvent XDeviceFocusInEvent;
    313 typedef XDeviceFocusChangeEvent XDeviceFocusOutEvent;
    314 
    315 /*******************************************************************
    316  *
    317  * ProximityNotify events.  These events are sent by those absolute
    318  * positioning devices that are capable of generating proximity information.
    319  *
    320  */
    321 
    322 typedef struct
    323     {
    324     int             type;      /* ProximityIn or ProximityOut */
    325     unsigned long   serial;    /* # of last request processed by server */
    326     Bool            send_event; /* true if this came from a SendEvent request */
    327     Display         *display;  /* Display the event was read from */
    328     Window          window;
    329     XID	            deviceid;
    330     Window          root;
    331     Window          subwindow;
    332     Time            time;
    333     int             x, y;
    334     int             x_root, y_root;
    335     unsigned int    state;
    336     Bool            same_screen;
    337     unsigned int    device_state; /* device key or button mask */
    338     unsigned char   axes_count;
    339     unsigned char   first_axis;
    340     int             axis_data[6];
    341     } XProximityNotifyEvent;
    342 typedef XProximityNotifyEvent XProximityInEvent;
    343 typedef XProximityNotifyEvent XProximityOutEvent;
    344 
    345 /*******************************************************************
    346  *
    347  * DeviceStateNotify events are generated on EnterWindow and FocusIn
    348  * for those clients who have selected DeviceState.
    349  *
    350  */
    351 
    352 typedef struct
    353     {
    354 #if defined(__cplusplus) || defined(c_plusplus)
    355     unsigned char	c_class;
    356 #else
    357     unsigned char	class;
    358 #endif
    359     unsigned char	length;
    360     } XInputClass;
    361 
    362 typedef struct {
    363     int           type;
    364     unsigned long serial;       /* # of last request processed by server */
    365     Bool          send_event;   /* true if this came from a SendEvent request */
    366     Display       *display;     /* Display the event was read from */
    367     Window        window;
    368     XID           deviceid;
    369     Time          time;
    370     int           num_classes;
    371     char	  data[64];
    372 } XDeviceStateNotifyEvent;
    373 
    374 typedef struct {
    375 #if defined(__cplusplus) || defined(c_plusplus)
    376     unsigned char	c_class;
    377 #else
    378     unsigned char	class;
    379 #endif
    380     unsigned char	length;
    381     unsigned char	num_valuators;
    382     unsigned char	mode;
    383     int        		valuators[6];
    384 } XValuatorStatus;
    385 
    386 typedef struct {
    387 #if defined(__cplusplus) || defined(c_plusplus)
    388     unsigned char	c_class;
    389 #else
    390     unsigned char	class;
    391 #endif
    392     unsigned char	length;
    393     short		num_keys;
    394     char        	keys[32];
    395 } XKeyStatus;
    396 
    397 typedef struct {
    398 #if defined(__cplusplus) || defined(c_plusplus)
    399     unsigned char	c_class;
    400 #else
    401     unsigned char	class;
    402 #endif
    403     unsigned char	length;
    404     short		num_buttons;
    405     char        	buttons[32];
    406 } XButtonStatus;
    407 
    408 /*******************************************************************
    409  *
    410  * DeviceMappingNotify event.  This event is sent when the key mapping,
    411  * modifier mapping, or button mapping of an extension device is changed.
    412  *
    413  */
    414 
    415 typedef struct {
    416     int           type;
    417     unsigned long serial;       /* # of last request processed by server */
    418     Bool          send_event;   /* true if this came from a SendEvent request */
    419     Display       *display;     /* Display the event was read from */
    420     Window        window;       /* unused */
    421     XID           deviceid;
    422     Time          time;
    423     int           request;      /* one of MappingModifier, MappingKeyboard,
    424                                     MappingPointer */
    425     int           first_keycode;/* first keycode */
    426     int           count;        /* defines range of change w. first_keycode*/
    427 } XDeviceMappingEvent;
    428 
    429 /*******************************************************************
    430  *
    431  * ChangeDeviceNotify event.  This event is sent when an
    432  * XChangeKeyboard or XChangePointer request is made.
    433  *
    434  */
    435 
    436 typedef struct {
    437     int           type;
    438     unsigned long serial;       /* # of last request processed by server */
    439     Bool          send_event;   /* true if this came from a SendEvent request */
    440     Display       *display;     /* Display the event was read from */
    441     Window        window;       /* unused */
    442     XID           deviceid;
    443     Time          time;
    444     int           request;      /* NewPointer or NewKeyboard */
    445 } XChangeDeviceNotifyEvent;
    446 
    447 /*******************************************************************
    448  *
    449  * DevicePresenceNotify event.  This event is sent when the list of
    450  * input devices changes, in which case devchange will be false, and
    451  * no information about the change will be contained in the event;
    452  * the client should use XListInputDevices() to learn what has changed.
    453  *
    454  * If devchange is true, an attribute that the server believes is
    455  * important has changed on a device, and the client should use
    456  * XGetDeviceControl to examine the device.  If control is non-zero,
    457  * then that control has changed meaningfully.
    458  */
    459 
    460 typedef struct {
    461     int           type;
    462     unsigned long serial;       /* # of last request processed by server */
    463     Bool          send_event;   /* true if this came from a SendEvent request */
    464     Display       *display;     /* Display the event was read from */
    465     Window        window;       /* unused */
    466     Time          time;
    467     Bool          devchange;
    468     XID           deviceid;
    469     XID           control;
    470 } XDevicePresenceNotifyEvent;
    471 
    472 /*
    473  * Notifies the client that a property on a device has changed value. The
    474  * client is expected to query the server for updated value of the property.
    475  */
    476 typedef struct {
    477     int           type;
    478     unsigned long serial;       /* # of last request processed by server */
    479     Bool          send_event;   /* true if this came from a SendEvent request */
    480     Display       *display;     /* Display the event was read from */
    481     Window        window;       /* unused */
    482     Time          time;
    483     XID           deviceid;     /* id of the device that changed */
    484     Atom          atom;         /* the property that changed */
    485     int           state;        /* PropertyNewValue or PropertyDeleted */
    486 } XDevicePropertyNotifyEvent;
    487 
    488 
    489 /*******************************************************************
    490  *
    491  * Control structures for input devices that support input class
    492  * Feedback.  These are used by the XGetFeedbackControl and
    493  * XChangeFeedbackControl functions.
    494  *
    495  */
    496 
    497 typedef struct {
    498 #if defined(__cplusplus) || defined(c_plusplus)
    499      XID            c_class;
    500 #else
    501      XID            class;
    502 #endif
    503      int            length;
    504      XID            id;
    505 } XFeedbackState;
    506 
    507 typedef struct {
    508 #if defined(__cplusplus) || defined(c_plusplus)
    509     XID     c_class;
    510 #else
    511     XID     class;
    512 #endif
    513     int     length;
    514     XID     id;
    515     int     click;
    516     int     percent;
    517     int     pitch;
    518     int     duration;
    519     int     led_mask;
    520     int     global_auto_repeat;
    521     char    auto_repeats[32];
    522 } XKbdFeedbackState;
    523 
    524 typedef struct {
    525 #if defined(__cplusplus) || defined(c_plusplus)
    526     XID     c_class;
    527 #else
    528     XID     class;
    529 #endif
    530     int     length;
    531     XID     id;
    532     int     accelNum;
    533     int     accelDenom;
    534     int     threshold;
    535 } XPtrFeedbackState;
    536 
    537 typedef struct {
    538 #if defined(__cplusplus) || defined(c_plusplus)
    539     XID     c_class;
    540 #else
    541     XID     class;
    542 #endif
    543     int     length;
    544     XID     id;
    545     int     resolution;
    546     int     minVal;
    547     int     maxVal;
    548 } XIntegerFeedbackState;
    549 
    550 typedef struct {
    551 #if defined(__cplusplus) || defined(c_plusplus)
    552     XID     c_class;
    553 #else
    554     XID     class;
    555 #endif
    556     int     length;
    557     XID     id;
    558     int     max_symbols;
    559     int     num_syms_supported;
    560     KeySym  *syms_supported;
    561 } XStringFeedbackState;
    562 
    563 typedef struct {
    564 #if defined(__cplusplus) || defined(c_plusplus)
    565     XID     c_class;
    566 #else
    567     XID     class;
    568 #endif
    569     int     length;
    570     XID     id;
    571     int     percent;
    572     int     pitch;
    573     int     duration;
    574 } XBellFeedbackState;
    575 
    576 typedef struct {
    577 #if defined(__cplusplus) || defined(c_plusplus)
    578     XID     c_class;
    579 #else
    580     XID     class;
    581 #endif
    582     int     length;
    583     XID     id;
    584     int     led_values;
    585     int     led_mask;
    586 } XLedFeedbackState;
    587 
    588 typedef struct {
    589 #if defined(__cplusplus) || defined(c_plusplus)
    590      XID            c_class;
    591 #else
    592      XID            class;
    593 #endif
    594      int            length;
    595      XID	    id;
    596 } XFeedbackControl;
    597 
    598 typedef struct {
    599 #if defined(__cplusplus) || defined(c_plusplus)
    600     XID     c_class;
    601 #else
    602     XID     class;
    603 #endif
    604     int     length;
    605     XID     id;
    606     int     accelNum;
    607     int     accelDenom;
    608     int     threshold;
    609 } XPtrFeedbackControl;
    610 
    611 typedef struct {
    612 #if defined(__cplusplus) || defined(c_plusplus)
    613     XID     c_class;
    614 #else
    615     XID     class;
    616 #endif
    617     int     length;
    618     XID     id;
    619     int     click;
    620     int     percent;
    621     int     pitch;
    622     int     duration;
    623     int     led_mask;
    624     int     led_value;
    625     int     key;
    626     int     auto_repeat_mode;
    627 } XKbdFeedbackControl;
    628 
    629 typedef struct {
    630 #if defined(__cplusplus) || defined(c_plusplus)
    631     XID     c_class;
    632 #else
    633     XID     class;
    634 #endif
    635     int     length;
    636     XID     id;
    637     int     num_keysyms;
    638     KeySym  *syms_to_display;
    639 } XStringFeedbackControl;
    640 
    641 typedef struct {
    642 #if defined(__cplusplus) || defined(c_plusplus)
    643     XID     c_class;
    644 #else
    645     XID     class;
    646 #endif
    647     int     length;
    648     XID     id;
    649     int     int_to_display;
    650 } XIntegerFeedbackControl;
    651 
    652 typedef struct {
    653 #if defined(__cplusplus) || defined(c_plusplus)
    654     XID     c_class;
    655 #else
    656     XID     class;
    657 #endif
    658     int     length;
    659     XID     id;
    660     int     percent;
    661     int     pitch;
    662     int     duration;
    663 } XBellFeedbackControl;
    664 
    665 typedef struct {
    666 #if defined(__cplusplus) || defined(c_plusplus)
    667     XID     c_class;
    668 #else
    669     XID     class;
    670 #endif
    671     int     length;
    672     XID     id;
    673     int     led_mask;
    674     int     led_values;
    675 } XLedFeedbackControl;
    676 
    677 /*******************************************************************
    678  *
    679  * Device control structures.
    680  *
    681  */
    682 
    683 typedef struct {
    684      XID            control;
    685      int            length;
    686 } XDeviceControl;
    687 
    688 typedef struct {
    689      XID            control;
    690      int            length;
    691      int            first_valuator;
    692      int            num_valuators;
    693      int            *resolutions;
    694 } XDeviceResolutionControl;
    695 
    696 typedef struct {
    697      XID            control;
    698      int            length;
    699      int            num_valuators;
    700      int            *resolutions;
    701      int            *min_resolutions;
    702      int            *max_resolutions;
    703 } XDeviceResolutionState;
    704 
    705 typedef struct {
    706     XID             control;
    707     int             length;
    708     int             min_x;
    709     int             max_x;
    710     int             min_y;
    711     int             max_y;
    712     int             flip_x;
    713     int             flip_y;
    714     int             rotation;
    715     int             button_threshold;
    716 } XDeviceAbsCalibControl, XDeviceAbsCalibState;
    717 
    718 typedef struct {
    719     XID             control;
    720     int             length;
    721     int             offset_x;
    722     int             offset_y;
    723     int             width;
    724     int             height;
    725     int             screen;
    726     XID             following;
    727 } XDeviceAbsAreaControl, XDeviceAbsAreaState;
    728 
    729 typedef struct {
    730     XID             control;
    731     int             length;
    732     int             status;
    733 } XDeviceCoreControl;
    734 
    735 typedef struct {
    736     XID             control;
    737     int             length;
    738     int             status;
    739     int             iscore;
    740 } XDeviceCoreState;
    741 
    742 typedef struct {
    743     XID             control;
    744     int             length;
    745     int             enable;
    746 } XDeviceEnableControl, XDeviceEnableState;
    747 
    748 /*******************************************************************
    749  *
    750  * An array of XDeviceList structures is returned by the
    751  * XListInputDevices function.  Each entry contains information
    752  * about one input device.  Among that information is an array of
    753  * pointers to structures that describe the characteristics of
    754  * the input device.
    755  *
    756  */
    757 
    758 typedef struct _XAnyClassinfo {
    759 #if defined(__cplusplus) || defined(c_plusplus)
    760     XID 	c_class;
    761 #else
    762     XID 	class;
    763 #endif
    764     int 	length;
    765     } XAnyClassInfo;
    766 
    767 typedef struct _XDeviceInfo *XDeviceInfoPtr;
    768 
    769 typedef struct _XDeviceInfo
    770     {
    771     XID                 id;
    772     Atom                type;
    773     char                *name;
    774     int                 num_classes;
    775     int                 use;
    776     XAnyClassPtr 	inputclassinfo;
    777     } XDeviceInfo;
    778 
    779 typedef struct _XKeyInfo *XKeyInfoPtr;
    780 
    781 typedef struct _XKeyInfo
    782     {
    783 #if defined(__cplusplus) || defined(c_plusplus)
    784     XID			c_class;
    785 #else
    786     XID			class;
    787 #endif
    788     int			length;
    789     unsigned short      min_keycode;
    790     unsigned short      max_keycode;
    791     unsigned short      num_keys;
    792     } XKeyInfo;
    793 
    794 typedef struct _XButtonInfo *XButtonInfoPtr;
    795 
    796 typedef struct _XButtonInfo {
    797 #if defined(__cplusplus) || defined(c_plusplus)
    798     XID		c_class;
    799 #else
    800     XID		class;
    801 #endif
    802     int		length;
    803     short 	num_buttons;
    804     } XButtonInfo;
    805 
    806 typedef struct _XAxisInfo *XAxisInfoPtr;
    807 
    808 typedef struct _XAxisInfo {
    809     int 	resolution;
    810     int 	min_value;
    811     int 	max_value;
    812     } XAxisInfo;
    813 
    814 typedef struct _XValuatorInfo *XValuatorInfoPtr;
    815 
    816 typedef struct	_XValuatorInfo
    817     {
    818 #if defined(__cplusplus) || defined(c_plusplus)
    819     XID			c_class;
    820 #else
    821     XID			class;
    822 #endif
    823     int			length;
    824     unsigned char       num_axes;
    825     unsigned char       mode;
    826     unsigned long       motion_buffer;
    827     XAxisInfoPtr        axes;
    828     } XValuatorInfo;
    829 
    830 /*******************************************************************
    831  *
    832  * An XDevice structure is returned by the XOpenDevice function.
    833  * It contains an array of pointers to XInputClassInfo structures.
    834  * Each contains information about a class of input supported by the
    835  * device, including a pointer to an array of data for each type of event
    836  * the device reports.
    837  *
    838  */
    839 
    840 
    841 typedef struct {
    842         unsigned char   input_class;
    843         unsigned char   event_type_base;
    844 } XInputClassInfo;
    845 
    846 typedef struct {
    847         XID                    device_id;
    848         int                    num_classes;
    849         XInputClassInfo        *classes;
    850 } XDevice;
    851 
    852 
    853 /*******************************************************************
    854  *
    855  * The following structure is used to return information for the
    856  * XGetSelectedExtensionEvents function.
    857  *
    858  */
    859 
    860 typedef struct {
    861         XEventClass     event_type;
    862         XID             device;
    863 } XEventList;
    864 
    865 /*******************************************************************
    866  *
    867  * The following structure is used to return motion history data from
    868  * an input device that supports the input class Valuators.
    869  * This information is returned by the XGetDeviceMotionEvents function.
    870  *
    871  */
    872 
    873 typedef struct {
    874         Time   time;
    875         int    *data;
    876 } XDeviceTimeCoord;
    877 
    878 
    879 /*******************************************************************
    880  *
    881  * Device state structure.
    882  * This is returned by the XQueryDeviceState request.
    883  *
    884  */
    885 
    886 typedef struct {
    887         XID		device_id;
    888         int		num_classes;
    889         XInputClass	*data;
    890 } XDeviceState;
    891 
    892 /*******************************************************************
    893  *
    894  * Note that the mode field is a bitfield that reports the Proximity
    895  * status of the device as well as the mode.  The mode field should
    896  * be OR'd with the mask DeviceMode and compared with the values
    897  * Absolute and Relative to determine the mode, and should be OR'd
    898  * with the mask ProximityState and compared with the values InProximity
    899  * and OutOfProximity to determine the proximity state.
    900  *
    901  */
    902 
    903 typedef struct {
    904 #if defined(__cplusplus) || defined(c_plusplus)
    905     unsigned char	c_class;
    906 #else
    907     unsigned char	class;
    908 #endif
    909     unsigned char	length;
    910     unsigned char	num_valuators;
    911     unsigned char	mode;
    912     int        		*valuators;
    913 } XValuatorState;
    914 
    915 typedef struct {
    916 #if defined(__cplusplus) || defined(c_plusplus)
    917     unsigned char	c_class;
    918 #else
    919     unsigned char	class;
    920 #endif
    921     unsigned char	length;
    922     short		num_keys;
    923     char        	keys[32];
    924 } XKeyState;
    925 
    926 typedef struct {
    927 #if defined(__cplusplus) || defined(c_plusplus)
    928     unsigned char	c_class;
    929 #else
    930     unsigned char	class;
    931 #endif
    932     unsigned char	length;
    933     short		num_buttons;
    934     char        	buttons[32];
    935 } XButtonState;
    936 
    937 
    938 
    939 /*******************************************************************
    940  *
    941  * Function definitions.
    942  *
    943  */
    944 
    945 _XFUNCPROTOBEGIN
    946 
    947 extern int	XChangeKeyboardDevice(
    948     Display*		/* display */,
    949     XDevice*		/* device */
    950 );
    951 
    952 extern int	XChangePointerDevice(
    953     Display*		/* display */,
    954     XDevice*		/* device */,
    955     int			/* xaxis */,
    956     int			/* yaxis */
    957 );
    958 
    959 extern int	XGrabDevice(
    960     Display*		/* display */,
    961     XDevice*		/* device */,
    962     Window		/* grab_window */,
    963     Bool		/* ownerEvents */,
    964     int			/* event count */,
    965     XEventClass*	/* event_list */,
    966     int			/* this_device_mode */,
    967     int			/* other_devices_mode */,
    968     Time		/* time */
    969 );
    970 
    971 extern int	XUngrabDevice(
    972     Display*		/* display */,
    973     XDevice*		/* device */,
    974     Time 		/* time */
    975 );
    976 
    977 extern int	XGrabDeviceKey(
    978     Display*		/* display */,
    979     XDevice*		/* device */,
    980     unsigned int	/* key */,
    981     unsigned int	/* modifiers */,
    982     XDevice*		/* modifier_device */,
    983     Window		/* grab_window */,
    984     Bool		/* owner_events */,
    985     unsigned int	/* event_count */,
    986     XEventClass*	/* event_list */,
    987     int			/* this_device_mode */,
    988     int			/* other_devices_mode */
    989 );
    990 
    991 extern int	XUngrabDeviceKey(
    992     Display*		/* display */,
    993     XDevice*		/* device */,
    994     unsigned int	/* key */,
    995     unsigned int	/* modifiers */,
    996     XDevice*		/* modifier_dev */,
    997     Window		/* grab_window */
    998 );
    999 
   1000 extern int	XGrabDeviceButton(
   1001     Display*		/* display */,
   1002     XDevice*		/* device */,
   1003     unsigned int	/* button */,
   1004     unsigned int	/* modifiers */,
   1005     XDevice*		/* modifier_device */,
   1006     Window		/* grab_window */,
   1007     Bool		/* owner_events */,
   1008     unsigned int	/* event_count */,
   1009     XEventClass*	/* event_list */,
   1010     int			/* this_device_mode */,
   1011     int			/* other_devices_mode */
   1012 );
   1013 
   1014 extern int	XUngrabDeviceButton(
   1015     Display*		/* display */,
   1016     XDevice*		/* device */,
   1017     unsigned int	/* button */,
   1018     unsigned int	/* modifiers */,
   1019     XDevice*		/* modifier_dev */,
   1020     Window		/* grab_window */
   1021 );
   1022 
   1023 extern int	XAllowDeviceEvents(
   1024     Display*		/* display */,
   1025     XDevice*		/* device */,
   1026     int			/* event_mode */,
   1027     Time		/* time */
   1028 );
   1029 
   1030 extern int	XGetDeviceFocus(
   1031     Display*		/* display */,
   1032     XDevice*		/* device */,
   1033     Window*		/* focus */,
   1034     int*		/* revert_to */,
   1035     Time*		/* time */
   1036 );
   1037 
   1038 extern int	XSetDeviceFocus(
   1039     Display*		/* display */,
   1040     XDevice*		/* device */,
   1041     Window		/* focus */,
   1042     int			/* revert_to */,
   1043     Time		/* time */
   1044 );
   1045 
   1046 extern XFeedbackState	*XGetFeedbackControl(
   1047     Display*		/* display */,
   1048     XDevice*		/* device */,
   1049     int*		/* num_feedbacks */
   1050 );
   1051 
   1052 extern void	XFreeFeedbackList(
   1053     XFeedbackState*	/* list */
   1054 );
   1055 
   1056 extern int	XChangeFeedbackControl(
   1057     Display*		/* display */,
   1058     XDevice*		/* device */,
   1059     unsigned long	/* mask */,
   1060     XFeedbackControl*	/* f */
   1061 );
   1062 
   1063 extern int	XDeviceBell(
   1064     Display*		/* display */,
   1065     XDevice*		/* device */,
   1066     XID			/* feedbackclass */,
   1067     XID			/* feedbackid */,
   1068     int			/* percent */
   1069 );
   1070 
   1071 extern KeySym	*XGetDeviceKeyMapping(
   1072     Display*		/* display */,
   1073     XDevice*		/* device */,
   1074 #if NeedWidePrototypes
   1075     unsigned int	/* first */,
   1076 #else
   1077     KeyCode		/* first */,
   1078 #endif
   1079     int			/* keycount */,
   1080     int*		/* syms_per_code */
   1081 );
   1082 
   1083 extern int	XChangeDeviceKeyMapping(
   1084     Display*		/* display */,
   1085     XDevice*		/* device */,
   1086     int			/* first */,
   1087     int			/* syms_per_code */,
   1088     KeySym*		/* keysyms */,
   1089     int			/* count */
   1090 );
   1091 
   1092 extern XModifierKeymap	*XGetDeviceModifierMapping(
   1093     Display*		/* display */,
   1094     XDevice*		/* device */
   1095 );
   1096 
   1097 extern int	XSetDeviceModifierMapping(
   1098     Display*		/* display */,
   1099     XDevice*		/* device */,
   1100     XModifierKeymap*	/* modmap */
   1101 );
   1102 
   1103 extern int	XSetDeviceButtonMapping(
   1104     Display*		/* display */,
   1105     XDevice*		/* device */,
   1106     unsigned char*	/* map[] */,
   1107     int			/* nmap */
   1108 );
   1109 
   1110 extern int	XGetDeviceButtonMapping(
   1111     Display*		/* display */,
   1112     XDevice*		/* device */,
   1113     unsigned char*	/* map[] */,
   1114     unsigned int	/* nmap */
   1115 );
   1116 
   1117 extern XDeviceState	*XQueryDeviceState(
   1118     Display*		/* display */,
   1119     XDevice*		/* device */
   1120 );
   1121 
   1122 extern void	XFreeDeviceState(
   1123     XDeviceState*	/* list */
   1124 );
   1125 
   1126 extern XExtensionVersion	*XGetExtensionVersion(
   1127     Display*		/* display */,
   1128     _Xconst char*	/* name */
   1129 );
   1130 
   1131 extern XDeviceInfo	*XListInputDevices(
   1132     Display*		/* display */,
   1133     int*		/* ndevices */
   1134 );
   1135 
   1136 extern void	XFreeDeviceList(
   1137     XDeviceInfo*	/* list */
   1138 );
   1139 
   1140 extern XDevice	*XOpenDevice(
   1141     Display*		/* display */,
   1142     XID			/* id */
   1143 );
   1144 
   1145 extern int	XCloseDevice(
   1146     Display*		/* display */,
   1147     XDevice*		/* device */
   1148 );
   1149 
   1150 extern int	XSetDeviceMode(
   1151     Display*		/* display */,
   1152     XDevice*		/* device */,
   1153     int			/* mode */
   1154 );
   1155 
   1156 extern int	XSetDeviceValuators(
   1157     Display*		/* display */,
   1158     XDevice*		/* device */,
   1159     int*		/* valuators */,
   1160     int			/* first_valuator */,
   1161     int			/* num_valuators */
   1162 );
   1163 
   1164 extern XDeviceControl	*XGetDeviceControl(
   1165     Display*		/* display */,
   1166     XDevice*		/* device */,
   1167     int			/* control */
   1168 );
   1169 
   1170 extern int	XChangeDeviceControl(
   1171     Display*		/* display */,
   1172     XDevice*		/* device */,
   1173     int			/* control */,
   1174     XDeviceControl*	/* d */
   1175 );
   1176 
   1177 extern int	XSelectExtensionEvent(
   1178     Display*		/* display */,
   1179     Window		/* w */,
   1180     XEventClass*	/* event_list */,
   1181     int			/* count */
   1182 );
   1183 
   1184 extern int XGetSelectedExtensionEvents(
   1185     Display*		/* display */,
   1186     Window		/* w */,
   1187     int*		/* this_client_count */,
   1188     XEventClass**	/* this_client_list */,
   1189     int*		/* all_clients_count */,
   1190     XEventClass**	/* all_clients_list */
   1191 );
   1192 
   1193 extern int	XChangeDeviceDontPropagateList(
   1194     Display*		/* display */,
   1195     Window		/* window */,
   1196     int			/* count */,
   1197     XEventClass*	/* events */,
   1198     int			/* mode */
   1199 );
   1200 
   1201 extern XEventClass	*XGetDeviceDontPropagateList(
   1202     Display*		/* display */,
   1203     Window		/* window */,
   1204     int*		/* count */
   1205 );
   1206 
   1207 extern Status	XSendExtensionEvent(
   1208     Display*		/* display */,
   1209     XDevice*		/* device */,
   1210     Window		/* dest */,
   1211     Bool		/* prop */,
   1212     int			/* count */,
   1213     XEventClass*	/* list */,
   1214     XEvent*		/* event */
   1215 );
   1216 
   1217 extern XDeviceTimeCoord	*XGetDeviceMotionEvents(
   1218     Display*		/* display */,
   1219     XDevice*		/* device */,
   1220     Time		/* start */,
   1221     Time		/* stop */,
   1222     int*		/* nEvents */,
   1223     int*		/* mode */,
   1224     int*		/* axis_count */
   1225 );
   1226 
   1227 extern void	XFreeDeviceMotionEvents(
   1228     XDeviceTimeCoord*	/* events */
   1229 );
   1230 
   1231 extern void	XFreeDeviceControl(
   1232     XDeviceControl*	/* control */
   1233 );
   1234 
   1235 extern Atom*   XListDeviceProperties(
   1236     Display*            /* dpy */,
   1237     XDevice*            /* dev */,
   1238     int*                /* nprops_return */
   1239 );
   1240 
   1241 extern void XChangeDeviceProperty(
   1242     Display*            /* dpy */,
   1243     XDevice*            /* dev */,
   1244     Atom                /* property */,
   1245     Atom                /* type */,
   1246     int                 /* format */,
   1247     int                 /* mode */,
   1248     _Xconst unsigned char * /*data */,
   1249     int                 /* nelements */
   1250 );
   1251 
   1252 extern void
   1253 XDeleteDeviceProperty(
   1254     Display*            /* dpy */,
   1255     XDevice*            /* dev */,
   1256     Atom                /* property */
   1257 );
   1258 
   1259 extern Status
   1260 XGetDeviceProperty(
   1261      Display*           /* dpy*/,
   1262      XDevice*           /* dev*/,
   1263      Atom               /* property*/,
   1264      long               /* offset*/,
   1265      long               /* length*/,
   1266      Bool               /* delete*/,
   1267      Atom               /* req_type*/,
   1268      Atom*              /* actual_type*/,
   1269      int*               /* actual_format*/,
   1270      unsigned long*     /* nitems*/,
   1271      unsigned long*     /* bytes_after*/,
   1272      unsigned char**    /* prop*/
   1273 );
   1274 
   1275 _XFUNCPROTOEND
   1276 
   1277 #endif /* _XINPUT_H_ */
   1278