exevents.h revision 6747b715
105b261ecSmrg/************************************************************
205b261ecSmrg
305b261ecSmrgCopyright 1996 by Thomas E. Dickey <dickey@clark.net>
405b261ecSmrg
505b261ecSmrg                        All Rights Reserved
605b261ecSmrg
705b261ecSmrgPermission to use, copy, modify, and distribute this software and its
805b261ecSmrgdocumentation for any purpose and without fee is hereby granted,
905b261ecSmrgprovided that the above copyright notice appear in all copies and that
1005b261ecSmrgboth that copyright notice and this permission notice appear in
1105b261ecSmrgsupporting documentation, and that the name of the above listed
1205b261ecSmrgcopyright holder(s) not be used in advertising or publicity pertaining
1305b261ecSmrgto distribution of the software without specific, written prior
1405b261ecSmrgpermission.
1505b261ecSmrg
1605b261ecSmrgTHE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD
1705b261ecSmrgTO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
1805b261ecSmrgAND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE
1905b261ecSmrgLIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
2005b261ecSmrgWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
2105b261ecSmrgACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
2205b261ecSmrgOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
2305b261ecSmrg
2405b261ecSmrg********************************************************/
2505b261ecSmrg
2605b261ecSmrg/********************************************************************
2705b261ecSmrg * Interface of 'exevents.c'
2805b261ecSmrg */
2905b261ecSmrg
3005b261ecSmrg#ifndef EXEVENTS_H
3105b261ecSmrg#define EXEVENTS_H
3205b261ecSmrg
3305b261ecSmrg#include <X11/extensions/XIproto.h>
346747b715Smrg#include "inputstr.h"
356747b715Smrg
366747b715Smrg/***************************************************************
376747b715Smrg *              Interface available to drivers                 *
386747b715Smrg ***************************************************************/
396747b715Smrg
406747b715Smrgextern _X_EXPORT int InitProximityClassDeviceStruct(
416747b715Smrg	DeviceIntPtr           /* dev */);
426747b715Smrg
436747b715Smrgextern _X_EXPORT void InitValuatorAxisStruct(
446747b715Smrg	DeviceIntPtr           /* dev */,
456747b715Smrg	int                    /* axnum */,
466747b715Smrg	Atom                   /* label */,
476747b715Smrg	int                    /* minval */,
486747b715Smrg	int                    /* maxval */,
496747b715Smrg	int                    /* resolution */,
506747b715Smrg	int                    /* min_res */,
516747b715Smrg	int                    /* max_res */);
526747b715Smrg
536747b715Smrg/* Input device properties */
546747b715Smrgextern _X_EXPORT void XIDeleteAllDeviceProperties(
556747b715Smrg        DeviceIntPtr            /* device */
566747b715Smrg);
576747b715Smrg
586747b715Smrgextern _X_EXPORT int XIDeleteDeviceProperty(
596747b715Smrg        DeviceIntPtr            /* device */,
606747b715Smrg        Atom                    /* property */,
616747b715Smrg        Bool                    /* fromClient */
626747b715Smrg);
636747b715Smrg
646747b715Smrgextern _X_EXPORT int XIChangeDeviceProperty(
656747b715Smrg        DeviceIntPtr            /* dev */,
666747b715Smrg        Atom                    /* property */,
676747b715Smrg        Atom                    /* type */,
686747b715Smrg        int                     /* format*/,
696747b715Smrg        int                     /* mode*/,
706747b715Smrg        unsigned long           /* len*/,
716747b715Smrg        pointer                 /* value*/,
726747b715Smrg        Bool                    /* sendevent*/
736747b715Smrg        );
746747b715Smrg
756747b715Smrgextern _X_EXPORT int XIGetDeviceProperty(
766747b715Smrg        DeviceIntPtr            /* dev */,
776747b715Smrg        Atom                    /* property */,
786747b715Smrg        XIPropertyValuePtr*     /* value */
796747b715Smrg);
806747b715Smrg
816747b715Smrgextern _X_EXPORT int XISetDevicePropertyDeletable(
826747b715Smrg        DeviceIntPtr            /* dev */,
836747b715Smrg        Atom                    /* property */,
846747b715Smrg        Bool                    /* deletable */
856747b715Smrg);
866747b715Smrg
876747b715Smrgextern _X_EXPORT long XIRegisterPropertyHandler(
886747b715Smrg        DeviceIntPtr         dev,
896747b715Smrg        int (*SetProperty) (DeviceIntPtr dev,
906747b715Smrg                            Atom property,
916747b715Smrg                            XIPropertyValuePtr prop,
926747b715Smrg                            BOOL checkonly),
936747b715Smrg        int (*GetProperty) (DeviceIntPtr dev,
946747b715Smrg                            Atom property),
956747b715Smrg        int (*DeleteProperty) (DeviceIntPtr dev,
966747b715Smrg                               Atom property)
976747b715Smrg);
986747b715Smrg
996747b715Smrgextern _X_EXPORT void XIUnregisterPropertyHandler(
1006747b715Smrg        DeviceIntPtr          dev,
1016747b715Smrg        long                  id
1026747b715Smrg);
1036747b715Smrg
1046747b715Smrgextern _X_EXPORT Atom XIGetKnownProperty(
1056747b715Smrg        char*                 name
1066747b715Smrg);
1076747b715Smrg
1086747b715Smrgextern _X_EXPORT DeviceIntPtr XIGetDevice(xEvent *ev);
1096747b715Smrg
1106747b715Smrgextern _X_EXPORT int XIPropToInt(
1116747b715Smrg        XIPropertyValuePtr val,
1126747b715Smrg        int *nelem_return,
1136747b715Smrg        int **buf_return
1146747b715Smrg);
1156747b715Smrg
1166747b715Smrgextern _X_EXPORT int XIPropToFloat(
1176747b715Smrg        XIPropertyValuePtr val,
1186747b715Smrg        int *nelem_return,
1196747b715Smrg        float **buf_return
1206747b715Smrg);
1216747b715Smrg
1226747b715Smrg/****************************************************************************
1236747b715Smrg *                      End of driver interface                             *
1246747b715Smrg ****************************************************************************/
1256747b715Smrg
12605b261ecSmrg
1274642e01fSmrg/**
1284642e01fSmrg * Attached to the devPrivates of each client. Specifies the version number as
1294642e01fSmrg * supported by the client.
1304642e01fSmrg */
1314642e01fSmrgtypedef struct _XIClientRec {
1324642e01fSmrg        int major_version;
1334642e01fSmrg        int minor_version;
1344642e01fSmrg} XIClientRec, *XIClientPtr;
1354642e01fSmrg
1366747b715Smrg
1376747b715Smrgtypedef struct _GrabParameters {
1386747b715Smrg    int                 grabtype;               /* GRABTYPE_CORE, etc. */
1396747b715Smrg    unsigned int        ownerEvents;
1406747b715Smrg    unsigned int        this_device_mode;
1416747b715Smrg    unsigned int        other_devices_mode;
1426747b715Smrg    Window              grabWindow;
1436747b715Smrg    Window              confineTo;
1446747b715Smrg    Cursor              cursor;
1456747b715Smrg    unsigned int        modifiers;
1466747b715Smrg} GrabParameters;
1476747b715Smrg
1486747b715Smrg
1496747b715Smrgextern void
1506747b715SmrgRegisterOtherDevice (
15105b261ecSmrg	DeviceIntPtr           /* device */);
15205b261ecSmrg
1534642e01fSmrgextern int
1544642e01fSmrgUpdateDeviceState (
1554642e01fSmrg	DeviceIntPtr           /* device */,
1566747b715Smrg	DeviceEvent*           /*  xE    */);
1574642e01fSmrg
1586747b715Smrgextern void
1596747b715SmrgProcessOtherEvent (
1606747b715Smrg	InternalEvent*         /* ev */,
1616747b715Smrg	DeviceIntPtr           /* other */);
16205b261ecSmrg
1636747b715Smrgextern void
1646747b715SmrgDeviceFocusEvent(
16505b261ecSmrg	DeviceIntPtr           /* dev */,
16605b261ecSmrg	int                    /* type */,
16705b261ecSmrg	int                    /* mode */,
16805b261ecSmrg	int                    /* detail */,
16905b261ecSmrg	WindowPtr              /* pWin */);
17005b261ecSmrg
1716747b715Smrgextern int
1726747b715SmrgCheckGrabValues(
1736747b715Smrg        ClientPtr              /* client */,
1746747b715Smrg        GrabParameters*        /* param */);
1756747b715Smrg
1766747b715Smrgextern int
1776747b715SmrgGrabButton(
17805b261ecSmrg	ClientPtr              /* client */,
17905b261ecSmrg	DeviceIntPtr           /* dev */,
18005b261ecSmrg	DeviceIntPtr           /* modifier_device */,
1816747b715Smrg	int                    /* button */,
1826747b715Smrg        GrabParameters*        /* param */,
1836747b715Smrg        GrabType               /* grabtype */,
1846747b715Smrg	GrabMask*              /* eventMask */);
1856747b715Smrg
1866747b715Smrgextern int
1876747b715SmrgGrabKey(
18805b261ecSmrg	ClientPtr              /* client */,
18905b261ecSmrg	DeviceIntPtr           /* dev */,
19005b261ecSmrg	DeviceIntPtr           /* modifier_device */,
1916747b715Smrg	int                    /* key */,
1926747b715Smrg        GrabParameters*        /* param */,
1936747b715Smrg        GrabType               /* grabtype */,
1946747b715Smrg	GrabMask*              /* eventMask */);
1956747b715Smrg
1966747b715Smrgextern int
1976747b715SmrgGrabWindow(
1986747b715Smrg	ClientPtr              /* client */,
1996747b715Smrg	DeviceIntPtr           /* dev */,
2006747b715Smrg	int                    /* type */,
2016747b715Smrg	GrabParameters*        /* param */,
2026747b715Smrg	GrabMask*              /* eventMask */);
20305b261ecSmrg
2046747b715Smrgextern int
2056747b715SmrgSelectForWindow(
20605b261ecSmrg	DeviceIntPtr           /* dev */,
20705b261ecSmrg	WindowPtr              /* pWin */,
20805b261ecSmrg	ClientPtr              /* client */,
20905b261ecSmrg	Mask                   /* mask */,
2106747b715Smrg	Mask                   /* exclusivemasks */);
21105b261ecSmrg
2126747b715Smrgextern int
2136747b715SmrgAddExtensionClient (
21405b261ecSmrg	WindowPtr              /* pWin */,
21505b261ecSmrg	ClientPtr              /* client */,
21605b261ecSmrg	Mask                   /* mask */,
21705b261ecSmrg	int                    /* mskidx */);
21805b261ecSmrg
2196747b715Smrgextern void
2206747b715SmrgRecalculateDeviceDeliverableEvents(
22105b261ecSmrg	WindowPtr              /* pWin */);
22205b261ecSmrg
2236747b715Smrgextern int
2246747b715SmrgInputClientGone(
22505b261ecSmrg	WindowPtr              /* pWin */,
22605b261ecSmrg	XID                    /* id */);
22705b261ecSmrg
2286747b715Smrgextern int
2296747b715SmrgSendEvent (
23005b261ecSmrg	ClientPtr              /* client */,
23105b261ecSmrg	DeviceIntPtr           /* d */,
23205b261ecSmrg	Window                 /* dest */,
23305b261ecSmrg	Bool                   /* propagate */,
23405b261ecSmrg	xEvent *               /* ev */,
23505b261ecSmrg	Mask                   /* mask */,
23605b261ecSmrg	int                    /* count */);
23705b261ecSmrg
2386747b715Smrgextern int
2396747b715SmrgSetButtonMapping (
24005b261ecSmrg	ClientPtr              /* client */,
24105b261ecSmrg	DeviceIntPtr           /* dev */,
24205b261ecSmrg	int                    /* nElts */,
24305b261ecSmrg	BYTE *                 /* map */);
24405b261ecSmrg
2456747b715Smrgextern int
2466747b715SmrgChangeKeyMapping(
24705b261ecSmrg	ClientPtr              /* client */,
24805b261ecSmrg	DeviceIntPtr           /* dev */,
24905b261ecSmrg	unsigned               /* len */,
25005b261ecSmrg	int                    /* type */,
25105b261ecSmrg	KeyCode                /* firstKeyCode */,
25205b261ecSmrg	CARD8                  /* keyCodes */,
25305b261ecSmrg	CARD8                  /* keySymsPerKeyCode */,
25405b261ecSmrg	KeySym *               /* map */);
25505b261ecSmrg
2566747b715Smrgextern void
2576747b715SmrgDeleteWindowFromAnyExtEvents(
25805b261ecSmrg	WindowPtr              /* pWin */,
25905b261ecSmrg	Bool                   /* freeResources */);
26005b261ecSmrg
2616747b715Smrgextern int
2626747b715SmrgMaybeSendDeviceMotionNotifyHint (
26305b261ecSmrg	deviceKeyButtonPointer * /* pEvents */,
26405b261ecSmrg	Mask                   /* mask */);
26505b261ecSmrg
2666747b715Smrgextern void
2676747b715SmrgCheckDeviceGrabAndHintWindow (
26805b261ecSmrg	WindowPtr              /* pWin */,
26905b261ecSmrg	int                    /* type */,
27005b261ecSmrg	deviceKeyButtonPointer * /* xE */,
27105b261ecSmrg	GrabPtr                /* grab */,
27205b261ecSmrg	ClientPtr              /* client */,
27305b261ecSmrg	Mask                   /* deliveryMask */);
27405b261ecSmrg
2756747b715Smrgextern void
2766747b715SmrgMaybeStopDeviceHint(
27705b261ecSmrg	DeviceIntPtr           /* dev */,
27805b261ecSmrg	ClientPtr              /* client */);
27905b261ecSmrg
2806747b715Smrgextern int
2816747b715SmrgDeviceEventSuppressForWindow(
28205b261ecSmrg	WindowPtr              /* pWin */,
28305b261ecSmrg	ClientPtr              /* client */,
28405b261ecSmrg	Mask                   /* mask */,
28505b261ecSmrg	int                    /* maskndx */);
28605b261ecSmrg
2876747b715Smrgextern void
2886747b715SmrgSendEventToAllWindows(
28905b261ecSmrg        DeviceIntPtr           /* dev */,
29005b261ecSmrg        Mask                   /* mask */,
29105b261ecSmrg        xEvent *               /* ev */,
29205b261ecSmrg        int                    /* count */);
29305b261ecSmrg
2946747b715Smrgextern _X_HIDDEN void XI2EventSwap(
2956747b715Smrg        xGenericEvent  *              /* from */,
2966747b715Smrg        xGenericEvent  *              /* to */);
2974642e01fSmrg
2986747b715Smrg/* For an event such as MappingNotify which affects client interpretation
2996747b715Smrg * of input events sent by device dev, should we notify the client, or
3006747b715Smrg * would it merely be irrelevant and confusing? */
3016747b715Smrgextern int
3026747b715SmrgXIShouldNotify(ClientPtr client, DeviceIntPtr dev);
3034642e01fSmrg
3046747b715Smrgextern void
3056747b715SmrgXISendDeviceChangedEvent(DeviceIntPtr device, DeviceIntPtr master,
3066747b715Smrg                         DeviceChangedEvent *dce);
3074642e01fSmrg
3086747b715Smrgextern int
3096747b715SmrgXISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
3106747b715Smrg                           unsigned int len, unsigned char* mask);
3114642e01fSmrg
3126747b715Smrgextern int
3136747b715SmrgXICheckInvalidMaskBits(unsigned char *mask, int len);
3144642e01fSmrg
31505b261ecSmrg#endif /* EXEVENTS_H */
316