f0ab104f070bc7f569404826fea1828ed985638cvboxsync/************************************************************
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncCopyright 1987, 1998 The Open Group
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncPermission to use, copy, modify, distribute, and sell this software and its
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncdocumentation for any purpose is hereby granted without fee, provided that
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncthe above copyright notice appear in all copies and that both that
f0ab104f070bc7f569404826fea1828ed985638cvboxsynccopyright notice and this permission notice appear in supporting
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncdocumentation.
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncThe above copyright notice and this permission notice shall be included in
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncall copies or substantial portions of the Software.
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncExcept as contained in this notice, the name of The Open Group shall not be
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncused in advertising or otherwise to promote the sale, use or other dealings
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncin this Software without prior written authorization from The Open Group.
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncCopyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync All Rights Reserved
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncPermission to use, copy, modify, and distribute this software and its
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncdocumentation for any purpose and without fee is hereby granted,
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncprovided that the above copyright notice appear in all copies and that
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncboth that copyright notice and this permission notice appear in
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncsupporting documentation, and that the name of Digital not be
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncused in advertising or publicity pertaining to distribution of the
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncsoftware without specific, written prior permission.
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
f0ab104f070bc7f569404826fea1828ed985638cvboxsync********************************************************/
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define BitIsOn(ptr, bit) (!!(((const BYTE *) (ptr))[(bit)>>3] & (1 << ((bit) & 7))))
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define SetBit(ptr, bit) (((BYTE *) (ptr))[(bit)>>3] |= (1 << ((bit) & 7)))
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define ClearBit(ptr, bit) (((BYTE *)(ptr))[(bit)>>3] &= ~(1 << ((bit) & 7)))
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncextern _X_EXPORT int CountBits(const uint8_t *mask, int len);
f0ab104f070bc7f569404826fea1828ed985638cvboxsync (CLIENT_BITS((obj)->resource) == (client)->clientAsMask)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* This is the last XI2 event supported by the server. If you add
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * events to the protocol, the server will not support these events until
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * this number here is bumped.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define XI2MASKSIZE ((XI2LASTEVENT >> 3) + 1) /* no of bytes for masks */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Scroll types for ::SetScrollValuator and the scroll type in the
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * ::ScrollInfoPtr.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync SCROLL_TYPE_NONE = 0, /**< Not a scrolling valuator */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * This struct stores the core event mask for each client except the client
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * that created the window.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Each window that has events selected from other clients has at least one of
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * these masks. If multiple clients selected for events on the same window,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * these masks are in a linked list.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * The event mask for the client that created the window is stored in
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * win->eventMask instead.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * The resource id is simply a fake client ID to associate this mask with a
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Kludge: OtherClients and InputClients must be compatible, see code.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync OtherClientsPtr next; /**< Pointer to the next mask */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync XID resource; /**< id for putting into resource manager */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * This struct stores the XI event mask for each client.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Each window that has events selected has at least one of these masks. If
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * multiple client selected for events on the same window, these masks are in
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * a linked list.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync InputClientsPtr next; /**< Pointer to the next mask */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync XID resource; /**< id for putting into resource manager */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Mask mask[EMASKSIZE]; /**< Actual XI event mask, deviceid is index */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /** XI2 event masks. One per device, each bit is a mask of (1 << type) */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Combined XI event masks from all devices.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * This is the XI equivalent of the deliverableEvents, eventMask and
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * dontPropagate mask of the WindowRec (or WindowOptRec).
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * A window that has an XI client selecting for events has exactly one
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * OtherInputMasks struct and exactly one InputClients struct hanging off
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * inputClients. Each further client appends to the inputClients list.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Each Mask field is per-device, with the device id as the index.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Exception: for non-device events (Presence events), the MAXDEVICES
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * deviceid is used.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Bitwise OR of all masks by all clients and the window's parent's masks.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Bitwise OR of all masks by all clients on this window.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /** The do-not-propagate masks for each device. */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /** The clients that selected for events */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* XI2 event masks. One per device, each bit is a mask of (1 << type) */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * The following structure gets used for both active and passive grabs. For
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * active grabs some of the fields (e.g. modifiers) are not used. However,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * that is not much waste since there aren't many active grabs (one per
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * keyboard/pointer device) going at once in the server.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define MasksPerDetailMask 8 /* 256 keycodes and 256 possible
f0ab104f070bc7f569404826fea1828ed985638cvboxsync modifier combinations, but only
f0ab104f070bc7f569404826fea1828ed985638cvboxsync 3 buttons. */
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _DetailRec { /* Grab details may be bit masks */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Central struct for device grabs.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * The same struct is used for both core grabs and device grabs, with
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * different fields being set.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * If the grab is a core grab (GrabPointer/GrabKeyboard), then the eventMask
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * is a combination of standard event masks (i.e. PointerMotionMask |
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * ButtonPressMask).
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * If the grab is a device grab (GrabDevice), then the eventMask is a
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * combination of event masks for a given XI event type (see SetEventInfo).
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * If the grab is a result of a ButtonPress, then eventMask is the core mask
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * and deviceMask is set to the XI event mask for the grab.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync WindowPtr confineTo; /* always NULL for keyboards */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* XI2 event masks. One per device, each bit is a mask of (1 << type) */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Sprite information for a device.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync BoxRec hotLimits; /* logical constraints of hot spot */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync RegionPtr hotShape; /* additional logical shape constraint */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync BoxRec physLimits; /* physical constraints of hot spot */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ScreenPtr screen; /* all others are in Screen 0 coordinates */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync RegionRec Reg1; /* Region 1 for confining motion */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync RegionRec Reg2; /* Region 2 for confining virtual motion */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* The window trace information is used at dix/events.c to avoid having
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * to compute all the windows between the root and the current pointer
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * window each time a button or key goes down. The grabs on each of those
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * windows must be checked.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * spriteTraces should only be used at dix/events.c! */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* Due to delays between event generation and event processing, it is
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * possible that the pointer has crossed screen boundaries between the
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * time in which it begins generating events and the time when
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * those events are processed.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * pEnqueueScreen: screen the pointer was on when the event was generated
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * pDequeueScreen: screen the pointer was on when the event is processed
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} ValuatorAccelerationRec, *ValuatorAccelerationPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync void *motion; /* motion history buffer. Different layout
f0ab104f070bc7f569404826fea1828ed985638cvboxsync for MDs and SDs!*/
f0ab104f070bc7f569404826fea1828ed985638cvboxsync double *axisVal; /* always absolute, but device-coord system */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int h_scroll_axis; /* horiz smooth-scrolling axis */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int v_scroll_axis; /* vert smooth-scrolling axis */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync uint32_t client_id; /* touch ID as seen in client events */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int sourceid; /* Source device's ID for this touchpoint */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool active; /* whether or not the touch is active */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool pending_finish; /* true if the touch is physically inactive
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * but still owned by a grab */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ValuatorMask *valuators; /* last recorded axis values */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync XID listener; /* grabs/event selection IDs receiving
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * events for this touch */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync enum InputLevel level; /* matters only for emulating touches */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int num_grabs; /* number of open grabs on this touch
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * which have not accepted or rejected */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceEvent *history; /* History of events on this touchpoint */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync size_t history_elements; /* Number of current elements in history */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync size_t history_size; /* Size of history in elements */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync uint32_t client_id; /* touch ID as seen in client events */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool active; /* whether or not the touch is active */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ValuatorMask* valuators; /* last recorded axis values */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned short num_touches; /* number of allocated touches */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned short max_touches; /* maximum number of touches, may be 0 */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CARD8 mode; /* ::XIDirectTouch, XIDependentTouch */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* for pointer-emulation */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CARD8 buttonsDown; /* number of buttons currently down
f0ab104f070bc7f569404826fea1828ed985638cvboxsync This counts logical buttons, not
f0ab104f070bc7f569404826fea1828ed985638cvboxsync physical ones, i.e if some buttons
f0ab104f070bc7f569404826fea1828ed985638cvboxsync are mapped to 0, they're not counted
f0ab104f070bc7f569404826fea1828ed985638cvboxsync WindowPtr win; /* May be set to a int constant (e.g. PointerRootWin)! */
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _KbdFeedbackClassRec *KbdFeedbackPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _PtrFeedbackClassRec *PtrFeedbackPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _IntegerFeedbackClassRec *IntegerFeedbackPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _StringFeedbackClassRec *StringFeedbackPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _BellFeedbackClassRec *BellFeedbackPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _LedFeedbackClassRec *LedFeedbackPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* Device properties */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync short format; /* format of data for swapping - 8,16,32 */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync BOOL deletable; /* clients can delete this prop? */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* states for devices */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define FROZEN 5 /* any state >= has device frozen */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool fromPassiveGrab; /* true if from passive grab */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* sprite must always point to a valid sprite. For devices sharing the
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * sprite, let sprite point to a paired spriteOwner's sprite. */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool spriteOwner; /* True if device owns the sprite */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr paired; /* The paired device. Keyboard if
f0ab104f070bc7f569404826fea1828ed985638cvboxsync spriteOwner is TRUE, otherwise the
f0ab104f070bc7f569404826fea1828ed985638cvboxsync pointer that owns the sprite. */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* keep states for animated cursor */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* device types */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* special types for GetMaster */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define MASTER_ATTACHED 4 /* Master for this device */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define KEYBOARD_OR_FLOAT 5 /* Keyboard master for this device or this device if floating */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define POINTER_OR_FLOAT 6 /* Pointer master for this device or this device if floating */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync server initialization time */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceProc deviceProc; /* proc(DevicePtr, DEVICE_xx). It is
f0ab104f070bc7f569404826fea1828ed985638cvboxsync used to initialize, turn on, or
f0ab104f070bc7f569404826fea1828ed985638cvboxsync turn off the device */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool coreEvents; /* TRUE if device also sends core */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int type; /* MASTER_POINTER, MASTER_KEYBOARD, SLAVE */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ClassesPtr unused_classes; /* for master devices */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int saved_master_id; /* for slaves while grabbed */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr lastSlave; /* last slave device used */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* last valuator values recorded, not posted to client;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * for slave devices, valuators is in device coordinates, mapped to the
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * for master devices, valuators is in desktop coordinates.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * remainder supports acceleration
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* Input device property handling. */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync XIPropertyHandlerPtr handlers; /* NULL-terminated */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* coordinate transformation matrix for absolute input devices */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* XTest related master device id */
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr off_devices; /* all devices turned off */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr keyboard; /* the main one for the server */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* for keeping the events for devices grabbed synchronously */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ScreenPtr pScreen; /* what screen the pointer was on */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned long months; /* milliseconds is in the event */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * syncEvents is the global structure for queued events.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Devices can be frozen through GrabModeSync pointer grabs. If this is the
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * case, events from these devices are added to "pending" instead of being
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * processed normally. When the device is unfrozen, events in "pending" are
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * replayed and processed as if they would come from the device directly.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /** The device to replay events for. Only set in AllowEvents(), in which
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * case it is set to the device specified in the request. */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr replayDev; /* kludgy rock to put flag for */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * The window the events are supposed to be replayed on.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * This window may be set to the grab's window (but only when
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Replay{Pointer|Keyboard} is given in the XAllowEvents()
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * request. */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Flag to indicate whether we're in the process of
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * replaying events. Only set in ComputeFreezes(). */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Given a sprite, returns the window at the bottom of the trace (i.e. the
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * furthest window from the root).
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncstatic inline WindowPtr DeepestSpriteWin(SpritePtr sprite)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync return sprite->spriteTrace[sprite->spriteTraceGood - 1];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned char **masks; /* event mask in masks[deviceid][event type byte] */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#endif /* INPUTSTRUCT_H */