Document the event masks.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
ed9d58c3c2
commit
8364bf7374
19
dix/events.c
19
dix/events.c
|
@ -345,11 +345,20 @@ static Mask lastEventMask;
|
||||||
|
|
||||||
extern int DeviceMotionNotify;
|
extern int DeviceMotionNotify;
|
||||||
|
|
||||||
/**
|
|
||||||
* Event filters. One set of filters for each device, but only the first layer
|
|
||||||
* is initialized. The rest is memcpy'd in InitEvents.
|
|
||||||
*/
|
|
||||||
#define CantBeFiltered NoEventMask
|
#define CantBeFiltered NoEventMask
|
||||||
|
/**
|
||||||
|
* Event masks for each event type.
|
||||||
|
*
|
||||||
|
* One set of filters for each device, but only the first layer
|
||||||
|
* is initialized. The rest is memcpy'd in InitEvents.
|
||||||
|
*
|
||||||
|
* Filters are used whether a given event may be delivered to a client,
|
||||||
|
* usually in the form of if (window-event-mask & filter); then deliver event.
|
||||||
|
*
|
||||||
|
* One notable filter is for PointerMotion/DevicePointerMotion events. Each
|
||||||
|
* time a button is pressed, the filter is modified to also contain the
|
||||||
|
* matching ButtonXMotion mask.
|
||||||
|
*/
|
||||||
static Mask filters[MAXDEVICES][128] = {
|
static Mask filters[MAXDEVICES][128] = {
|
||||||
{
|
{
|
||||||
NoSuchEvent, /* 0 */
|
NoSuchEvent, /* 0 */
|
||||||
|
@ -3621,7 +3630,7 @@ FixKeyState (xEvent *xE, DeviceIntPtr keybd)
|
||||||
* The otherEventMasks on a WindowOptional is the combination of all event
|
* The otherEventMasks on a WindowOptional is the combination of all event
|
||||||
* masks set by all clients on the window.
|
* masks set by all clients on the window.
|
||||||
* deliverableEventMask is the combination of the eventMask and the
|
* deliverableEventMask is the combination of the eventMask and the
|
||||||
* otherEventMask.
|
* otherEventMask plus the events that may be propagated to the parent.
|
||||||
*
|
*
|
||||||
* Traverses to siblings and parents of the window.
|
* Traverses to siblings and parents of the window.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -65,24 +65,66 @@ SOFTWARE.
|
||||||
|
|
||||||
#define EMASKSIZE MAXDEVICES + 1
|
#define EMASKSIZE MAXDEVICES + 1
|
||||||
|
|
||||||
/* Kludge: OtherClients and InputClients must be compatible, see code */
|
/**
|
||||||
|
* This struct stores the core event mask for each client except the client
|
||||||
|
* that created the window.
|
||||||
|
*
|
||||||
|
* Each window that has events selected from other clients has at least one of
|
||||||
|
* these masks. If multiple clients selected for events on the same window,
|
||||||
|
* these masks are in a linked list.
|
||||||
|
*
|
||||||
|
* The event mask for the client that created the window is stored in
|
||||||
|
* win->eventMask instead.
|
||||||
|
*
|
||||||
|
* The resource id is simply a fake client ID to associate this mask with a
|
||||||
|
* client.
|
||||||
|
*
|
||||||
|
* Kludge: OtherClients and InputClients must be compatible, see code.
|
||||||
|
*/
|
||||||
typedef struct _OtherClients {
|
typedef struct _OtherClients {
|
||||||
OtherClientsPtr next;
|
OtherClientsPtr next; /**< Pointer to the next mask */
|
||||||
XID resource; /* id for putting into resource manager */
|
XID resource; /**< id for putting into resource manager */
|
||||||
Mask mask;
|
Mask mask; /**< Core event mask */
|
||||||
} OtherClients;
|
} OtherClients;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This struct stores the XI event mask for each client.
|
||||||
|
*
|
||||||
|
* Each window that has events selected has at least one of these masks. If
|
||||||
|
* multiple client selected for events on the same window, these masks are in
|
||||||
|
* a linked list.
|
||||||
|
*/
|
||||||
typedef struct _InputClients {
|
typedef struct _InputClients {
|
||||||
InputClientsPtr next;
|
InputClientsPtr next; /**< Pointer to the next mask */
|
||||||
XID resource; /* id for putting into resource manager */
|
XID resource; /**< id for putting into resource manager */
|
||||||
Mask mask[EMASKSIZE];
|
Mask mask[EMASKSIZE]; /**< Actual XI event mask, deviceid is index */
|
||||||
} InputClients;
|
} InputClients;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Combined XI event masks from all devices.
|
||||||
|
*
|
||||||
|
* This is the XI equivalent of the deliverableEvents, eventMask and
|
||||||
|
* dontPropagate mask of the WindowRec (or WindowOptRec).
|
||||||
|
*
|
||||||
|
* A window that has an XI client selecting for events has exactly one
|
||||||
|
* OtherInputMasks struct and exactly one InputClients struct hanging off
|
||||||
|
* inputClients. Each further client appends to the inputClients list.
|
||||||
|
* Each Mask field is per-device, with the device id as the index.
|
||||||
|
* Exception: for non-device events (Presence events), the MAX_DEVICES
|
||||||
|
* deviceid is used.
|
||||||
|
*/
|
||||||
typedef struct _OtherInputMasks {
|
typedef struct _OtherInputMasks {
|
||||||
|
/**
|
||||||
|
* Bitwise OR of all masks by all clients and the window's parent's masks.
|
||||||
|
*/
|
||||||
Mask deliverableEvents[EMASKSIZE];
|
Mask deliverableEvents[EMASKSIZE];
|
||||||
|
/**
|
||||||
|
* Bitwise OR of all masks by all clients on this window.
|
||||||
|
*/
|
||||||
Mask inputEvents[EMASKSIZE];
|
Mask inputEvents[EMASKSIZE];
|
||||||
|
/** The do-not-propagate masks for each device. */
|
||||||
Mask dontPropagateMask[EMASKSIZE];
|
Mask dontPropagateMask[EMASKSIZE];
|
||||||
|
/** The clients that selected for events */
|
||||||
InputClientsPtr inputClients;
|
InputClientsPtr inputClients;
|
||||||
} OtherInputMasks;
|
} OtherInputMasks;
|
||||||
|
|
||||||
|
|
|
@ -153,8 +153,8 @@ typedef struct _Window {
|
||||||
RegionRec borderSize;
|
RegionRec borderSize;
|
||||||
DDXPointRec origin; /* position relative to parent */
|
DDXPointRec origin; /* position relative to parent */
|
||||||
unsigned short borderWidth;
|
unsigned short borderWidth;
|
||||||
unsigned short deliverableEvents;
|
unsigned short deliverableEvents; /* all masks from all clients */
|
||||||
Mask eventMask;
|
Mask eventMask; /* mask from the creating client */
|
||||||
PixUnion background;
|
PixUnion background;
|
||||||
PixUnion border;
|
PixUnion border;
|
||||||
pointer backStorage; /* null when BS disabled */
|
pointer backStorage; /* null when BS disabled */
|
||||||
|
|
Loading…
Reference in New Issue