dix: replace CORE_EVENT and XI2_EVENT macros with inline functions.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Jamey Sharp <jamey@minilop.net>
This commit is contained in:
parent
ffd4874798
commit
728d0bf20e
78
dix/events.c
78
dix/events.c
|
@ -176,12 +176,23 @@ typedef const char *string;
|
|||
#define AllEventMasks (LastEventMask|(LastEventMask-1))
|
||||
|
||||
|
||||
#define CORE_EVENT(event) \
|
||||
(!((event)->u.u.type & EXTENSION_EVENT_BASE) && \
|
||||
(event)->u.u.type != GenericEvent)
|
||||
#define XI2_EVENT(event) \
|
||||
(((event)->u.u.type == GenericEvent) && \
|
||||
((xGenericEvent*)(event))->extension == IReqCode)
|
||||
/* @return the core event type or 0 if the event is not a core event */
|
||||
static inline int
|
||||
core_get_type(const xEvent *event)
|
||||
{
|
||||
int type = event->u.u.type;
|
||||
|
||||
return ((type & EXTENSION_EVENT_BASE) || type == GenericEvent) ? 0 : type;
|
||||
}
|
||||
|
||||
/* @return the XI2 event type or 0 if the event is not a XI2 event */
|
||||
static inline int
|
||||
xi2_get_type(const xEvent *event)
|
||||
{
|
||||
xGenericEvent* e = (xGenericEvent*)event;
|
||||
|
||||
return (e->type != GenericEvent || e->extension != IReqCode) ? 0 : e->evtype;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to indicate a implicit passive grab created by a ButtonPress event.
|
||||
|
@ -414,10 +425,12 @@ static const Mask default_filter[128] =
|
|||
Mask
|
||||
GetEventFilter(DeviceIntPtr dev, xEvent *event)
|
||||
{
|
||||
int evtype = 0;
|
||||
|
||||
if (event->u.u.type != GenericEvent)
|
||||
return filters[dev ? dev->id : 0][event->u.u.type];
|
||||
else if (XI2_EVENT(event))
|
||||
return (1 << (((xXIDeviceEvent*)event)->evtype % 8));
|
||||
else if ((evtype = xi2_get_type(event)))
|
||||
return (1 << (evtype % 8));
|
||||
ErrorF("[dix] Unknown device type %d. No filter\n", event->u.u.type);
|
||||
return 0;
|
||||
}
|
||||
|
@ -432,7 +445,7 @@ GetWindowXI2Mask(DeviceIntPtr dev, WindowPtr win, xEvent* ev)
|
|||
int filter;
|
||||
int evtype;
|
||||
|
||||
if (!inputMasks || !XI2_EVENT(ev))
|
||||
if (!inputMasks || xi2_get_type(ev) == 0)
|
||||
return 0;
|
||||
|
||||
evtype = ((xGenericEvent*)ev)->evtype;
|
||||
|
@ -446,14 +459,16 @@ GetWindowXI2Mask(DeviceIntPtr dev, WindowPtr win, xEvent* ev)
|
|||
Mask
|
||||
GetEventMask(DeviceIntPtr dev, xEvent *event, InputClients* other)
|
||||
{
|
||||
int evtype;
|
||||
|
||||
/* XI2 filters are only ever 8 bit, so let's return a 8 bit mask */
|
||||
if (XI2_EVENT(event))
|
||||
if ((evtype = xi2_get_type(event)))
|
||||
{
|
||||
int byte = ((xGenericEvent*)event)->evtype / 8;
|
||||
int byte = evtype / 8;
|
||||
return (other->xi2mask[dev->id][byte] |
|
||||
other->xi2mask[XIAllDevices][byte] |
|
||||
(IsMaster(dev)? other->xi2mask[XIAllMasterDevices][byte] : 0));
|
||||
} else if (CORE_EVENT(event))
|
||||
} else if (core_get_type(event) != 0)
|
||||
return other->mask[XIAllDevices];
|
||||
else
|
||||
return other->mask[dev->id];
|
||||
|
@ -1952,11 +1967,8 @@ ActivateImplicitGrab(DeviceIntPtr dev, ClientPtr client, WindowPtr win,
|
|||
grabtype = GRABTYPE_CORE;
|
||||
else if (type == DeviceButtonPress)
|
||||
grabtype = GRABTYPE_XI;
|
||||
else if (XI2_EVENT(event) && ((xGenericEvent*)event)->evtype == XI_ButtonPress)
|
||||
{
|
||||
type = ((xGenericEvent*)event)->evtype;
|
||||
else if ((type = xi2_get_type(event)) == XI_ButtonPress)
|
||||
grabtype = GRABTYPE_XI2;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
|
||||
|
@ -2040,9 +2052,9 @@ DeliverEventToClients(DeviceIntPtr dev, WindowPtr win, xEvent *events,
|
|||
enum EventDeliveryState rc = EVENT_SKIP;
|
||||
InputClients *other;
|
||||
|
||||
if (CORE_EVENT(events))
|
||||
if (core_get_type(events) != 0)
|
||||
other = (InputClients *)wOtherClients(win);
|
||||
else if (XI2_EVENT(events))
|
||||
else if (xi2_get_type(events) != 0)
|
||||
{
|
||||
OtherInputMasks *inputMasks = wOtherInputMasks(win);
|
||||
/* Has any client selected for the event? */
|
||||
|
@ -2094,6 +2106,7 @@ out:
|
|||
return rc;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Deliver events to a window. At this point, we do not yet know if the event
|
||||
* actually needs to be delivered. May activate a grab if the event is a
|
||||
|
@ -2127,7 +2140,7 @@ DeliverEventsToWindow(DeviceIntPtr pDev, WindowPtr pWin, xEvent
|
|||
int type = pEvents->u.u.type;
|
||||
|
||||
/* Deliver to window owner */
|
||||
if ((filter == CantBeFiltered) || CORE_EVENT(pEvents))
|
||||
if ((filter == CantBeFiltered) || core_get_type(pEvents) != 0)
|
||||
{
|
||||
enum EventDeliveryState rc;
|
||||
|
||||
|
@ -2313,22 +2326,29 @@ FixUpEventFromWindow(
|
|||
Window child,
|
||||
Bool calcChild)
|
||||
{
|
||||
int evtype;
|
||||
|
||||
if (calcChild)
|
||||
child = FindChildForEvent(pSprite, pWin);
|
||||
|
||||
if (XI2_EVENT(xE))
|
||||
if ((evtype = xi2_get_type(xE)))
|
||||
{
|
||||
xXIDeviceEvent* event = (xXIDeviceEvent*)xE;
|
||||
|
||||
if (event->evtype == XI_RawKeyPress ||
|
||||
event->evtype == XI_RawKeyRelease ||
|
||||
event->evtype == XI_RawButtonPress ||
|
||||
event->evtype == XI_RawButtonRelease ||
|
||||
event->evtype == XI_RawMotion ||
|
||||
event->evtype == XI_DeviceChanged ||
|
||||
event->evtype == XI_HierarchyChanged ||
|
||||
event->evtype == XI_PropertyEvent)
|
||||
return;
|
||||
switch (evtype)
|
||||
{
|
||||
case XI_RawKeyPress:
|
||||
case XI_RawKeyRelease:
|
||||
case XI_RawButtonPress:
|
||||
case XI_RawButtonRelease:
|
||||
case XI_RawMotion:
|
||||
case XI_DeviceChanged:
|
||||
case XI_HierarchyChanged:
|
||||
case XI_PropertyEvent:
|
||||
return;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
event->root = RootWindow(pSprite)->drawable.id;
|
||||
event->event = pWin->drawable.id;
|
||||
|
|
Loading…
Reference in New Issue
Block a user