/* * Copyright © 2009 Red Hat, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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. * */ /* Definitions used by the library and client */ #ifndef _XINPUT2_H_ #define _XINPUT2_H_ #include #include #include /******************************************************************* * */ typedef struct { int type; char* name; Bool send_core; Bool enable; } XIAddMasterInfo; typedef struct { int type; int deviceid; int return_mode; /* AttachToMaster, Floating */ int return_pointer; int return_keyboard; } XIRemoveMasterInfo; typedef struct { int type; int deviceid; int new_master; } XIAttachSlaveInfo; typedef struct { int type; int deviceid; } XIDetachSlaveInfo; typedef union { int type; /* must be first element */ XIAddMasterInfo add; XIRemoveMasterInfo remove; XIAttachSlaveInfo attach; XIDetachSlaveInfo detach; } XIAnyHierarchyChangeInfo; typedef struct { int base; int latched; int locked; int effective; } XIModifierState; typedef XIModifierState XIGroupState; typedef struct { int mask_len; unsigned char *mask; } XIButtonState; typedef struct { int mask_len; unsigned char *mask; double *values; } XIValuatorState; typedef struct { int deviceid; int mask_len; unsigned char* mask; } XIEventMask; typedef struct { int type; int sourceid; } XIAnyClassInfo; typedef struct { int type; int sourceid; int num_buttons; Atom *labels; XIButtonState state; } XIButtonClassInfo; typedef struct { int type; int sourceid; int num_keycodes; int *keycodes; } XIKeyClassInfo; typedef struct { int type; int sourceid; int number; Atom label; double min; double max; double value; int resolution; int mode; } XIValuatorClassInfo; typedef struct { int deviceid; char *name; int use; int attachment; Bool enabled; int num_classes; XIAnyClassInfo **classes; } XIDeviceInfo; typedef struct { int modifiers; int status; } XIGrabModifiers; /** * Generic XI2 event. All XI2 events have the same header. */ typedef struct { int type; /* GenericEvent */ 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 */ int extension; /* XI extension offset */ int evtype; Time time; } XIEvent; typedef struct { int deviceid; int attachment; int use; Bool enabled; int flags; } XIHierarchyInfo; /* * Notifies the client that the device hierarchy has been changed. The client * is expected to re-query the server for the device hierarchy. */ typedef struct { int type; /* GenericEvent */ 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 */ int extension; /* XI extension offset */ int evtype; /* XI_HierarchyChanged */ Time time; int flags; int num_info; XIHierarchyInfo *info; } XIHierarchyEvent; /* * Notifies the client that the classes have been changed. This happens when * the slave device that sends through the master changes. */ typedef struct { int type; /* GenericEvent */ 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 */ int extension; /* XI extension offset */ int evtype; /* XI_DeviceChanged */ Time time; int deviceid; /* id of the device that changed */ int sourceid; /* Source for the new classes. */ int reason; /* Reason for the change */ int num_classes; XIAnyClassInfo **classes; /* same as in XIDeviceInfo */ } XIDeviceChangedEvent; typedef struct { int type; /* GenericEvent */ 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 */ int extension; /* XI extension offset */ int evtype; Time time; int deviceid; int sourceid; int detail; Window root; Window event; Window child; double root_x; double root_y; double event_x; double event_y; int flags; XIButtonState buttons; XIValuatorState valuators; XIModifierState mods; XIGroupState group; } XIDeviceEvent; typedef struct { int type; /* GenericEvent */ 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 */ int extension; /* XI extension offset */ int evtype; /* XI_RawKeyPress, XI_RawKeyRelease, etc. */ Time time; int deviceid; int sourceid; /* Bug: Always 0. https://bugs.freedesktop.org//show_bug.cgi?id=34240 */ int detail; int flags; XIValuatorState valuators; double *raw_values; } XIRawEvent; typedef struct { int type; /* GenericEvent */ 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 */ int extension; /* XI extension offset */ int evtype; Time time; int deviceid; int sourceid; int detail; Window root; Window event; Window child; double root_x; double root_y; double event_x; double event_y; int mode; Bool focus; Bool same_screen; XIButtonState buttons; XIModifierState mods; XIGroupState group; } XIEnterEvent; typedef XIEnterEvent XILeaveEvent; typedef XIEnterEvent XIFocusInEvent; typedef XIEnterEvent XIFocusOutEvent; typedef struct { int type; /* GenericEvent */ 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 */ int extension; /* XI extension offset */ int evtype; /* XI_PropertyEvent */ Time time; int deviceid; /* id of the device that changed */ Atom property; int what; } XIPropertyEvent; _XFUNCPROTOBEGIN extern Bool XIQueryPointer( Display* display, int deviceid, Window win, Window* root, Window* child, double* root_x, double* root_y, double* win_x, double* win_y, XIButtonState *buttons, XIModifierState *mods, XIGroupState *group ); extern Bool XIWarpPointer( Display* display, int deviceid, Window src_win, Window dst_win, double src_x, double src_y, unsigned int src_width, unsigned int src_height, double dst_x, double dst_y ); extern Status XIDefineCursor( Display* display, int deviceid, Window win, Cursor cursor ); extern Status XIUndefineCursor( Display* display, int deviceid, Window win ); extern Status XIChangeHierarchy( Display* display, XIAnyHierarchyChangeInfo* changes, int num_changes ); extern Status XISetClientPointer( Display* dpy, Window win, int deviceid ); extern Bool XIGetClientPointer( Display* dpy, Window win, int* deviceid ); extern int XISelectEvents( Display* dpy, Window win, XIEventMask *masks, int num_masks ); extern XIEventMask *XIGetSelectedEvents( Display* dpy, Window win, int *num_masks_return ); extern Status XIQueryVersion( Display* dpy, int* major_version_inout, int* minor_version_inout ); extern XIDeviceInfo* XIQueryDevice( Display* dpy, int deviceid, int* ndevices_return ); extern Status XISetFocus( Display* dpy, int deviceid, Window focus, Time time ); extern Status XIGetFocus( Display* dpy, int deviceid, Window *focus_return); extern Status XIGrabDevice( Display* dpy, int deviceid, Window grab_window, Time time, Cursor cursor, int grab_mode, int paired_device_mode, Bool owner_events, XIEventMask *mask ); extern Status XIUngrabDevice( Display* dpy, int deviceid, Time time ); extern Status XIAllowEvents( Display* display, int deviceid, int event_mode, Time time ); extern int XIGrabButton( Display* display, int deviceid, int button, Window grab_window, Cursor cursor, int grab_mode, int paired_device_mode, int owner_events, XIEventMask *mask, int num_modifiers, XIGrabModifiers *modifiers_inout ); extern int XIGrabKeycode( Display* display, int deviceid, int keycode, Window grab_window, int grab_mode, int paired_device_mode, int owner_events, XIEventMask *mask, int num_modifiers, XIGrabModifiers *modifiers_inout ); extern int XIGrabEnter( Display* display, int deviceid, Window grab_window, Cursor cursor, int grab_mode, int paired_device_mode, int owner_events, XIEventMask *mask, int num_modifiers, XIGrabModifiers *modifiers_inout ); extern int XIGrabFocusIn( Display* display, int deviceid, Window grab_window, int grab_mode, int paired_device_mode, int owner_events, XIEventMask *mask, int num_modifiers, XIGrabModifiers *modifiers_inout ); extern Status XIUngrabButton( Display* display, int deviceid, int button, Window grab_window, int num_modifiers, XIGrabModifiers *modifiers ); extern Status XIUngrabKeycode( Display* display, int deviceid, int keycode, Window grab_window, int num_modifiers, XIGrabModifiers *modifiers ); extern Status XIUngrabEnter( Display* display, int deviceid, Window grab_window, int num_modifiers, XIGrabModifiers *modifiers ); extern Status XIUngrabFocusIn( Display* display, int deviceid, Window grab_window, int num_modifiers, XIGrabModifiers *modifiers ); extern Atom *XIListProperties( Display* display, int deviceid, int *num_props_return ); extern void XIChangeProperty( Display* display, int deviceid, Atom property, Atom type, int format, int mode, unsigned char *data, int num_items ); extern void XIDeleteProperty( Display* display, int deviceid, Atom property ); extern Status XIGetProperty( Display* display, int deviceid, Atom property, long offset, long length, Bool delete_property, Atom type, Atom *type_return, int *format_return, unsigned long *num_items_return, unsigned long *bytes_after_return, unsigned char **data ); extern void XIFreeDeviceInfo(XIDeviceInfo *info); _XFUNCPROTOEND #endif /* XINPUT2_H */