exevents.h revision 35c4bbdf
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
4035c4bbdfSmrg/**
4135c4bbdfSmrg * Scroll flags for ::SetScrollValuator.
4235c4bbdfSmrg */
4335c4bbdfSmrgenum ScrollFlags {
4435c4bbdfSmrg    SCROLL_FLAG_NONE = 0,
4535c4bbdfSmrg    /**
4635c4bbdfSmrg     * Do not emulate legacy button events for valuator events on this axis.
4735c4bbdfSmrg     */
4835c4bbdfSmrg    SCROLL_FLAG_DONT_EMULATE = (1 << 1),
4935c4bbdfSmrg    /**
5035c4bbdfSmrg     * This axis is the preferred axis for valuator emulation for this axis'
5135c4bbdfSmrg     * scroll type.
5235c4bbdfSmrg     */
5335c4bbdfSmrg    SCROLL_FLAG_PREFERRED = (1 << 2)
5435c4bbdfSmrg};
5535c4bbdfSmrg
5635c4bbdfSmrgextern _X_EXPORT int InitProximityClassDeviceStruct(DeviceIntPtr /* dev */ );
5735c4bbdfSmrg
5835c4bbdfSmrgextern _X_EXPORT Bool InitValuatorAxisStruct(DeviceIntPtr /* dev */ ,
5935c4bbdfSmrg                                             int /* axnum */ ,
6035c4bbdfSmrg                                             Atom /* label */ ,
6135c4bbdfSmrg                                             int /* minval */ ,
6235c4bbdfSmrg                                             int /* maxval */ ,
6335c4bbdfSmrg                                             int /* resolution */ ,
6435c4bbdfSmrg                                             int /* min_res */ ,
6535c4bbdfSmrg                                             int /* max_res */ ,
6635c4bbdfSmrg                                             int /* mode */ );
6735c4bbdfSmrg
6835c4bbdfSmrgextern _X_EXPORT Bool SetScrollValuator(DeviceIntPtr /* dev */ ,
6935c4bbdfSmrg                                        int /* axnum */ ,
7035c4bbdfSmrg                                        enum ScrollType /* type */ ,
7135c4bbdfSmrg                                        double /* increment */ ,
7235c4bbdfSmrg                                        int /* flags */ );
736747b715Smrg
746747b715Smrg/* Input device properties */
7535c4bbdfSmrgextern _X_EXPORT void XIDeleteAllDeviceProperties(DeviceIntPtr  /* device */
7635c4bbdfSmrg    );
7735c4bbdfSmrg
7835c4bbdfSmrgextern _X_EXPORT int XIDeleteDeviceProperty(DeviceIntPtr /* device */ ,
7935c4bbdfSmrg                                            Atom /* property */ ,
8035c4bbdfSmrg                                            Bool        /* fromClient */
8135c4bbdfSmrg    );
8235c4bbdfSmrg
8335c4bbdfSmrgextern _X_EXPORT int XIChangeDeviceProperty(DeviceIntPtr /* dev */ ,
8435c4bbdfSmrg                                            Atom /* property */ ,
8535c4bbdfSmrg                                            Atom /* type */ ,
8635c4bbdfSmrg                                            int /* format */ ,
8735c4bbdfSmrg                                            int /* mode */ ,
8835c4bbdfSmrg                                            unsigned long /* len */ ,
8935c4bbdfSmrg                                            const void * /* value */ ,
9035c4bbdfSmrg                                            Bool        /* sendevent */
9135c4bbdfSmrg    );
9235c4bbdfSmrg
9335c4bbdfSmrgextern _X_EXPORT int XIGetDeviceProperty(DeviceIntPtr /* dev */ ,
9435c4bbdfSmrg                                         Atom /* property */ ,
9535c4bbdfSmrg                                         XIPropertyValuePtr *   /* value */
9635c4bbdfSmrg    );
9735c4bbdfSmrg
9835c4bbdfSmrgextern _X_EXPORT int XISetDevicePropertyDeletable(DeviceIntPtr /* dev */ ,
9935c4bbdfSmrg                                                  Atom /* property */ ,
10035c4bbdfSmrg                                                  Bool  /* deletable */
10135c4bbdfSmrg    );
10235c4bbdfSmrg
10335c4bbdfSmrgextern _X_EXPORT long XIRegisterPropertyHandler(DeviceIntPtr dev,
10435c4bbdfSmrg                                                int (*SetProperty) (DeviceIntPtr
10535c4bbdfSmrg                                                                    dev,
10635c4bbdfSmrg                                                                    Atom
10735c4bbdfSmrg                                                                    property,
10835c4bbdfSmrg                                                                    XIPropertyValuePtr
10935c4bbdfSmrg                                                                    prop,
11035c4bbdfSmrg                                                                    BOOL
11135c4bbdfSmrg                                                                    checkonly),
11235c4bbdfSmrg                                                int (*GetProperty) (DeviceIntPtr
11335c4bbdfSmrg                                                                    dev,
11435c4bbdfSmrg                                                                    Atom
11535c4bbdfSmrg                                                                    property),
11635c4bbdfSmrg                                                int (*DeleteProperty)
11735c4bbdfSmrg                                                (DeviceIntPtr dev,
11835c4bbdfSmrg                                                 Atom property)
11935c4bbdfSmrg    );
12035c4bbdfSmrg
12135c4bbdfSmrgextern _X_EXPORT void XIUnregisterPropertyHandler(DeviceIntPtr dev, long id);
12235c4bbdfSmrg
12335c4bbdfSmrgextern _X_EXPORT Atom XIGetKnownProperty(const char *name);
1246747b715Smrg
1256747b715Smrgextern _X_EXPORT DeviceIntPtr XIGetDevice(xEvent *ev);
1266747b715Smrg
12735c4bbdfSmrgextern _X_EXPORT int XIPropToInt(XIPropertyValuePtr val,
12835c4bbdfSmrg                                 int *nelem_return, int **buf_return);
1296747b715Smrg
13035c4bbdfSmrgextern _X_EXPORT int XIPropToFloat(XIPropertyValuePtr val,
13135c4bbdfSmrg                                   int *nelem_return, float **buf_return);
1326747b715Smrg
1336747b715Smrg/****************************************************************************
1346747b715Smrg *                      End of driver interface                             *
1356747b715Smrg ****************************************************************************/
1366747b715Smrg
1374642e01fSmrg/**
1384642e01fSmrg * Attached to the devPrivates of each client. Specifies the version number as
1394642e01fSmrg * supported by the client.
1404642e01fSmrg */
1414642e01fSmrgtypedef struct _XIClientRec {
14235c4bbdfSmrg    int major_version;
14335c4bbdfSmrg    int minor_version;
1444642e01fSmrg} XIClientRec, *XIClientPtr;
1454642e01fSmrg
1466747b715Smrgtypedef struct _GrabParameters {
14735c4bbdfSmrg    int grabtype;               /* CORE, etc. */
14835c4bbdfSmrg    unsigned int ownerEvents;
14935c4bbdfSmrg    unsigned int this_device_mode;
15035c4bbdfSmrg    unsigned int other_devices_mode;
15135c4bbdfSmrg    Window grabWindow;
15235c4bbdfSmrg    Window confineTo;
15335c4bbdfSmrg    Cursor cursor;
15435c4bbdfSmrg    unsigned int modifiers;
1556747b715Smrg} GrabParameters;
1566747b715Smrg
1574642e01fSmrgextern int
15835c4bbdfSmrg UpdateDeviceState(DeviceIntPtr /* device */ ,
15935c4bbdfSmrg                   DeviceEvent * /*  xE    */ );
1604642e01fSmrg
1616747b715Smrgextern void
16235c4bbdfSmrg ProcessOtherEvent(InternalEvent * /* ev */ ,
16335c4bbdfSmrg                   DeviceIntPtr /* other */ );
16405b261ecSmrg
16535c4bbdfSmrgextern int
16635c4bbdfSmrg CheckGrabValues(ClientPtr /* client */ ,
16735c4bbdfSmrg                 GrabParameters * /* param */ );
16805b261ecSmrg
1696747b715Smrgextern int
17035c4bbdfSmrg GrabButton(ClientPtr /* client */ ,
17135c4bbdfSmrg            DeviceIntPtr /* dev */ ,
17235c4bbdfSmrg            DeviceIntPtr /* modifier_device */ ,
17335c4bbdfSmrg            int /* button */ ,
17435c4bbdfSmrg            GrabParameters * /* param */ ,
17535c4bbdfSmrg            enum InputLevel /* grabtype */ ,
17635c4bbdfSmrg            GrabMask * /* eventMask */ );
1776747b715Smrg
1786747b715Smrgextern int
17935c4bbdfSmrg GrabKey(ClientPtr /* client */ ,
18035c4bbdfSmrg         DeviceIntPtr /* dev */ ,
18135c4bbdfSmrg         DeviceIntPtr /* modifier_device */ ,
18235c4bbdfSmrg         int /* key */ ,
18335c4bbdfSmrg         GrabParameters * /* param */ ,
18435c4bbdfSmrg         enum InputLevel /* grabtype */ ,
18535c4bbdfSmrg         GrabMask * /* eventMask */ );
1866747b715Smrg
1876747b715Smrgextern int
18835c4bbdfSmrg GrabWindow(ClientPtr /* client */ ,
18935c4bbdfSmrg            DeviceIntPtr /* dev */ ,
19035c4bbdfSmrg            int /* type */ ,
19135c4bbdfSmrg            GrabParameters * /* param */ ,
19235c4bbdfSmrg            GrabMask * /* eventMask */ );
1936747b715Smrg
1946747b715Smrgextern int
19535c4bbdfSmrg GrabTouch(ClientPtr /* client */ ,
19635c4bbdfSmrg           DeviceIntPtr /* dev */ ,
19735c4bbdfSmrg           DeviceIntPtr /* mod_dev */ ,
19835c4bbdfSmrg           GrabParameters * /* param */ ,
19935c4bbdfSmrg           GrabMask * /* eventMask */ );
20005b261ecSmrg
2016747b715Smrgextern int
20235c4bbdfSmrg SelectForWindow(DeviceIntPtr /* dev */ ,
20335c4bbdfSmrg                 WindowPtr /* pWin */ ,
20435c4bbdfSmrg                 ClientPtr /* client */ ,
20535c4bbdfSmrg                 Mask /* mask */ ,
20635c4bbdfSmrg                 Mask /* exclusivemasks */ );
20705b261ecSmrg
2086747b715Smrgextern int
20935c4bbdfSmrg AddExtensionClient(WindowPtr /* pWin */ ,
21035c4bbdfSmrg                    ClientPtr /* client */ ,
21135c4bbdfSmrg                    Mask /* mask */ ,
21235c4bbdfSmrg                    int /* mskidx */ );
21305b261ecSmrg
2146747b715Smrgextern void
21535c4bbdfSmrg RecalculateDeviceDeliverableEvents(WindowPtr /* pWin */ );
21605b261ecSmrg
2176747b715Smrgextern int
21835c4bbdfSmrg InputClientGone(WindowPtr /* pWin */ ,
21935c4bbdfSmrg                 XID /* id */ );
22035c4bbdfSmrg
22135c4bbdfSmrgextern void
22235c4bbdfSmrg WindowGone(WindowPtr /* win */ );
22305b261ecSmrg
2246747b715Smrgextern int
22535c4bbdfSmrg SendEvent(ClientPtr /* client */ ,
22635c4bbdfSmrg           DeviceIntPtr /* d */ ,
22735c4bbdfSmrg           Window /* dest */ ,
22835c4bbdfSmrg           Bool /* propagate */ ,
22935c4bbdfSmrg           xEvent * /* ev */ ,
23035c4bbdfSmrg           Mask /* mask */ ,
23135c4bbdfSmrg           int /* count */ );
23205b261ecSmrg
2336747b715Smrgextern int
23435c4bbdfSmrg SetButtonMapping(ClientPtr /* client */ ,
23535c4bbdfSmrg                  DeviceIntPtr /* dev */ ,
23635c4bbdfSmrg                  int /* nElts */ ,
23735c4bbdfSmrg                  BYTE * /* map */ );
23805b261ecSmrg
2396747b715Smrgextern int
24035c4bbdfSmrg ChangeKeyMapping(ClientPtr /* client */ ,
24135c4bbdfSmrg                  DeviceIntPtr /* dev */ ,
24235c4bbdfSmrg                  unsigned /* len */ ,
24335c4bbdfSmrg                  int /* type */ ,
24435c4bbdfSmrg                  KeyCode /* firstKeyCode */ ,
24535c4bbdfSmrg                  CARD8 /* keyCodes */ ,
24635c4bbdfSmrg                  CARD8 /* keySymsPerKeyCode */ ,
24735c4bbdfSmrg                  KeySym * /* map */ );
24805b261ecSmrg
2496747b715Smrgextern void
25035c4bbdfSmrg DeleteWindowFromAnyExtEvents(WindowPtr /* pWin */ ,
25135c4bbdfSmrg                              Bool /* freeResources */ );
25205b261ecSmrg
2536747b715Smrgextern int
25435c4bbdfSmrg MaybeSendDeviceMotionNotifyHint(deviceKeyButtonPointer * /* pEvents */ ,
25535c4bbdfSmrg                                 Mask /* mask */ );
25605b261ecSmrg
2576747b715Smrgextern void
25835c4bbdfSmrg CheckDeviceGrabAndHintWindow(WindowPtr /* pWin */ ,
25935c4bbdfSmrg                              int /* type */ ,
26035c4bbdfSmrg                              deviceKeyButtonPointer * /* xE */ ,
26135c4bbdfSmrg                              GrabPtr /* grab */ ,
26235c4bbdfSmrg                              ClientPtr /* client */ ,
26335c4bbdfSmrg                              Mask /* deliveryMask */ );
26405b261ecSmrg
2656747b715Smrgextern void
26635c4bbdfSmrg MaybeStopDeviceHint(DeviceIntPtr /* dev */ ,
26735c4bbdfSmrg                     ClientPtr /* client */ );
26805b261ecSmrg
2696747b715Smrgextern int
27035c4bbdfSmrg DeviceEventSuppressForWindow(WindowPtr /* pWin */ ,
27135c4bbdfSmrg                              ClientPtr /* client */ ,
27235c4bbdfSmrg                              Mask /* mask */ ,
27335c4bbdfSmrg                              int /* maskndx */ );
27405b261ecSmrg
2756747b715Smrgextern void
27635c4bbdfSmrg SendEventToAllWindows(DeviceIntPtr /* dev */ ,
27735c4bbdfSmrg                       Mask /* mask */ ,
27835c4bbdfSmrg                       xEvent * /* ev */ ,
27935c4bbdfSmrg                       int /* count */ );
28005b261ecSmrg
28135c4bbdfSmrgextern void
28235c4bbdfSmrg TouchRejected(DeviceIntPtr /* sourcedev */ ,
28335c4bbdfSmrg               TouchPointInfoPtr /* ti */ ,
28435c4bbdfSmrg               XID /* resource */ ,
28535c4bbdfSmrg               TouchOwnershipEvent * /* ev */ );
28635c4bbdfSmrg
28735c4bbdfSmrgextern _X_HIDDEN void XI2EventSwap(xGenericEvent * /* from */ ,
28835c4bbdfSmrg                                   xGenericEvent * /* to */ );
2894642e01fSmrg
2906747b715Smrg/* For an event such as MappingNotify which affects client interpretation
2916747b715Smrg * of input events sent by device dev, should we notify the client, or
2926747b715Smrg * would it merely be irrelevant and confusing? */
2936747b715Smrgextern int
29435c4bbdfSmrg XIShouldNotify(ClientPtr client, DeviceIntPtr dev);
2954642e01fSmrg
2966747b715Smrgextern void
29735c4bbdfSmrg XISendDeviceChangedEvent(DeviceIntPtr device, DeviceChangedEvent *dce);
2984642e01fSmrg
2996747b715Smrgextern int
30035c4bbdfSmrg
3016747b715SmrgXISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
30235c4bbdfSmrg               unsigned int len, unsigned char *mask);
3034642e01fSmrg
3046747b715Smrgextern int
30535c4bbdfSmrg XICheckInvalidMaskBits(ClientPtr client, unsigned char *mask, int len);
3064642e01fSmrg
30735c4bbdfSmrg#endif                          /* EXEVENTS_H */
308