f0ab104f070bc7f569404826fea1828ed985638cvboxsync/************************************************************
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncCopyright 1987, 1998 The Open Group
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
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.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncThe above copyright notice and this permission notice shall be included in
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncall copies or substantial portions of the Software.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
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.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
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.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncCopyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync All Rights Reserved
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
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.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
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
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncSOFTWARE.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync********************************************************/
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#ifndef INPUTSTRUCT_H
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define INPUTSTRUCT_H
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <X11/extensions/XI2proto.h>
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <pixman.h>
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include "input.h"
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include "window.h"
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include "dixstruct.h"
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include "cursorstr.h"
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include "geext.h"
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include "privates.h"
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
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define SameClient(obj,client) \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync (CLIENT_BITS((obj)->resource) == (client)->clientAsMask)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define EMASKSIZE MAXDEVICES + 2
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
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 */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define XI2LASTEVENT XI_RawTouchEnd
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define XI2MASKSIZE ((XI2LASTEVENT >> 3) + 1) /* no of bytes for masks */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/**
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Scroll types for ::SetScrollValuator and the scroll type in the
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * ::ScrollInfoPtr.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync */
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncenum ScrollType {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync SCROLL_TYPE_NONE = 0, /**< Not a scrolling valuator */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync SCROLL_TYPE_VERTICAL = 8,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync SCROLL_TYPE_HORIZONTAL = 9,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync};
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/**
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * This struct stores the core event mask for each client except the client
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * that created the window.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync *
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 *
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * The event mask for the client that created the window is stored in
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * win->eventMask instead.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync *
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * The resource id is simply a fake client ID to associate this mask with a
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * client.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync *
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Kludge: OtherClients and InputClients must be compatible, see code.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync */
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _OtherClients {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync OtherClientsPtr next; /**< Pointer to the next mask */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync XID resource; /**< id for putting into resource manager */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Mask mask; /**< Core event mask */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} OtherClients;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/**
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * This struct stores the XI event mask for each client.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync *
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 */
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _InputClients {
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 struct _XI2Mask *xi2mask;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} InputClients;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/**
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Combined XI event masks from all devices.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync *
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * This is the XI equivalent of the deliverableEvents, eventMask and
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * dontPropagate mask of the WindowRec (or WindowOptRec).
f0ab104f070bc7f569404826fea1828ed985638cvboxsync *
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 */
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _OtherInputMasks {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /**
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Bitwise OR of all masks by all clients and the window's parent's masks.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Mask deliverableEvents[EMASKSIZE];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /**
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Bitwise OR of all masks by all clients on this window.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Mask inputEvents[EMASKSIZE];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /** The do-not-propagate masks for each device. */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Mask dontPropagateMask[EMASKSIZE];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /** The clients that selected for events */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync InputClientsPtr inputClients;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* XI2 event masks. One per device, each bit is a mask of (1 << type) */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct _XI2Mask *xi2mask;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} OtherInputMasks;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/*
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 */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define MasksPerDetailMask 8 /* 256 keycodes and 256 possible
f0ab104f070bc7f569404826fea1828ed985638cvboxsync modifier combinations, but only
f0ab104f070bc7f569404826fea1828ed985638cvboxsync 3 buttons. */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _DetailRec { /* Grab details may be bit masks */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned int exact;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Mask *pMask;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} DetailRec;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncunion _GrabMask {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Mask core;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Mask xi;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct _XI2Mask *xi2mask;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync};
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/**
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 *
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 */
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _GrabRec {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync GrabPtr next; /* for chain of passive grabs */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync XID resource;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr device;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync WindowPtr window;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned ownerEvents:1;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned keyboardMode:1;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned pointerMode:1;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync enum InputLevel grabtype;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CARD8 type; /* event type */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DetailRec modifiersDetail;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr modifierDevice;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DetailRec detail; /* key or button */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync WindowPtr confineTo; /* always NULL for keyboards */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CursorPtr cursor; /* always NULL for keyboards */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Mask eventMask;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Mask deviceMask;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* XI2 event masks. One per device, each bit is a mask of (1 << type) */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct _XI2Mask *xi2mask;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} GrabRec;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/**
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Sprite information for a device.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync */
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _SpriteRec {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CursorPtr current;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync BoxRec hotLimits; /* logical constraints of hot spot */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool confined; /* confined to screen */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync RegionPtr hotShape; /* additional logical shape constraint */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync BoxRec physLimits; /* physical constraints of hot spot */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync WindowPtr win; /* window of logical position */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync HotSpot hot; /* logical pointer position */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync HotSpot hotPhys; /* physical pointer position */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#ifdef PANORAMIX
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 WindowPtr windows[MAXSCREENS];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync WindowPtr confineWin; /* confine window */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#endif
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 WindowPtr *spriteTrace;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int spriteTraceSize;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int spriteTraceGood;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
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 *
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 */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ScreenPtr pEnqueueScreen;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ScreenPtr pDequeueScreen;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} SpriteRec;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _KeyClassRec {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int sourceid;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CARD8 down[DOWN_LENGTH];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CARD8 postdown[DOWN_LENGTH];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int modifierKeyCount[8];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct _XkbSrvInfo *xkbInfo;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} KeyClassRec, *KeyClassPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _ScrollInfo {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync enum ScrollType type;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync double increment;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int flags;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} ScrollInfo, *ScrollInfoPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _AxisInfo {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int resolution;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int min_resolution;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int max_resolution;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int min_value;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int max_value;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Atom label;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CARD8 mode;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ScrollInfo scroll;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} AxisInfo, *AxisInfoPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _ValuatorAccelerationRec {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int number;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync PointerAccelSchemeProc AccelSchemeProc;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync void *accelData; /* at disposal of AccelScheme */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync PointerAccelSchemeInitProc AccelInitProc;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceCallbackProc AccelCleanupProc;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} ValuatorAccelerationRec, *ValuatorAccelerationPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _ValuatorClassRec {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int sourceid;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int numMotionEvents;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int first_motion;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int last_motion;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync void *motion; /* motion history buffer. Different layout
f0ab104f070bc7f569404826fea1828ed985638cvboxsync for MDs and SDs!*/
f0ab104f070bc7f569404826fea1828ed985638cvboxsync WindowPtr motionHintWindow;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync AxisInfoPtr axes;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned short numAxes;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync double *axisVal; /* always absolute, but device-coord system */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ValuatorAccelerationRec accelScheme;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int h_scroll_axis; /* horiz smooth-scrolling axis */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int v_scroll_axis; /* vert smooth-scrolling axis */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} ValuatorClassRec;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _TouchPointInfo {
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 SpriteRec sprite; /* window trace for delivery */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ValuatorMask *valuators; /* last recorded axis values */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct _TouchListener {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync XID listener; /* grabs/event selection IDs receiving
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * events for this touch */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync enum TouchListenerType type;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync enum TouchListenerState state;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync enum InputLevel level; /* matters only for emulating touches */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync WindowPtr window;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync } *listeners;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int num_listeners;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int num_grabs; /* number of open grabs on this touch
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * which have not accepted or rejected */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool emulate_pointer;
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} TouchPointInfoRec;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _TouchListener TouchListener;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _DDXTouchPointInfo {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync uint32_t client_id; /* touch ID as seen in client events */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool active; /* whether or not the touch is active */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync uint32_t ddx_id; /* touch ID given by the DDX */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool emulate_pointer;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ValuatorMask* valuators; /* last recorded axis values */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} DDXTouchPointInfoRec;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _TouchClassRec {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int sourceid;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync TouchPointInfoPtr touches;
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 down */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned short state; /* logical button state */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Mask motionMask;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} TouchClassRec;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _ButtonClassRec {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int sourceid;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CARD8 numButtons;
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 here */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned short state;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Mask motionMask;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CARD8 down[DOWN_LENGTH];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CARD8 postdown[DOWN_LENGTH];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CARD8 map[MAP_LENGTH];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync union _XkbAction *xkb_acts;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Atom labels[MAX_BUTTONS];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} ButtonClassRec, *ButtonClassPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _FocusClassRec {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int sourceid;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync WindowPtr win; /* May be set to a int constant (e.g. PointerRootWin)! */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int revert;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync TimeStamp time;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync WindowPtr *trace;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int traceSize;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int traceGood;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} FocusClassRec, *FocusClassPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _ProximityClassRec {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int sourceid;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync char in_proximity;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} ProximityClassRec, *ProximityClassPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
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
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _KbdFeedbackClassRec {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync BellProcPtr BellProc;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync KbdCtrlProcPtr CtrlProc;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync KeybdCtrl ctrl;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync KbdFeedbackPtr next;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct _XkbSrvLedInfo *xkb_sli;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} KbdFeedbackClassRec;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _PtrFeedbackClassRec {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync PtrCtrlProcPtr CtrlProc;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync PtrCtrl ctrl;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync PtrFeedbackPtr next;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} PtrFeedbackClassRec;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _IntegerFeedbackClassRec {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync IntegerCtrlProcPtr CtrlProc;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync IntegerCtrl ctrl;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync IntegerFeedbackPtr next;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} IntegerFeedbackClassRec;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _StringFeedbackClassRec {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync StringCtrlProcPtr CtrlProc;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync StringCtrl ctrl;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync StringFeedbackPtr next;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} StringFeedbackClassRec;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _BellFeedbackClassRec {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync BellProcPtr BellProc;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync BellCtrlProcPtr CtrlProc;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync BellCtrl ctrl;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync BellFeedbackPtr next;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} BellFeedbackClassRec;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _LedFeedbackClassRec {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync LedCtrlProcPtr CtrlProc;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync LedCtrl ctrl;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync LedFeedbackPtr next;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct _XkbSrvLedInfo *xkb_sli;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} LedFeedbackClassRec;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _ClassesRec {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync KeyClassPtr key;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ValuatorClassPtr valuator;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync TouchClassPtr touch;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ButtonClassPtr button;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync FocusClassPtr focus;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ProximityClassPtr proximity;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync KbdFeedbackPtr kbdfeed;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync PtrFeedbackPtr ptrfeed;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync IntegerFeedbackPtr intfeed;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync StringFeedbackPtr stringfeed;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync BellFeedbackPtr bell;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync LedFeedbackPtr leds;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} ClassesRec;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* Device properties */
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _XIPropertyValue
f0ab104f070bc7f569404826fea1828ed985638cvboxsync{
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Atom type; /* ignored by server */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync short format; /* format of data for swapping - 8,16,32 */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync long size; /* size of data in (format/8) bytes */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync pointer data; /* private to client */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} XIPropertyValueRec;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _XIProperty
f0ab104f070bc7f569404826fea1828ed985638cvboxsync{
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct _XIProperty *next;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Atom propertyName;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync BOOL deletable; /* clients can delete this prop? */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync XIPropertyValueRec value;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} XIPropertyRec;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef XIPropertyRec *XIPropertyPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef XIPropertyValueRec *XIPropertyValuePtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _XIPropertyHandler
f0ab104f070bc7f569404826fea1828ed985638cvboxsync{
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct _XIPropertyHandler* next;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync long id;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int (*SetProperty) (DeviceIntPtr dev,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Atom property,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync XIPropertyValuePtr prop,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync BOOL checkonly);
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int (*GetProperty) (DeviceIntPtr dev,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Atom property);
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int (*DeleteProperty) (DeviceIntPtr dev,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Atom property);
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} XIPropertyHandler, *XIPropertyHandlerPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* states for devices */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define NOT_GRABBED 0
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define THAWED 1
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define THAWED_BOTH 2 /* not a real state */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define FREEZE_NEXT_EVENT 3
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define FREEZE_BOTH_NEXT_EVENT 4
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define FROZEN 5 /* any state >= has device frozen */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define FROZEN_NO_EVENT 5
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define FROZEN_WITH_EVENT 6
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define THAW_OTHERS 7
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _GrabInfoRec {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync TimeStamp grabTime;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool fromPassiveGrab; /* true if from passive grab */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool implicitGrab; /* implicit from ButtonPress */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync GrabPtr activeGrab;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync GrabPtr grab;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CARD8 activatingKey;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync void (*ActivateGrab) (
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr /*device*/,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync GrabPtr /*grab*/,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync TimeStamp /*time*/,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool /*autoGrab*/);
f0ab104f070bc7f569404826fea1828ed985638cvboxsync void (*DeactivateGrab)(
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr /*device*/);
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool frozen;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int state;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync GrabPtr other; /* if other grab has this frozen */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceEvent *event; /* saved to be replayed */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync } sync;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} GrabInfoRec, *GrabInfoPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _SpriteInfoRec {
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 SpritePtr sprite; /* sprite information */
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
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* keep states for animated cursor */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CursorPtr pCursor;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ScreenPtr pScreen;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int elt;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CARD32 time;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync } anim;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} SpriteInfoRec, *SpriteInfoPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* device types */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define MASTER_POINTER 1
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define MASTER_KEYBOARD 2
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define SLAVE 3
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
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _DeviceIntRec {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceRec public;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr next;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool startup; /* true if needs to be turned on at
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 inited; /* TRUE if INIT returns Success */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool enabled; /* TRUE if ON returns Success */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool coreEvents; /* TRUE if device also sends core */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync GrabInfoRec deviceGrab; /* grab on the device */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int type; /* MASTER_POINTER, MASTER_KEYBOARD, SLAVE */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Atom xinput_type;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync char *name;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int id;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync KeyClassPtr key;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ValuatorClassPtr valuator;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync TouchClassPtr touch;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ButtonClassPtr button;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync FocusClassPtr focus;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ProximityClassPtr proximity;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync KbdFeedbackPtr kbdfeed;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync PtrFeedbackPtr ptrfeed;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync IntegerFeedbackPtr intfeed;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync StringFeedbackPtr stringfeed;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync BellFeedbackPtr bell;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync LedFeedbackPtr leds;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct _XkbInterest *xkb_interest;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync char *config_info; /* used by the hotplug layer */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ClassesPtr unused_classes; /* for master devices */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int saved_master_id; /* for slaves while grabbed */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync PrivateRec *devPrivates;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceUnwrapProc unwrapProc;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync SpriteInfoPtr spriteInfo;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr master; /* master device */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr lastSlave; /* last slave device used */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* last valuator values recorded, not posted to client;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * for slave devices, valuators is in device coordinates, mapped to the
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * desktop
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * for master devices, valuators is in desktop coordinates.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * see dix/getevents.c
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * remainder supports acceleration
f0ab104f070bc7f569404826fea1828ed985638cvboxsync */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync double valuators[MAX_VALUATORS];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int numValuators;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr slave;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ValuatorMask *scroll;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int num_touches; /* size of the touches array */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DDXTouchPointInfoPtr touches;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync } last;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* Input device property handling. */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync XIPropertyPtr properties;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync XIPropertyHandlerPtr handlers; /* NULL-terminated */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync } properties;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* coordinate transformation matrix for absolute input devices */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct pixman_f_transform transform;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* XTest related master device id */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int xtest_master_id;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} DeviceIntRec;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int numDevices; /* total number of devices */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr devices; /* all devices turned on */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr off_devices; /* all devices turned off */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr keyboard; /* the main one for the server */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr pointer;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr all_devices;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr all_master_devices;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} InputInfo;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncextern _X_EXPORT InputInfo inputInfo;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* for keeping the events for devices grabbed synchronously */
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _QdEvent *QdEventPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _QdEvent {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct xorg_list next;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync DeviceIntPtr device;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ScreenPtr pScreen; /* what screen the pointer was on */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned long months; /* milliseconds is in the event */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync InternalEvent *event;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} QdEventRec;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/**
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * syncEvents is the global structure for queued events.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync *
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 */
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _EventSyncInfo {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct xorg_list pending;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
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
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /**
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 WindowPtr replayWin; /* ComputeFreezes */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /**
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Flag to indicate whether we're in the process of
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * replaying events. Only set in ComputeFreezes(). */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool playingEvents;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync TimeStamp time;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} EventSyncInfoRec, *EventSyncInfoPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncextern EventSyncInfoRec syncEvents;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/**
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Given a sprite, returns the window at the bottom of the trace (i.e. the
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * furthest window from the root).
f0ab104f070bc7f569404826fea1828ed985638cvboxsync */
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncstatic inline WindowPtr DeepestSpriteWin(SpritePtr sprite)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync{
f0ab104f070bc7f569404826fea1828ed985638cvboxsync assert(sprite->spriteTraceGood > 0);
f0ab104f070bc7f569404826fea1828ed985638cvboxsync return sprite->spriteTrace[sprite->spriteTraceGood - 1];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync}
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncstruct _XI2Mask {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned char **masks; /* event mask in masks[deviceid][event type byte] */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync size_t nmasks; /* number of masks */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync size_t mask_size; /* size of each mask in bytes */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync};
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#endif /* INPUTSTRUCT_H */