1*4882a593Smuzhiyun /************************************************************ 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun Copyright 1996 by Thomas E. Dickey <dickey@clark.net> 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun All Rights Reserved 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun Permission to use, copy, modify, and distribute this software and its 8*4882a593Smuzhiyun documentation for any purpose and without fee is hereby granted, 9*4882a593Smuzhiyun provided that the above copyright notice appear in all copies and that 10*4882a593Smuzhiyun both that copyright notice and this permission notice appear in 11*4882a593Smuzhiyun supporting documentation, and that the name of the above listed 12*4882a593Smuzhiyun copyright holder(s) not be used in advertising or publicity pertaining 13*4882a593Smuzhiyun to distribution of the software without specific, written prior 14*4882a593Smuzhiyun permission. 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD 17*4882a593Smuzhiyun TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 18*4882a593Smuzhiyun AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE 19*4882a593Smuzhiyun LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 20*4882a593Smuzhiyun WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 21*4882a593Smuzhiyun ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 22*4882a593Smuzhiyun OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun ********************************************************/ 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun /******************************************************************** 27*4882a593Smuzhiyun * Interface of 'exevents.c' 28*4882a593Smuzhiyun */ 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun #ifndef EXEVENTS_H 31*4882a593Smuzhiyun #define EXEVENTS_H 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun #include <X11/extensions/XIproto.h> 34*4882a593Smuzhiyun #include "inputstr.h" 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun /*************************************************************** 37*4882a593Smuzhiyun * Interface available to drivers * 38*4882a593Smuzhiyun ***************************************************************/ 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /** 41*4882a593Smuzhiyun * Scroll flags for ::SetScrollValuator. 42*4882a593Smuzhiyun */ 43*4882a593Smuzhiyun enum ScrollFlags { 44*4882a593Smuzhiyun SCROLL_FLAG_NONE = 0, 45*4882a593Smuzhiyun /** 46*4882a593Smuzhiyun * Do not emulate legacy button events for valuator events on this axis. 47*4882a593Smuzhiyun */ 48*4882a593Smuzhiyun SCROLL_FLAG_DONT_EMULATE = (1 << 1), 49*4882a593Smuzhiyun /** 50*4882a593Smuzhiyun * This axis is the preferred axis for valuator emulation for this axis' 51*4882a593Smuzhiyun * scroll type. 52*4882a593Smuzhiyun */ 53*4882a593Smuzhiyun SCROLL_FLAG_PREFERRED = (1 << 2) 54*4882a593Smuzhiyun }; 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun extern _X_EXPORT int InitProximityClassDeviceStruct(DeviceIntPtr /* dev */ ); 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun extern _X_EXPORT Bool InitValuatorAxisStruct(DeviceIntPtr /* dev */ , 59*4882a593Smuzhiyun int /* axnum */ , 60*4882a593Smuzhiyun Atom /* label */ , 61*4882a593Smuzhiyun int /* minval */ , 62*4882a593Smuzhiyun int /* maxval */ , 63*4882a593Smuzhiyun int /* resolution */ , 64*4882a593Smuzhiyun int /* min_res */ , 65*4882a593Smuzhiyun int /* max_res */ , 66*4882a593Smuzhiyun int /* mode */ ); 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun extern _X_EXPORT Bool SetScrollValuator(DeviceIntPtr /* dev */ , 69*4882a593Smuzhiyun int /* axnum */ , 70*4882a593Smuzhiyun enum ScrollType /* type */ , 71*4882a593Smuzhiyun double /* increment */ , 72*4882a593Smuzhiyun int /* flags */ ); 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun /* Input device properties */ 75*4882a593Smuzhiyun extern _X_EXPORT void XIDeleteAllDeviceProperties(DeviceIntPtr /* device */ 76*4882a593Smuzhiyun ); 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun extern _X_EXPORT int XIDeleteDeviceProperty(DeviceIntPtr /* device */ , 79*4882a593Smuzhiyun Atom /* property */ , 80*4882a593Smuzhiyun Bool /* fromClient */ 81*4882a593Smuzhiyun ); 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun extern _X_EXPORT int XIChangeDeviceProperty(DeviceIntPtr /* dev */ , 84*4882a593Smuzhiyun Atom /* property */ , 85*4882a593Smuzhiyun Atom /* type */ , 86*4882a593Smuzhiyun int /* format */ , 87*4882a593Smuzhiyun int /* mode */ , 88*4882a593Smuzhiyun unsigned long /* len */ , 89*4882a593Smuzhiyun const void * /* value */ , 90*4882a593Smuzhiyun Bool /* sendevent */ 91*4882a593Smuzhiyun ); 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun extern _X_EXPORT int XIGetDeviceProperty(DeviceIntPtr /* dev */ , 94*4882a593Smuzhiyun Atom /* property */ , 95*4882a593Smuzhiyun XIPropertyValuePtr * /* value */ 96*4882a593Smuzhiyun ); 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun extern _X_EXPORT int XISetDevicePropertyDeletable(DeviceIntPtr /* dev */ , 99*4882a593Smuzhiyun Atom /* property */ , 100*4882a593Smuzhiyun Bool /* deletable */ 101*4882a593Smuzhiyun ); 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun extern _X_EXPORT long XIRegisterPropertyHandler(DeviceIntPtr dev, 104*4882a593Smuzhiyun int (*SetProperty) (DeviceIntPtr 105*4882a593Smuzhiyun dev, 106*4882a593Smuzhiyun Atom 107*4882a593Smuzhiyun property, 108*4882a593Smuzhiyun XIPropertyValuePtr 109*4882a593Smuzhiyun prop, 110*4882a593Smuzhiyun BOOL 111*4882a593Smuzhiyun checkonly), 112*4882a593Smuzhiyun int (*GetProperty) (DeviceIntPtr 113*4882a593Smuzhiyun dev, 114*4882a593Smuzhiyun Atom 115*4882a593Smuzhiyun property), 116*4882a593Smuzhiyun int (*DeleteProperty) 117*4882a593Smuzhiyun (DeviceIntPtr dev, 118*4882a593Smuzhiyun Atom property) 119*4882a593Smuzhiyun ); 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun extern _X_EXPORT void XIUnregisterPropertyHandler(DeviceIntPtr dev, long id); 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun extern _X_EXPORT Atom XIGetKnownProperty(const char *name); 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun extern _X_EXPORT DeviceIntPtr XIGetDevice(xEvent *ev); 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun extern _X_EXPORT int XIPropToInt(XIPropertyValuePtr val, 128*4882a593Smuzhiyun int *nelem_return, int **buf_return); 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun extern _X_EXPORT int XIPropToFloat(XIPropertyValuePtr val, 131*4882a593Smuzhiyun int *nelem_return, float **buf_return); 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun /**************************************************************************** 134*4882a593Smuzhiyun * End of driver interface * 135*4882a593Smuzhiyun ****************************************************************************/ 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun /** 138*4882a593Smuzhiyun * Attached to the devPrivates of each client. Specifies the version number as 139*4882a593Smuzhiyun * supported by the client. 140*4882a593Smuzhiyun */ 141*4882a593Smuzhiyun typedef struct _XIClientRec { 142*4882a593Smuzhiyun int major_version; 143*4882a593Smuzhiyun int minor_version; 144*4882a593Smuzhiyun } XIClientRec, *XIClientPtr; 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun typedef struct _GrabParameters { 147*4882a593Smuzhiyun int grabtype; /* CORE, etc. */ 148*4882a593Smuzhiyun unsigned int ownerEvents; 149*4882a593Smuzhiyun unsigned int this_device_mode; 150*4882a593Smuzhiyun unsigned int other_devices_mode; 151*4882a593Smuzhiyun Window grabWindow; 152*4882a593Smuzhiyun Window confineTo; 153*4882a593Smuzhiyun Cursor cursor; 154*4882a593Smuzhiyun unsigned int modifiers; 155*4882a593Smuzhiyun } GrabParameters; 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun extern int 158*4882a593Smuzhiyun UpdateDeviceState(DeviceIntPtr /* device */ , 159*4882a593Smuzhiyun DeviceEvent * /* xE */ ); 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun extern void 162*4882a593Smuzhiyun ProcessOtherEvent(InternalEvent * /* ev */ , 163*4882a593Smuzhiyun DeviceIntPtr /* other */ ); 164*4882a593Smuzhiyun 165*4882a593Smuzhiyun extern int 166*4882a593Smuzhiyun CheckGrabValues(ClientPtr /* client */ , 167*4882a593Smuzhiyun GrabParameters * /* param */ ); 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun extern int 170*4882a593Smuzhiyun GrabButton(ClientPtr /* client */ , 171*4882a593Smuzhiyun DeviceIntPtr /* dev */ , 172*4882a593Smuzhiyun DeviceIntPtr /* modifier_device */ , 173*4882a593Smuzhiyun int /* button */ , 174*4882a593Smuzhiyun GrabParameters * /* param */ , 175*4882a593Smuzhiyun enum InputLevel /* grabtype */ , 176*4882a593Smuzhiyun GrabMask * /* eventMask */ ); 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun extern int 179*4882a593Smuzhiyun GrabKey(ClientPtr /* client */ , 180*4882a593Smuzhiyun DeviceIntPtr /* dev */ , 181*4882a593Smuzhiyun DeviceIntPtr /* modifier_device */ , 182*4882a593Smuzhiyun int /* key */ , 183*4882a593Smuzhiyun GrabParameters * /* param */ , 184*4882a593Smuzhiyun enum InputLevel /* grabtype */ , 185*4882a593Smuzhiyun GrabMask * /* eventMask */ ); 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun extern int 188*4882a593Smuzhiyun GrabWindow(ClientPtr /* client */ , 189*4882a593Smuzhiyun DeviceIntPtr /* dev */ , 190*4882a593Smuzhiyun int /* type */ , 191*4882a593Smuzhiyun GrabParameters * /* param */ , 192*4882a593Smuzhiyun GrabMask * /* eventMask */ ); 193*4882a593Smuzhiyun 194*4882a593Smuzhiyun extern int 195*4882a593Smuzhiyun GrabTouch(ClientPtr /* client */ , 196*4882a593Smuzhiyun DeviceIntPtr /* dev */ , 197*4882a593Smuzhiyun DeviceIntPtr /* mod_dev */ , 198*4882a593Smuzhiyun GrabParameters * /* param */ , 199*4882a593Smuzhiyun GrabMask * /* eventMask */ ); 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun extern int 202*4882a593Smuzhiyun SelectForWindow(DeviceIntPtr /* dev */ , 203*4882a593Smuzhiyun WindowPtr /* pWin */ , 204*4882a593Smuzhiyun ClientPtr /* client */ , 205*4882a593Smuzhiyun Mask /* mask */ , 206*4882a593Smuzhiyun Mask /* exclusivemasks */ ); 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun extern int 209*4882a593Smuzhiyun AddExtensionClient(WindowPtr /* pWin */ , 210*4882a593Smuzhiyun ClientPtr /* client */ , 211*4882a593Smuzhiyun Mask /* mask */ , 212*4882a593Smuzhiyun int /* mskidx */ ); 213*4882a593Smuzhiyun 214*4882a593Smuzhiyun extern void 215*4882a593Smuzhiyun RecalculateDeviceDeliverableEvents(WindowPtr /* pWin */ ); 216*4882a593Smuzhiyun 217*4882a593Smuzhiyun extern int 218*4882a593Smuzhiyun InputClientGone(WindowPtr /* pWin */ , 219*4882a593Smuzhiyun XID /* id */ ); 220*4882a593Smuzhiyun 221*4882a593Smuzhiyun extern void 222*4882a593Smuzhiyun WindowGone(WindowPtr /* win */ ); 223*4882a593Smuzhiyun 224*4882a593Smuzhiyun extern int 225*4882a593Smuzhiyun SendEvent(ClientPtr /* client */ , 226*4882a593Smuzhiyun DeviceIntPtr /* d */ , 227*4882a593Smuzhiyun Window /* dest */ , 228*4882a593Smuzhiyun Bool /* propagate */ , 229*4882a593Smuzhiyun xEvent * /* ev */ , 230*4882a593Smuzhiyun Mask /* mask */ , 231*4882a593Smuzhiyun int /* count */ ); 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun extern int 234*4882a593Smuzhiyun SetButtonMapping(ClientPtr /* client */ , 235*4882a593Smuzhiyun DeviceIntPtr /* dev */ , 236*4882a593Smuzhiyun int /* nElts */ , 237*4882a593Smuzhiyun BYTE * /* map */ ); 238*4882a593Smuzhiyun 239*4882a593Smuzhiyun extern int 240*4882a593Smuzhiyun ChangeKeyMapping(ClientPtr /* client */ , 241*4882a593Smuzhiyun DeviceIntPtr /* dev */ , 242*4882a593Smuzhiyun unsigned /* len */ , 243*4882a593Smuzhiyun int /* type */ , 244*4882a593Smuzhiyun KeyCode /* firstKeyCode */ , 245*4882a593Smuzhiyun CARD8 /* keyCodes */ , 246*4882a593Smuzhiyun CARD8 /* keySymsPerKeyCode */ , 247*4882a593Smuzhiyun KeySym * /* map */ ); 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun extern void 250*4882a593Smuzhiyun DeleteWindowFromAnyExtEvents(WindowPtr /* pWin */ , 251*4882a593Smuzhiyun Bool /* freeResources */ ); 252*4882a593Smuzhiyun 253*4882a593Smuzhiyun extern int 254*4882a593Smuzhiyun MaybeSendDeviceMotionNotifyHint(deviceKeyButtonPointer * /* pEvents */ , 255*4882a593Smuzhiyun Mask /* mask */ ); 256*4882a593Smuzhiyun 257*4882a593Smuzhiyun extern void 258*4882a593Smuzhiyun CheckDeviceGrabAndHintWindow(WindowPtr /* pWin */ , 259*4882a593Smuzhiyun int /* type */ , 260*4882a593Smuzhiyun deviceKeyButtonPointer * /* xE */ , 261*4882a593Smuzhiyun GrabPtr /* grab */ , 262*4882a593Smuzhiyun ClientPtr /* client */ , 263*4882a593Smuzhiyun Mask /* deliveryMask */ ); 264*4882a593Smuzhiyun 265*4882a593Smuzhiyun extern void 266*4882a593Smuzhiyun MaybeStopDeviceHint(DeviceIntPtr /* dev */ , 267*4882a593Smuzhiyun ClientPtr /* client */ ); 268*4882a593Smuzhiyun 269*4882a593Smuzhiyun extern int 270*4882a593Smuzhiyun DeviceEventSuppressForWindow(WindowPtr /* pWin */ , 271*4882a593Smuzhiyun ClientPtr /* client */ , 272*4882a593Smuzhiyun Mask /* mask */ , 273*4882a593Smuzhiyun int /* maskndx */ ); 274*4882a593Smuzhiyun 275*4882a593Smuzhiyun extern void 276*4882a593Smuzhiyun SendEventToAllWindows(DeviceIntPtr /* dev */ , 277*4882a593Smuzhiyun Mask /* mask */ , 278*4882a593Smuzhiyun xEvent * /* ev */ , 279*4882a593Smuzhiyun int /* count */ ); 280*4882a593Smuzhiyun 281*4882a593Smuzhiyun extern void 282*4882a593Smuzhiyun TouchRejected(DeviceIntPtr /* sourcedev */ , 283*4882a593Smuzhiyun TouchPointInfoPtr /* ti */ , 284*4882a593Smuzhiyun XID /* resource */ , 285*4882a593Smuzhiyun TouchOwnershipEvent * /* ev */ ); 286*4882a593Smuzhiyun 287*4882a593Smuzhiyun extern _X_HIDDEN void XI2EventSwap(xGenericEvent * /* from */ , 288*4882a593Smuzhiyun xGenericEvent * /* to */ ); 289*4882a593Smuzhiyun 290*4882a593Smuzhiyun /* For an event such as MappingNotify which affects client interpretation 291*4882a593Smuzhiyun * of input events sent by device dev, should we notify the client, or 292*4882a593Smuzhiyun * would it merely be irrelevant and confusing? */ 293*4882a593Smuzhiyun extern int 294*4882a593Smuzhiyun XIShouldNotify(ClientPtr client, DeviceIntPtr dev); 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun extern void 297*4882a593Smuzhiyun XISendDeviceChangedEvent(DeviceIntPtr device, DeviceChangedEvent *dce); 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun extern int 300*4882a593Smuzhiyun 301*4882a593Smuzhiyun XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client, 302*4882a593Smuzhiyun unsigned int len, unsigned char *mask); 303*4882a593Smuzhiyun 304*4882a593Smuzhiyun extern int 305*4882a593Smuzhiyun XICheckInvalidMaskBits(ClientPtr client, unsigned char *mask, int len); 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun #endif /* EXEVENTS_H */ 308