1278 lines
35 KiB
C
1278 lines
35 KiB
C
/************************************************************
|
|
|
|
Copyright 1989, 1998 The Open Group
|
|
|
|
Permission to use, copy, modify, distribute, and sell this software and its
|
|
documentation for any purpose is hereby granted without fee, provided that
|
|
the above copyright notice appear in all copies and that both that
|
|
copyright notice and this permission notice appear in supporting
|
|
documentation.
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
Except as contained in this notice, the name of The Open Group shall not be
|
|
used in advertising or otherwise to promote the sale, use or other dealings
|
|
in this Software without prior written authorization from The Open Group.
|
|
|
|
Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
|
|
|
|
All Rights Reserved
|
|
|
|
Permission to use, copy, modify, and distribute this software and its
|
|
documentation for any purpose and without fee is hereby granted,
|
|
provided that the above copyright notice appear in all copies and that
|
|
both that copyright notice and this permission notice appear in
|
|
supporting documentation, and that the name of Hewlett-Packard not be
|
|
used in advertising or publicity pertaining to distribution of the
|
|
software without specific, written prior permission.
|
|
|
|
HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
|
HEWLETT-PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
|
SOFTWARE.
|
|
|
|
********************************************************/
|
|
|
|
/* Definitions used by the library and client */
|
|
|
|
#ifndef _XINPUT_H_
|
|
#define _XINPUT_H_
|
|
|
|
#include <X11/Xlib.h>
|
|
#include <X11/extensions/XI.h>
|
|
|
|
#define _deviceKeyPress 0
|
|
#define _deviceKeyRelease 1
|
|
|
|
#define _deviceButtonPress 0
|
|
#define _deviceButtonRelease 1
|
|
|
|
#define _deviceMotionNotify 0
|
|
|
|
#define _deviceFocusIn 0
|
|
#define _deviceFocusOut 1
|
|
|
|
#define _proximityIn 0
|
|
#define _proximityOut 1
|
|
|
|
#define _deviceStateNotify 0
|
|
#define _deviceMappingNotify 1
|
|
#define _changeDeviceNotify 2
|
|
/* Space of 3 between is necessary! Reserved for DeviceKeyStateNotify,
|
|
DeviceButtonStateNotify, DevicePresenceNotify (essentially unused). This
|
|
code has to be in sync with FixExtensionEvents() in xserver/Xi/extinit.c */
|
|
#define _propertyNotify 6
|
|
|
|
#define FindTypeAndClass(d,type,_class,classid,offset) \
|
|
{ int _i; XInputClassInfo *_ip; \
|
|
type = 0; _class = 0; \
|
|
for (_i=0, _ip= ((XDevice *) d)->classes; \
|
|
_i< ((XDevice *) d)->num_classes; \
|
|
_i++, _ip++) \
|
|
if (_ip->input_class == classid) \
|
|
{type = _ip->event_type_base + offset; \
|
|
_class = ((XDevice *) d)->device_id << 8 | type;}}
|
|
|
|
#define DeviceKeyPress(d,type,_class) \
|
|
FindTypeAndClass(d, type, _class, KeyClass, _deviceKeyPress)
|
|
|
|
#define DeviceKeyRelease(d,type,_class) \
|
|
FindTypeAndClass(d, type, _class, KeyClass, _deviceKeyRelease)
|
|
|
|
#define DeviceButtonPress(d,type,_class) \
|
|
FindTypeAndClass(d, type, _class, ButtonClass, _deviceButtonPress)
|
|
|
|
#define DeviceButtonRelease(d,type,_class) \
|
|
FindTypeAndClass(d, type, _class, ButtonClass, _deviceButtonRelease)
|
|
|
|
#define DeviceMotionNotify(d,type,_class) \
|
|
FindTypeAndClass(d, type, _class, ValuatorClass, _deviceMotionNotify)
|
|
|
|
#define DeviceFocusIn(d,type,_class) \
|
|
FindTypeAndClass(d, type, _class, FocusClass, _deviceFocusIn)
|
|
|
|
#define DeviceFocusOut(d,type,_class) \
|
|
FindTypeAndClass(d, type, _class, FocusClass, _deviceFocusOut)
|
|
|
|
#define ProximityIn(d,type,_class) \
|
|
FindTypeAndClass(d, type, _class, ProximityClass, _proximityIn)
|
|
|
|
#define ProximityOut(d,type,_class) \
|
|
FindTypeAndClass(d, type, _class, ProximityClass, _proximityOut)
|
|
|
|
#define DeviceStateNotify(d,type,_class) \
|
|
FindTypeAndClass(d, type, _class, OtherClass, _deviceStateNotify)
|
|
|
|
#define DeviceMappingNotify(d,type,_class) \
|
|
FindTypeAndClass(d, type, _class, OtherClass, _deviceMappingNotify)
|
|
|
|
#define ChangeDeviceNotify(d,type,_class) \
|
|
FindTypeAndClass(d, type, _class, OtherClass, _changeDeviceNotify)
|
|
|
|
#define DevicePropertyNotify(d, type, _class) \
|
|
FindTypeAndClass(d, type, _class, OtherClass, _propertyNotify)
|
|
|
|
#define DevicePointerMotionHint(d,type,_class) \
|
|
{ _class = ((XDevice *) d)->device_id << 8 | _devicePointerMotionHint;}
|
|
|
|
#define DeviceButton1Motion(d,type,_class) \
|
|
{ _class = ((XDevice *) d)->device_id << 8 | _deviceButton1Motion;}
|
|
|
|
#define DeviceButton2Motion(d,type,_class) \
|
|
{ _class = ((XDevice *) d)->device_id << 8 | _deviceButton2Motion;}
|
|
|
|
#define DeviceButton3Motion(d,type,_class) \
|
|
{ _class = ((XDevice *) d)->device_id << 8 | _deviceButton3Motion;}
|
|
|
|
#define DeviceButton4Motion(d,type, _class) \
|
|
{ _class = ((XDevice *) d)->device_id << 8 | _deviceButton4Motion;}
|
|
|
|
#define DeviceButton5Motion(d,type,_class) \
|
|
{ _class = ((XDevice *) d)->device_id << 8 | _deviceButton5Motion;}
|
|
|
|
#define DeviceButtonMotion(d,type, _class) \
|
|
{ _class = ((XDevice *) d)->device_id << 8 | _deviceButtonMotion;}
|
|
|
|
#define DeviceOwnerGrabButton(d,type,_class) \
|
|
{ _class = ((XDevice *) d)->device_id << 8 | _deviceOwnerGrabButton;}
|
|
|
|
#define DeviceButtonPressGrab(d,type,_class) \
|
|
{ _class = ((XDevice *) d)->device_id << 8 | _deviceButtonGrab;}
|
|
|
|
#define NoExtensionEvent(d,type,_class) \
|
|
{ _class = ((XDevice *) d)->device_id << 8 | _noExtensionEvent;}
|
|
|
|
|
|
/* We need the declaration for DevicePresence. */
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
extern "C" {
|
|
#endif
|
|
extern int _XiGetDevicePresenceNotifyEvent(Display *);
|
|
extern void _xibaddevice( Display *dpy, int *error);
|
|
extern void _xibadclass( Display *dpy, int *error);
|
|
extern void _xibadevent( Display *dpy, int *error);
|
|
extern void _xibadmode( Display *dpy, int *error);
|
|
extern void _xidevicebusy( Display *dpy, int *error);
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
}
|
|
#endif
|
|
|
|
#define DevicePresence(dpy, type, _class) \
|
|
{ \
|
|
type = _XiGetDevicePresenceNotifyEvent(dpy); \
|
|
_class = (0x10000 | _devicePresence); \
|
|
}
|
|
|
|
/* Errors */
|
|
#define BadDevice(dpy,error) _xibaddevice(dpy, &error)
|
|
|
|
#define BadClass(dpy,error) _xibadclass(dpy, &error)
|
|
|
|
#define BadEvent(dpy,error) _xibadevent(dpy, &error)
|
|
|
|
#define BadMode(dpy,error) _xibadmode(dpy, &error)
|
|
|
|
#define DeviceBusy(dpy,error) _xidevicebusy(dpy, &error)
|
|
|
|
typedef struct _XAnyClassinfo *XAnyClassPtr;
|
|
|
|
/***************************************************************
|
|
*
|
|
* DeviceKey events. These events are sent by input devices that
|
|
* support input class Keys.
|
|
* The location of the X pointer is reported in the coordinate
|
|
* fields of the x,y and x_root,y_root fields.
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
int type; /* of event */
|
|
unsigned long serial; /* # of last request processed */
|
|
Bool send_event; /* true if from SendEvent request */
|
|
Display *display; /* Display the event was read from */
|
|
Window window; /* "event" window reported relative to */
|
|
XID deviceid;
|
|
Window root; /* root window event occured on */
|
|
Window subwindow; /* child window */
|
|
Time time; /* milliseconds */
|
|
int x, y; /* x, y coordinates in event window */
|
|
int x_root; /* coordinates relative to root */
|
|
int y_root; /* coordinates relative to root */
|
|
unsigned int state; /* key or button mask */
|
|
unsigned int keycode; /* detail */
|
|
Bool same_screen; /* same screen flag */
|
|
unsigned int device_state; /* device key or button mask */
|
|
unsigned char axes_count;
|
|
unsigned char first_axis;
|
|
int axis_data[6];
|
|
} XDeviceKeyEvent;
|
|
|
|
typedef XDeviceKeyEvent XDeviceKeyPressedEvent;
|
|
typedef XDeviceKeyEvent XDeviceKeyReleasedEvent;
|
|
|
|
/*******************************************************************
|
|
*
|
|
* DeviceButton events. These events are sent by extension devices
|
|
* that support input class Buttons.
|
|
*
|
|
*/
|
|
|
|
typedef struct {
|
|
int type; /* of event */
|
|
unsigned long serial; /* # of last request processed by server */
|
|
Bool send_event; /* true if from a SendEvent request */
|
|
Display *display; /* Display the event was read from */
|
|
Window window; /* "event" window reported relative to */
|
|
XID deviceid;
|
|
Window root; /* root window that the event occured on */
|
|
Window subwindow; /* child window */
|
|
Time time; /* milliseconds */
|
|
int x, y; /* x, y coordinates in event window */
|
|
int x_root; /* coordinates relative to root */
|
|
int y_root; /* coordinates relative to root */
|
|
unsigned int state; /* key or button mask */
|
|
unsigned int button; /* detail */
|
|
Bool same_screen; /* same screen flag */
|
|
unsigned int device_state; /* device key or button mask */
|
|
unsigned char axes_count;
|
|
unsigned char first_axis;
|
|
int axis_data[6];
|
|
} XDeviceButtonEvent;
|
|
|
|
typedef XDeviceButtonEvent XDeviceButtonPressedEvent;
|
|
typedef XDeviceButtonEvent XDeviceButtonReleasedEvent;
|
|
|
|
/*******************************************************************
|
|
*
|
|
* DeviceMotionNotify event. These events are sent by extension devices
|
|
* that support input class Valuators.
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
int type; /* of event */
|
|
unsigned long serial; /* # of last request processed by server */
|
|
Bool send_event; /* true if from a SendEvent request */
|
|
Display *display; /* Display the event was read from */
|
|
Window window; /* "event" window reported relative to */
|
|
XID deviceid;
|
|
Window root; /* root window that the event occured on */
|
|
Window subwindow; /* child window */
|
|
Time time; /* milliseconds */
|
|
int x, y; /* x, y coordinates in event window */
|
|
int x_root; /* coordinates relative to root */
|
|
int y_root; /* coordinates relative to root */
|
|
unsigned int state; /* key or button mask */
|
|
char is_hint; /* detail */
|
|
Bool same_screen; /* same screen flag */
|
|
unsigned int device_state; /* device key or button mask */
|
|
unsigned char axes_count;
|
|
unsigned char first_axis;
|
|
int axis_data[6];
|
|
} XDeviceMotionEvent;
|
|
|
|
/*******************************************************************
|
|
*
|
|
* DeviceFocusChange events. These events are sent when the focus
|
|
* of an extension device that can be focused is changed.
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
int type; /* of event */
|
|
unsigned long serial; /* # of last request processed by server */
|
|
Bool send_event; /* true if from a SendEvent request */
|
|
Display *display; /* Display the event was read from */
|
|
Window window; /* "event" window reported relative to */
|
|
XID deviceid;
|
|
int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */
|
|
int detail;
|
|
/*
|
|
* NotifyAncestor, NotifyVirtual, NotifyInferior,
|
|
* NotifyNonLinear,NotifyNonLinearVirtual, NotifyPointer,
|
|
* NotifyPointerRoot, NotifyDetailNone
|
|
*/
|
|
Time time;
|
|
} XDeviceFocusChangeEvent;
|
|
|
|
typedef XDeviceFocusChangeEvent XDeviceFocusInEvent;
|
|
typedef XDeviceFocusChangeEvent XDeviceFocusOutEvent;
|
|
|
|
/*******************************************************************
|
|
*
|
|
* ProximityNotify events. These events are sent by those absolute
|
|
* positioning devices that are capable of generating proximity information.
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
int type; /* ProximityIn or ProximityOut */
|
|
unsigned long serial; /* # of last request processed by server */
|
|
Bool send_event; /* true if this came from a SendEvent request */
|
|
Display *display; /* Display the event was read from */
|
|
Window window;
|
|
XID deviceid;
|
|
Window root;
|
|
Window subwindow;
|
|
Time time;
|
|
int x, y;
|
|
int x_root, y_root;
|
|
unsigned int state;
|
|
Bool same_screen;
|
|
unsigned int device_state; /* device key or button mask */
|
|
unsigned char axes_count;
|
|
unsigned char first_axis;
|
|
int axis_data[6];
|
|
} XProximityNotifyEvent;
|
|
typedef XProximityNotifyEvent XProximityInEvent;
|
|
typedef XProximityNotifyEvent XProximityOutEvent;
|
|
|
|
/*******************************************************************
|
|
*
|
|
* DeviceStateNotify events are generated on EnterWindow and FocusIn
|
|
* for those clients who have selected DeviceState.
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
unsigned char c_class;
|
|
#else
|
|
unsigned char class;
|
|
#endif
|
|
unsigned char length;
|
|
} XInputClass;
|
|
|
|
typedef struct {
|
|
int type;
|
|
unsigned long serial; /* # of last request processed by server */
|
|
Bool send_event; /* true if this came from a SendEvent request */
|
|
Display *display; /* Display the event was read from */
|
|
Window window;
|
|
XID deviceid;
|
|
Time time;
|
|
int num_classes;
|
|
char data[64];
|
|
} XDeviceStateNotifyEvent;
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
unsigned char c_class;
|
|
#else
|
|
unsigned char class;
|
|
#endif
|
|
unsigned char length;
|
|
unsigned char num_valuators;
|
|
unsigned char mode;
|
|
int valuators[6];
|
|
} XValuatorStatus;
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
unsigned char c_class;
|
|
#else
|
|
unsigned char class;
|
|
#endif
|
|
unsigned char length;
|
|
short num_keys;
|
|
char keys[32];
|
|
} XKeyStatus;
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
unsigned char c_class;
|
|
#else
|
|
unsigned char class;
|
|
#endif
|
|
unsigned char length;
|
|
short num_buttons;
|
|
char buttons[32];
|
|
} XButtonStatus;
|
|
|
|
/*******************************************************************
|
|
*
|
|
* DeviceMappingNotify event. This event is sent when the key mapping,
|
|
* modifier mapping, or button mapping of an extension device is changed.
|
|
*
|
|
*/
|
|
|
|
typedef struct {
|
|
int type;
|
|
unsigned long serial; /* # of last request processed by server */
|
|
Bool send_event; /* true if this came from a SendEvent request */
|
|
Display *display; /* Display the event was read from */
|
|
Window window; /* unused */
|
|
XID deviceid;
|
|
Time time;
|
|
int request; /* one of MappingModifier, MappingKeyboard,
|
|
MappingPointer */
|
|
int first_keycode;/* first keycode */
|
|
int count; /* defines range of change w. first_keycode*/
|
|
} XDeviceMappingEvent;
|
|
|
|
/*******************************************************************
|
|
*
|
|
* ChangeDeviceNotify event. This event is sent when an
|
|
* XChangeKeyboard or XChangePointer request is made.
|
|
*
|
|
*/
|
|
|
|
typedef struct {
|
|
int type;
|
|
unsigned long serial; /* # of last request processed by server */
|
|
Bool send_event; /* true if this came from a SendEvent request */
|
|
Display *display; /* Display the event was read from */
|
|
Window window; /* unused */
|
|
XID deviceid;
|
|
Time time;
|
|
int request; /* NewPointer or NewKeyboard */
|
|
} XChangeDeviceNotifyEvent;
|
|
|
|
/*******************************************************************
|
|
*
|
|
* DevicePresenceNotify event. This event is sent when the list of
|
|
* input devices changes, in which case devchange will be false, and
|
|
* no information about the change will be contained in the event;
|
|
* the client should use XListInputDevices() to learn what has changed.
|
|
*
|
|
* If devchange is true, an attribute that the server believes is
|
|
* important has changed on a device, and the client should use
|
|
* XGetDeviceControl to examine the device. If control is non-zero,
|
|
* then that control has changed meaningfully.
|
|
*/
|
|
|
|
typedef struct {
|
|
int type;
|
|
unsigned long serial; /* # of last request processed by server */
|
|
Bool send_event; /* true if this came from a SendEvent request */
|
|
Display *display; /* Display the event was read from */
|
|
Window window; /* unused */
|
|
Time time;
|
|
Bool devchange;
|
|
XID deviceid;
|
|
XID control;
|
|
} XDevicePresenceNotifyEvent;
|
|
|
|
/*
|
|
* Notifies the client that a property on a device has changed value. The
|
|
* client is expected to query the server for updated value of the property.
|
|
*/
|
|
typedef struct {
|
|
int type;
|
|
unsigned long serial; /* # of last request processed by server */
|
|
Bool send_event; /* true if this came from a SendEvent request */
|
|
Display *display; /* Display the event was read from */
|
|
Window window; /* unused */
|
|
Time time;
|
|
XID deviceid; /* id of the device that changed */
|
|
Atom atom; /* the property that changed */
|
|
int state; /* PropertyNewValue or PropertyDeleted */
|
|
} XDevicePropertyNotifyEvent;
|
|
|
|
|
|
/*******************************************************************
|
|
*
|
|
* Control structures for input devices that support input class
|
|
* Feedback. These are used by the XGetFeedbackControl and
|
|
* XChangeFeedbackControl functions.
|
|
*
|
|
*/
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
XID c_class;
|
|
#else
|
|
XID class;
|
|
#endif
|
|
int length;
|
|
XID id;
|
|
} XFeedbackState;
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
XID c_class;
|
|
#else
|
|
XID class;
|
|
#endif
|
|
int length;
|
|
XID id;
|
|
int click;
|
|
int percent;
|
|
int pitch;
|
|
int duration;
|
|
int led_mask;
|
|
int global_auto_repeat;
|
|
char auto_repeats[32];
|
|
} XKbdFeedbackState;
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
XID c_class;
|
|
#else
|
|
XID class;
|
|
#endif
|
|
int length;
|
|
XID id;
|
|
int accelNum;
|
|
int accelDenom;
|
|
int threshold;
|
|
} XPtrFeedbackState;
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
XID c_class;
|
|
#else
|
|
XID class;
|
|
#endif
|
|
int length;
|
|
XID id;
|
|
int resolution;
|
|
int minVal;
|
|
int maxVal;
|
|
} XIntegerFeedbackState;
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
XID c_class;
|
|
#else
|
|
XID class;
|
|
#endif
|
|
int length;
|
|
XID id;
|
|
int max_symbols;
|
|
int num_syms_supported;
|
|
KeySym *syms_supported;
|
|
} XStringFeedbackState;
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
XID c_class;
|
|
#else
|
|
XID class;
|
|
#endif
|
|
int length;
|
|
XID id;
|
|
int percent;
|
|
int pitch;
|
|
int duration;
|
|
} XBellFeedbackState;
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
XID c_class;
|
|
#else
|
|
XID class;
|
|
#endif
|
|
int length;
|
|
XID id;
|
|
int led_values;
|
|
int led_mask;
|
|
} XLedFeedbackState;
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
XID c_class;
|
|
#else
|
|
XID class;
|
|
#endif
|
|
int length;
|
|
XID id;
|
|
} XFeedbackControl;
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
XID c_class;
|
|
#else
|
|
XID class;
|
|
#endif
|
|
int length;
|
|
XID id;
|
|
int accelNum;
|
|
int accelDenom;
|
|
int threshold;
|
|
} XPtrFeedbackControl;
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
XID c_class;
|
|
#else
|
|
XID class;
|
|
#endif
|
|
int length;
|
|
XID id;
|
|
int click;
|
|
int percent;
|
|
int pitch;
|
|
int duration;
|
|
int led_mask;
|
|
int led_value;
|
|
int key;
|
|
int auto_repeat_mode;
|
|
} XKbdFeedbackControl;
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
XID c_class;
|
|
#else
|
|
XID class;
|
|
#endif
|
|
int length;
|
|
XID id;
|
|
int num_keysyms;
|
|
KeySym *syms_to_display;
|
|
} XStringFeedbackControl;
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
XID c_class;
|
|
#else
|
|
XID class;
|
|
#endif
|
|
int length;
|
|
XID id;
|
|
int int_to_display;
|
|
} XIntegerFeedbackControl;
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
XID c_class;
|
|
#else
|
|
XID class;
|
|
#endif
|
|
int length;
|
|
XID id;
|
|
int percent;
|
|
int pitch;
|
|
int duration;
|
|
} XBellFeedbackControl;
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
XID c_class;
|
|
#else
|
|
XID class;
|
|
#endif
|
|
int length;
|
|
XID id;
|
|
int led_mask;
|
|
int led_values;
|
|
} XLedFeedbackControl;
|
|
|
|
/*******************************************************************
|
|
*
|
|
* Device control structures.
|
|
*
|
|
*/
|
|
|
|
typedef struct {
|
|
XID control;
|
|
int length;
|
|
} XDeviceControl;
|
|
|
|
typedef struct {
|
|
XID control;
|
|
int length;
|
|
int first_valuator;
|
|
int num_valuators;
|
|
int *resolutions;
|
|
} XDeviceResolutionControl;
|
|
|
|
typedef struct {
|
|
XID control;
|
|
int length;
|
|
int num_valuators;
|
|
int *resolutions;
|
|
int *min_resolutions;
|
|
int *max_resolutions;
|
|
} XDeviceResolutionState;
|
|
|
|
typedef struct {
|
|
XID control;
|
|
int length;
|
|
int min_x;
|
|
int max_x;
|
|
int min_y;
|
|
int max_y;
|
|
int flip_x;
|
|
int flip_y;
|
|
int rotation;
|
|
int button_threshold;
|
|
} XDeviceAbsCalibControl, XDeviceAbsCalibState;
|
|
|
|
typedef struct {
|
|
XID control;
|
|
int length;
|
|
int offset_x;
|
|
int offset_y;
|
|
int width;
|
|
int height;
|
|
int screen;
|
|
XID following;
|
|
} XDeviceAbsAreaControl, XDeviceAbsAreaState;
|
|
|
|
typedef struct {
|
|
XID control;
|
|
int length;
|
|
int status;
|
|
} XDeviceCoreControl;
|
|
|
|
typedef struct {
|
|
XID control;
|
|
int length;
|
|
int status;
|
|
int iscore;
|
|
} XDeviceCoreState;
|
|
|
|
typedef struct {
|
|
XID control;
|
|
int length;
|
|
int enable;
|
|
} XDeviceEnableControl, XDeviceEnableState;
|
|
|
|
/*******************************************************************
|
|
*
|
|
* An array of XDeviceList structures is returned by the
|
|
* XListInputDevices function. Each entry contains information
|
|
* about one input device. Among that information is an array of
|
|
* pointers to structures that describe the characteristics of
|
|
* the input device.
|
|
*
|
|
*/
|
|
|
|
typedef struct _XAnyClassinfo {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
XID c_class;
|
|
#else
|
|
XID class;
|
|
#endif
|
|
int length;
|
|
} XAnyClassInfo;
|
|
|
|
typedef struct _XDeviceInfo *XDeviceInfoPtr;
|
|
|
|
typedef struct _XDeviceInfo
|
|
{
|
|
XID id;
|
|
Atom type;
|
|
char *name;
|
|
int num_classes;
|
|
int use;
|
|
XAnyClassPtr inputclassinfo;
|
|
} XDeviceInfo;
|
|
|
|
typedef struct _XKeyInfo *XKeyInfoPtr;
|
|
|
|
typedef struct _XKeyInfo
|
|
{
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
XID c_class;
|
|
#else
|
|
XID class;
|
|
#endif
|
|
int length;
|
|
unsigned short min_keycode;
|
|
unsigned short max_keycode;
|
|
unsigned short num_keys;
|
|
} XKeyInfo;
|
|
|
|
typedef struct _XButtonInfo *XButtonInfoPtr;
|
|
|
|
typedef struct _XButtonInfo {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
XID c_class;
|
|
#else
|
|
XID class;
|
|
#endif
|
|
int length;
|
|
short num_buttons;
|
|
} XButtonInfo;
|
|
|
|
typedef struct _XAxisInfo *XAxisInfoPtr;
|
|
|
|
typedef struct _XAxisInfo {
|
|
int resolution;
|
|
int min_value;
|
|
int max_value;
|
|
} XAxisInfo;
|
|
|
|
typedef struct _XValuatorInfo *XValuatorInfoPtr;
|
|
|
|
typedef struct _XValuatorInfo
|
|
{
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
XID c_class;
|
|
#else
|
|
XID class;
|
|
#endif
|
|
int length;
|
|
unsigned char num_axes;
|
|
unsigned char mode;
|
|
unsigned long motion_buffer;
|
|
XAxisInfoPtr axes;
|
|
} XValuatorInfo;
|
|
|
|
/*******************************************************************
|
|
*
|
|
* An XDevice structure is returned by the XOpenDevice function.
|
|
* It contains an array of pointers to XInputClassInfo structures.
|
|
* Each contains information about a class of input supported by the
|
|
* device, including a pointer to an array of data for each type of event
|
|
* the device reports.
|
|
*
|
|
*/
|
|
|
|
|
|
typedef struct {
|
|
unsigned char input_class;
|
|
unsigned char event_type_base;
|
|
} XInputClassInfo;
|
|
|
|
typedef struct {
|
|
XID device_id;
|
|
int num_classes;
|
|
XInputClassInfo *classes;
|
|
} XDevice;
|
|
|
|
|
|
/*******************************************************************
|
|
*
|
|
* The following structure is used to return information for the
|
|
* XGetSelectedExtensionEvents function.
|
|
*
|
|
*/
|
|
|
|
typedef struct {
|
|
XEventClass event_type;
|
|
XID device;
|
|
} XEventList;
|
|
|
|
/*******************************************************************
|
|
*
|
|
* The following structure is used to return motion history data from
|
|
* an input device that supports the input class Valuators.
|
|
* This information is returned by the XGetDeviceMotionEvents function.
|
|
*
|
|
*/
|
|
|
|
typedef struct {
|
|
Time time;
|
|
int *data;
|
|
} XDeviceTimeCoord;
|
|
|
|
|
|
/*******************************************************************
|
|
*
|
|
* Device state structure.
|
|
* This is returned by the XQueryDeviceState request.
|
|
*
|
|
*/
|
|
|
|
typedef struct {
|
|
XID device_id;
|
|
int num_classes;
|
|
XInputClass *data;
|
|
} XDeviceState;
|
|
|
|
/*******************************************************************
|
|
*
|
|
* Note that the mode field is a bitfield that reports the Proximity
|
|
* status of the device as well as the mode. The mode field should
|
|
* be OR'd with the mask DeviceMode and compared with the values
|
|
* Absolute and Relative to determine the mode, and should be OR'd
|
|
* with the mask ProximityState and compared with the values InProximity
|
|
* and OutOfProximity to determine the proximity state.
|
|
*
|
|
*/
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
unsigned char c_class;
|
|
#else
|
|
unsigned char class;
|
|
#endif
|
|
unsigned char length;
|
|
unsigned char num_valuators;
|
|
unsigned char mode;
|
|
int *valuators;
|
|
} XValuatorState;
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
unsigned char c_class;
|
|
#else
|
|
unsigned char class;
|
|
#endif
|
|
unsigned char length;
|
|
short num_keys;
|
|
char keys[32];
|
|
} XKeyState;
|
|
|
|
typedef struct {
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
unsigned char c_class;
|
|
#else
|
|
unsigned char class;
|
|
#endif
|
|
unsigned char length;
|
|
short num_buttons;
|
|
char buttons[32];
|
|
} XButtonState;
|
|
|
|
|
|
|
|
/*******************************************************************
|
|
*
|
|
* Function definitions.
|
|
*
|
|
*/
|
|
|
|
_XFUNCPROTOBEGIN
|
|
|
|
extern int XChangeKeyboardDevice(
|
|
Display* /* display */,
|
|
XDevice* /* device */
|
|
);
|
|
|
|
extern int XChangePointerDevice(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
int /* xaxis */,
|
|
int /* yaxis */
|
|
);
|
|
|
|
extern int XGrabDevice(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
Window /* grab_window */,
|
|
Bool /* ownerEvents */,
|
|
int /* event count */,
|
|
XEventClass* /* event_list */,
|
|
int /* this_device_mode */,
|
|
int /* other_devices_mode */,
|
|
Time /* time */
|
|
);
|
|
|
|
extern int XUngrabDevice(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
Time /* time */
|
|
);
|
|
|
|
extern int XGrabDeviceKey(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
unsigned int /* key */,
|
|
unsigned int /* modifiers */,
|
|
XDevice* /* modifier_device */,
|
|
Window /* grab_window */,
|
|
Bool /* owner_events */,
|
|
unsigned int /* event_count */,
|
|
XEventClass* /* event_list */,
|
|
int /* this_device_mode */,
|
|
int /* other_devices_mode */
|
|
);
|
|
|
|
extern int XUngrabDeviceKey(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
unsigned int /* key */,
|
|
unsigned int /* modifiers */,
|
|
XDevice* /* modifier_dev */,
|
|
Window /* grab_window */
|
|
);
|
|
|
|
extern int XGrabDeviceButton(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
unsigned int /* button */,
|
|
unsigned int /* modifiers */,
|
|
XDevice* /* modifier_device */,
|
|
Window /* grab_window */,
|
|
Bool /* owner_events */,
|
|
unsigned int /* event_count */,
|
|
XEventClass* /* event_list */,
|
|
int /* this_device_mode */,
|
|
int /* other_devices_mode */
|
|
);
|
|
|
|
extern int XUngrabDeviceButton(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
unsigned int /* button */,
|
|
unsigned int /* modifiers */,
|
|
XDevice* /* modifier_dev */,
|
|
Window /* grab_window */
|
|
);
|
|
|
|
extern int XAllowDeviceEvents(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
int /* event_mode */,
|
|
Time /* time */
|
|
);
|
|
|
|
extern int XGetDeviceFocus(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
Window* /* focus */,
|
|
int* /* revert_to */,
|
|
Time* /* time */
|
|
);
|
|
|
|
extern int XSetDeviceFocus(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
Window /* focus */,
|
|
int /* revert_to */,
|
|
Time /* time */
|
|
);
|
|
|
|
extern XFeedbackState *XGetFeedbackControl(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
int* /* num_feedbacks */
|
|
);
|
|
|
|
extern void XFreeFeedbackList(
|
|
XFeedbackState* /* list */
|
|
);
|
|
|
|
extern int XChangeFeedbackControl(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
unsigned long /* mask */,
|
|
XFeedbackControl* /* f */
|
|
);
|
|
|
|
extern int XDeviceBell(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
XID /* feedbackclass */,
|
|
XID /* feedbackid */,
|
|
int /* percent */
|
|
);
|
|
|
|
extern KeySym *XGetDeviceKeyMapping(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
#if NeedWidePrototypes
|
|
unsigned int /* first */,
|
|
#else
|
|
KeyCode /* first */,
|
|
#endif
|
|
int /* keycount */,
|
|
int* /* syms_per_code */
|
|
);
|
|
|
|
extern int XChangeDeviceKeyMapping(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
int /* first */,
|
|
int /* syms_per_code */,
|
|
KeySym* /* keysyms */,
|
|
int /* count */
|
|
);
|
|
|
|
extern XModifierKeymap *XGetDeviceModifierMapping(
|
|
Display* /* display */,
|
|
XDevice* /* device */
|
|
);
|
|
|
|
extern int XSetDeviceModifierMapping(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
XModifierKeymap* /* modmap */
|
|
);
|
|
|
|
extern int XSetDeviceButtonMapping(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
unsigned char* /* map[] */,
|
|
int /* nmap */
|
|
);
|
|
|
|
extern int XGetDeviceButtonMapping(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
unsigned char* /* map[] */,
|
|
unsigned int /* nmap */
|
|
);
|
|
|
|
extern XDeviceState *XQueryDeviceState(
|
|
Display* /* display */,
|
|
XDevice* /* device */
|
|
);
|
|
|
|
extern void XFreeDeviceState(
|
|
XDeviceState* /* list */
|
|
);
|
|
|
|
extern XExtensionVersion *XGetExtensionVersion(
|
|
Display* /* display */,
|
|
_Xconst char* /* name */
|
|
);
|
|
|
|
extern XDeviceInfo *XListInputDevices(
|
|
Display* /* display */,
|
|
int* /* ndevices */
|
|
);
|
|
|
|
extern void XFreeDeviceList(
|
|
XDeviceInfo* /* list */
|
|
);
|
|
|
|
extern XDevice *XOpenDevice(
|
|
Display* /* display */,
|
|
XID /* id */
|
|
);
|
|
|
|
extern int XCloseDevice(
|
|
Display* /* display */,
|
|
XDevice* /* device */
|
|
);
|
|
|
|
extern int XSetDeviceMode(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
int /* mode */
|
|
);
|
|
|
|
extern int XSetDeviceValuators(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
int* /* valuators */,
|
|
int /* first_valuator */,
|
|
int /* num_valuators */
|
|
);
|
|
|
|
extern XDeviceControl *XGetDeviceControl(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
int /* control */
|
|
);
|
|
|
|
extern int XChangeDeviceControl(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
int /* control */,
|
|
XDeviceControl* /* d */
|
|
);
|
|
|
|
extern int XSelectExtensionEvent(
|
|
Display* /* display */,
|
|
Window /* w */,
|
|
XEventClass* /* event_list */,
|
|
int /* count */
|
|
);
|
|
|
|
extern int XGetSelectedExtensionEvents(
|
|
Display* /* display */,
|
|
Window /* w */,
|
|
int* /* this_client_count */,
|
|
XEventClass** /* this_client_list */,
|
|
int* /* all_clients_count */,
|
|
XEventClass** /* all_clients_list */
|
|
);
|
|
|
|
extern int XChangeDeviceDontPropagateList(
|
|
Display* /* display */,
|
|
Window /* window */,
|
|
int /* count */,
|
|
XEventClass* /* events */,
|
|
int /* mode */
|
|
);
|
|
|
|
extern XEventClass *XGetDeviceDontPropagateList(
|
|
Display* /* display */,
|
|
Window /* window */,
|
|
int* /* count */
|
|
);
|
|
|
|
extern Status XSendExtensionEvent(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
Window /* dest */,
|
|
Bool /* prop */,
|
|
int /* count */,
|
|
XEventClass* /* list */,
|
|
XEvent* /* event */
|
|
);
|
|
|
|
extern XDeviceTimeCoord *XGetDeviceMotionEvents(
|
|
Display* /* display */,
|
|
XDevice* /* device */,
|
|
Time /* start */,
|
|
Time /* stop */,
|
|
int* /* nEvents */,
|
|
int* /* mode */,
|
|
int* /* axis_count */
|
|
);
|
|
|
|
extern void XFreeDeviceMotionEvents(
|
|
XDeviceTimeCoord* /* events */
|
|
);
|
|
|
|
extern void XFreeDeviceControl(
|
|
XDeviceControl* /* control */
|
|
);
|
|
|
|
extern Atom* XListDeviceProperties(
|
|
Display* /* dpy */,
|
|
XDevice* /* dev */,
|
|
int* /* nprops_return */
|
|
);
|
|
|
|
extern void XChangeDeviceProperty(
|
|
Display* /* dpy */,
|
|
XDevice* /* dev */,
|
|
Atom /* property */,
|
|
Atom /* type */,
|
|
int /* format */,
|
|
int /* mode */,
|
|
_Xconst unsigned char * /*data */,
|
|
int /* nelements */
|
|
);
|
|
|
|
extern void
|
|
XDeleteDeviceProperty(
|
|
Display* /* dpy */,
|
|
XDevice* /* dev */,
|
|
Atom /* property */
|
|
);
|
|
|
|
extern Status
|
|
XGetDeviceProperty(
|
|
Display* /* dpy*/,
|
|
XDevice* /* dev*/,
|
|
Atom /* property*/,
|
|
long /* offset*/,
|
|
long /* length*/,
|
|
Bool /* delete*/,
|
|
Atom /* req_type*/,
|
|
Atom* /* actual_type*/,
|
|
int* /* actual_format*/,
|
|
unsigned long* /* nitems*/,
|
|
unsigned long* /* bytes_after*/,
|
|
unsigned char** /* prop*/
|
|
);
|
|
|
|
_XFUNCPROTOEND
|
|
|
|
#endif /* _XINPUT_H_ */
|