From 6cc0e6a0afa6a87802767d484aa4e68fa935d3eb Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 28 Oct 2011 12:55:55 +1000 Subject: include: add GetXI2MaskByte and GetXI2EventFilterMask to headers This is needed for touch event processing. Signed-off-by: Peter Hutterer Reviewed-by: Chase Douglas --- include/input.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'include') diff --git a/include/input.h b/include/input.h index 8b0c18e70..917e92f8a 100644 --- a/include/input.h +++ b/include/input.h @@ -57,6 +57,7 @@ SOFTWARE. #include "xkbrules.h" #include "events.h" #include "list.h" +#include #define DEVICE_INIT 0 #define DEVICE_ON 1 @@ -537,6 +538,8 @@ extern _X_EXPORT void FreeInputAttributes(InputAttributes *attrs); extern Mask GetEventMask(DeviceIntPtr dev, xEvent* ev, InputClientsPtr clients); extern Mask GetEventFilter(DeviceIntPtr dev, xEvent *event); extern Bool WindowXI2MaskIsset(DeviceIntPtr dev, WindowPtr win, xEvent* ev); +extern Mask GetXI2EventFilterMask(int evtype); +extern int GetXI2MaskByte(XI2Mask *mask, DeviceIntPtr dev, int event_type); void FixUpEventFromWindow(SpritePtr pSprite, xEvent *xE, WindowPtr pWin, -- cgit v1.2.3 From e5aa00989cda9ebd18063c5e955235123ad37b88 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 7 Dec 2011 14:14:10 +1000 Subject: Change GetXI2/XI/CoreType to just take a type argument Avoids the dummy-event dance if we have an event type and need to get the matching XI2 type. Signed-off-by: Peter Hutterer Reviewed-by: Chase Douglas --- dix/eventconvert.c | 16 ++++++++-------- dix/events.c | 14 +++++++------- hw/xfree86/common/xf86DGA.c | 4 ++-- include/eventconvert.h | 7 ++++--- test/xi2/protocol-eventconvert.c | 6 +++--- 5 files changed, 24 insertions(+), 23 deletions(-) (limited to 'include') diff --git a/dix/eventconvert.c b/dix/eventconvert.c index c9da39685..67b420a63 100644 --- a/dix/eventconvert.c +++ b/dix/eventconvert.c @@ -647,7 +647,7 @@ eventToDeviceEvent(DeviceEvent *ev, xEvent **xi) xde = (xXIDeviceEvent*)*xi; xde->type = GenericEvent; xde->extension = IReqCode; - xde->evtype = GetXI2Type((InternalEvent*)ev); + xde->evtype = GetXI2Type(ev->type); xde->time = ev->time; xde->length = bytes_to_int32(len - sizeof(xEvent)); xde->detail = ev->detail.button; @@ -714,7 +714,7 @@ eventToRawEvent(RawDeviceEvent *ev, xEvent **xi) raw = (xXIRawEvent*)*xi; raw->type = GenericEvent; raw->extension = IReqCode; - raw->evtype = GetXI2Type((InternalEvent*)ev); + raw->evtype = GetXI2Type(ev->type); raw->time = ev->time; raw->length = bytes_to_int32(len - sizeof(xEvent)); raw->detail = ev->detail.button; @@ -746,10 +746,10 @@ eventToRawEvent(RawDeviceEvent *ev, xEvent **xi) * equivalent exists. */ int -GetCoreType(InternalEvent *event) +GetCoreType(enum EventType type) { int coretype = 0; - switch(event->any.type) + switch(type) { case ET_Motion: coretype = MotionNotify; break; case ET_ButtonPress: coretype = ButtonPress; break; @@ -767,10 +767,10 @@ GetCoreType(InternalEvent *event) * equivalent exists. */ int -GetXIType(InternalEvent *event) +GetXIType(enum EventType type) { int xitype = 0; - switch(event->any.type) + switch(type) { case ET_Motion: xitype = DeviceMotionNotify; break; case ET_ButtonPress: xitype = DeviceButtonPress; break; @@ -790,11 +790,11 @@ GetXIType(InternalEvent *event) * equivalent exists. */ int -GetXI2Type(InternalEvent *event) +GetXI2Type(enum EventType type) { int xi2type = 0; - switch(event->any.type) + switch(type) { case ET_Motion: xi2type = XI_Motion; break; case ET_ButtonPress: xi2type = XI_ButtonPress; break; diff --git a/dix/events.c b/dix/events.c index 5dfcbf30e..49f70c33a 100644 --- a/dix/events.c +++ b/dix/events.c @@ -2553,13 +2553,13 @@ EventIsDeliverable(DeviceIntPtr dev, InternalEvent* event, WindowPtr win) int type; OtherInputMasks *inputMasks = wOtherInputMasks(win); - if ((type = GetXI2Type(event)) != 0) + if ((type = GetXI2Type(event->any.type)) != 0) { if (inputMasks && xi2mask_isset(inputMasks->xi2mask, dev, type)) rc |= EVENT_XI2_MASK; } - if ((type = GetXIType(event)) != 0) + if ((type = GetXIType(event->any.type)) != 0) { filter = GetEventFilterMask(dev, type); @@ -2575,7 +2575,7 @@ EventIsDeliverable(DeviceIntPtr dev, InternalEvent* event, WindowPtr win) } - if ((type = GetCoreType(event)) != 0) + if ((type = GetCoreType(event->any.type)) != 0) { filter = GetEventFilterMask(dev, type); @@ -3712,7 +3712,7 @@ CheckPassiveGrabsOnWindow( tempGrab->modifiersDetail.exact = xkbi ? xkbi->state.grab_mods : 0; /* Check for XI2 and XI grabs first */ - tempGrab->type = GetXI2Type(event); + tempGrab->type = GetXI2Type(event->any.type); tempGrab->grabtype = GRABTYPE_XI2; if (GrabMatchesSecond(tempGrab, grab, FALSE)) match = XI2_MATCH; @@ -3720,7 +3720,7 @@ CheckPassiveGrabsOnWindow( if (!match) { tempGrab->grabtype = GRABTYPE_XI; - if ((tempGrab->type = GetXIType(event)) && + if ((tempGrab->type = GetXIType(event->any.type)) && (GrabMatchesSecond(tempGrab, grab, FALSE))) match = XI_MATCH; } @@ -3729,7 +3729,7 @@ CheckPassiveGrabsOnWindow( if (!match && checkCore) { tempGrab->grabtype = GRABTYPE_CORE; - if ((tempGrab->type = GetCoreType(event)) && + if ((tempGrab->type = GetCoreType(event->any.type)) && (GrabMatchesSecond(tempGrab, grab, TRUE))) match = CORE_MATCH; } @@ -3784,7 +3784,7 @@ CheckPassiveGrabsOnWindow( if (!activate) break; - else if (!GetXIType(event) && !GetCoreType(event)) + else if (!GetXIType(event->any.type) && !GetCoreType(event->any.type)) { ErrorF("Event type %d in CheckPassiveGrabsOnWindow is neither" " XI 1.x nor core\n", event->any.type); diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c index 46e3005fa..0c958cdf3 100644 --- a/hw/xfree86/common/xf86DGA.c +++ b/hw/xfree86/common/xf86DGA.c @@ -1037,7 +1037,7 @@ DGAProcessKeyboardEvent (ScreenPtr pScreen, DGAEvent *event, DeviceIntPtr keybd) if (pScreenPriv->client) { dgaEvent de; - de.u.u.type = *XDGAEventBase + GetCoreType((InternalEvent*)&ev); + de.u.u.type = *XDGAEventBase + GetCoreType(ev.type); de.u.u.detail = event->detail; de.u.event.time = event->time; de.u.event.dx = event->dx; @@ -1091,7 +1091,7 @@ DGAProcessPointerEvent (ScreenPtr pScreen, DGAEvent *event, DeviceIntPtr mouse) dgaEvent de; int coreEquiv; - coreEquiv = GetCoreType((InternalEvent*)&ev); + coreEquiv = GetCoreType(ev.type); de.u.u.type = *XDGAEventBase + coreEquiv; de.u.u.detail = event->detail; diff --git a/include/eventconvert.h b/include/eventconvert.h index b000abc4b..571a51109 100644 --- a/include/eventconvert.h +++ b/include/eventconvert.h @@ -27,14 +27,15 @@ #include #include "input.h" #include "events.h" +#include "eventstr.h" #define FP1616(integral, frac) ((integral) * (1 << 16) + (frac) * (1 << 16)) _X_EXPORT int EventToCore(InternalEvent *event, xEvent **core, int *count); _X_EXPORT int EventToXI(InternalEvent *ev, xEvent **xi, int *count); _X_EXPORT int EventToXI2(InternalEvent *ev, xEvent **xi); -_X_INTERNAL int GetCoreType(InternalEvent* ev); -_X_INTERNAL int GetXIType(InternalEvent* ev); -_X_INTERNAL int GetXI2Type(InternalEvent* ev); +_X_INTERNAL int GetCoreType(enum EventType type); +_X_INTERNAL int GetXIType(enum EventType type); +_X_INTERNAL int GetXI2Type(enum EventType type); #endif /* _EVENTCONVERT_H_ */ diff --git a/test/xi2/protocol-eventconvert.c b/test/xi2/protocol-eventconvert.c index dce1c50c4..e2037f911 100644 --- a/test/xi2/protocol-eventconvert.c +++ b/test/xi2/protocol-eventconvert.c @@ -59,7 +59,7 @@ static void test_values_XIRawEvent(RawDeviceEvent *in, xXIRawEvent *out, assert(out->type == GenericEvent); assert(out->extension == 0); /* IReqCode defaults to 0 */ - assert(out->evtype == GetXI2Type((InternalEvent*)in)); + assert(out->evtype == GetXI2Type(in->type)); assert(out->time == in->time); assert(out->detail == in->detail.button); assert(out->deviceid == in->deviceid); @@ -305,7 +305,7 @@ static void test_values_XIDeviceEvent(DeviceEvent *in, xXIDeviceEvent *out, } assert(out->extension == 0); /* IReqCode defaults to 0 */ - assert(out->evtype == GetXI2Type((InternalEvent*)in)); + assert(out->evtype == GetXI2Type(in->type)); assert(out->time == in->time); assert(out->detail == in->detail.button); assert(out->length >= 12); @@ -662,7 +662,7 @@ static void test_values_XIDeviceChangedEvent(DeviceChangedEvent *in, assert(out->type == GenericEvent); assert(out->extension == 0); /* IReqCode defaults to 0 */ - assert(out->evtype == GetXI2Type((InternalEvent*)in)); + assert(out->evtype == GetXI2Type(in->type)); assert(out->time == in->time); assert(out->deviceid == in->deviceid); assert(out->sourceid == in->sourceid); -- cgit v1.2.3 From 79d09647d878e66721a778979a9eb1f4bba5f8d6 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Mon, 12 Dec 2011 16:49:33 -0800 Subject: Use const cast in BitIsOn macro to avoid angering gcc Fixes gcc warnings such as: inpututils.c: In function 'valuator_mask_isset': inpututils.c:498:5: warning: cast discards qualifiers from pointer target type inpututils.c: In function 'CountBits': inpututils.c:613:9: warning: cast discards qualifiers from pointer target type Signed-off-by: Alan Coopersmith Reviewed-by: Jamey Sharp Reviewed-by: Peter Hutterer --- include/inputstr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include') diff --git a/include/inputstr.h b/include/inputstr.h index 5634f3cfc..6af7264c3 100644 --- a/include/inputstr.h +++ b/include/inputstr.h @@ -57,7 +57,7 @@ SOFTWARE. #include "geext.h" #include "privates.h" -#define BitIsOn(ptr, bit) (!!(((BYTE *) (ptr))[(bit)>>3] & (1 << ((bit) & 7)))) +#define BitIsOn(ptr, bit) (!!(((const BYTE *) (ptr))[(bit)>>3] & (1 << ((bit) & 7)))) #define SetBit(ptr, bit) (((BYTE *) (ptr))[(bit)>>3] |= (1 << ((bit) & 7))) #define ClearBit(ptr, bit) (((BYTE *)(ptr))[(bit)>>3] &= ~(1 << ((bit) & 7))) extern _X_EXPORT int CountBits(const uint8_t *mask, int len); -- cgit v1.2.3 From 7e2207548b3173afc9accb5ccd532c181a7b94ed Mon Sep 17 00:00:00 2001 From: Chase Douglas Date: Wed, 7 Dec 2011 20:32:28 +1000 Subject: include: Add an InputLevel enum Currently unused, but will be in the future. Signed-off-by: Chase Douglas Reviewed-by: Peter Hutterer Signed-off-by: Peter Hutterer --- include/eventconvert.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'include') diff --git a/include/eventconvert.h b/include/eventconvert.h index 571a51109..bb45eefef 100644 --- a/include/eventconvert.h +++ b/include/eventconvert.h @@ -31,6 +31,12 @@ #define FP1616(integral, frac) ((integral) * (1 << 16) + (frac) * (1 << 16)) +enum InputLevel { + CORE, + XI, + XI2, +}; + _X_EXPORT int EventToCore(InternalEvent *event, xEvent **core, int *count); _X_EXPORT int EventToXI(InternalEvent *ev, xEvent **xi, int *count); _X_EXPORT int EventToXI2(InternalEvent *ev, xEvent **xi); -- cgit v1.2.3 From 93945b0a74aa8156a88f52b8ba77f1210042f396 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 5 Dec 2011 18:42:05 +1000 Subject: dix: split grab event conversion and delivery into a helper function Effective functional change: XI2 events are checked with XACE now. DeliverOneGrabbedEvent is exported for future use by touch events. Signed-off-by: Peter Hutterer Reviewed-by: Chase Douglas --- dix/events.c | 144 +++++++++++++++++++++++++++++----------------------------- include/dix.h | 5 ++ 2 files changed, 77 insertions(+), 72 deletions(-) (limited to 'include') diff --git a/dix/events.c b/dix/events.c index 705b07995..37039c6cf 100644 --- a/dix/events.c +++ b/dix/events.c @@ -4061,6 +4061,75 @@ unwind: return; } + +int +DeliverOneGrabbedEvent(InternalEvent *event, DeviceIntPtr dev, enum InputLevel level) +{ + SpritePtr pSprite = dev->spriteInfo->sprite; + int rc; + xEvent *xE = NULL; + int count = 0; + int deliveries = 0; + Mask mask; + GrabInfoPtr grabinfo = &dev->deviceGrab; + GrabPtr grab = grabinfo->grab; + Mask filter; + + switch(level) + { + case XI2: + rc = EventToXI2(event, &xE); + count = 1; + if (rc == Success) + { + int evtype = xi2_get_type(xE); + mask = xi2mask_isset(grab->xi2mask, dev, evtype); + filter = 1; + } + break; + case XI: + if (grabinfo->fromPassiveGrab && grabinfo->implicitGrab) + mask = grab->deviceMask; + else + mask = grab->eventMask; + rc = EventToXI(event, &xE, &count); + if (rc == Success) + filter = GetEventFilter(dev, xE); + break; + case CORE: + rc = EventToCore(event, &xE, &count); + mask = grab->eventMask; + if (rc == Success) + filter = GetEventFilter(dev, xE); + break; + default: + BUG_WARN_MSG(1, "Invalid input level %d\n", level); + return 0; + } + + if (rc == Success) + { + FixUpEventFromWindow(pSprite, xE, grab->window, None, TRUE); + if (XaceHook(XACE_SEND_ACCESS, 0, dev, + grab->window, xE, count) || + XaceHook(XACE_RECEIVE_ACCESS, rClient(grab), + grab->window, xE, count)) + deliveries = 1; /* don't send, but pretend we did */ + else if (level != CORE || !IsInterferingGrab(rClient(grab), dev, xE)) + { + deliveries = TryClientEvents(rClient(grab), dev, + xE, count, mask, filter, + grab); + } + } else + BUG_WARN_MSG(rc != BadMatch, "%s: conversion to mode %d failed on %d with %d\n", + dev->name, level, event->any.type, rc); + + free(xE); + return deliveries; +} + + /** * Deliver an event from a device that is currently grabbed. Uses * DeliverDeviceEvents() for further delivery if a ownerEvents is set on the @@ -4080,10 +4149,6 @@ DeliverGrabbedEvent(InternalEvent *event, DeviceIntPtr thisDev, DeviceIntPtr dev; SpritePtr pSprite = thisDev->spriteInfo->sprite; BOOL sendCore = FALSE; - int rc, count = 0; - xEvent *xi = NULL; - xEvent *xi2 = NULL; - xEvent *core = NULL; grabinfo = &thisDev->deviceGrab; grab = grabinfo->grab; @@ -4119,88 +4184,27 @@ DeliverGrabbedEvent(InternalEvent *event, DeviceIntPtr thisDev, } if (!deliveries) { - Mask mask; - /* XXX: In theory, we could pass the internal events through to * everything and only convert just before hitting the wire. We can't * do that yet, so DGE is the last stop for internal events. From here * onwards, we deal with core/XI events. */ - mask = grab->eventMask; - sendCore = (IsMaster(thisDev) && thisDev->coreEvents); /* try core event */ if (sendCore && grab->grabtype == GRABTYPE_CORE) { - rc = EventToCore(event, &core, &count); - if (rc == Success) - { - FixUpEventFromWindow(pSprite, core, grab->window, None, TRUE); - if (XaceHook(XACE_SEND_ACCESS, 0, thisDev, - grab->window, core, count) || - XaceHook(XACE_RECEIVE_ACCESS, rClient(grab), - grab->window, core, count)) - deliveries = 1; /* don't send, but pretend we did */ - else if (!IsInterferingGrab(rClient(grab), thisDev, core)) - { - deliveries = TryClientEvents(rClient(grab), thisDev, - core, count, mask, - GetEventFilter(thisDev, core), - grab); - } - } else - BUG_WARN_MSG(rc != BadMatch, "%s: Core conversion failed on %d with %d\n", - thisDev->name, event->any.type, rc); + deliveries = DeliverOneGrabbedEvent(event, thisDev, CORE); } if (!deliveries) { - rc = EventToXI2(event, &xi2); - if (rc == Success) - { - int evtype = xi2_get_type(xi2); - mask = xi2mask_isset(grab->xi2mask, thisDev, evtype); - /* try XI2 event */ - FixUpEventFromWindow(pSprite, xi2, grab->window, None, TRUE); - /* XXX: XACE */ - deliveries = TryClientEvents(rClient(grab), thisDev, xi2, 1, mask, 1, grab); - } else - BUG_WARN_MSG(rc != BadMatch, "%s: XI2 conversion failed on %d with %d\n", - thisDev->name, event->any.type, rc); + deliveries = DeliverOneGrabbedEvent(event, thisDev, XI2); } if (!deliveries) { - rc = EventToXI(event, &xi, &count); - if (rc == Success) - { - /* try XI event */ - if (grabinfo->fromPassiveGrab && - grabinfo->implicitGrab) - mask = grab->deviceMask; - else - mask = grab->eventMask; - - FixUpEventFromWindow(pSprite, xi, grab->window, None, TRUE); - - if (XaceHook(XACE_SEND_ACCESS, 0, thisDev, - grab->window, xi, count) || - XaceHook(XACE_RECEIVE_ACCESS, rClient(grab), - grab->window, xi, count)) - deliveries = 1; /* don't send, but pretend we did */ - else - { - deliveries = - TryClientEvents(rClient(grab), thisDev, - xi, count, - mask, - GetEventFilter(thisDev, xi), - grab); - } - } else - BUG_WARN_MSG(rc != BadMatch, "%s: XI conversion failed on %d with %d\n", - thisDev->name, event->any.type, rc); + deliveries = DeliverOneGrabbedEvent(event, thisDev, XI); } if (deliveries && (event->any.type == ET_Motion)) @@ -4233,10 +4237,6 @@ DeliverGrabbedEvent(InternalEvent *event, DeviceIntPtr thisDev, } } - free(core); - free(xi); - free(xi2); - return deliveries; } diff --git a/include/dix.h b/include/dix.h index cfbfa1f41..9b9dc4bf3 100644 --- a/include/dix.h +++ b/include/dix.h @@ -400,6 +400,11 @@ extern int DeliverDeviceEvents( WindowPtr /* stopAt */, DeviceIntPtr /* dev */); +extern int DeliverOneGrabbedEvent( + InternalEvent* /* event*/, + DeviceIntPtr /* dev */, + enum InputLevel /* level */); + extern void InitializeSprite( DeviceIntPtr /* pDev */, WindowPtr /* pWin */); -- cgit v1.2.3 From c53651dabc66aeb9882819a404a799a364f00a29 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 6 Dec 2011 12:57:38 +1000 Subject: dix: move EventDeliveryState into a header file, we'll need it elsewhere Signed-off-by: Peter Hutterer Reviewed-by: Chase Douglas --- dix/events.c | 7 ------- include/input.h | 7 +++++++ 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'include') diff --git a/dix/events.c b/dix/events.c index 6e015fea2..12c167824 100644 --- a/dix/events.c +++ b/dix/events.c @@ -2014,13 +2014,6 @@ ActivateImplicitGrab(DeviceIntPtr dev, ClientPtr client, WindowPtr win, return TRUE; } -enum EventDeliveryState { - EVENT_DELIVERED, /**< Event has been delivered to a client */ - EVENT_NOT_DELIVERED, /**< Event was not delivered to any client */ - EVENT_SKIP, /**< Event can be discarded by the caller */ - EVENT_REJECTED, /**< Event was rejected for delivery to the client */ -}; - /** * Attempt event delivery to the client owning the window. */ diff --git a/include/input.h b/include/input.h index 917e92f8a..de2a75d62 100644 --- a/include/input.h +++ b/include/input.h @@ -560,6 +560,13 @@ extern int EventIsDeliverable(DeviceIntPtr dev, InternalEvent* event, #define EVENT_XI2_MASK (1 << 3) /**< XI2 mask set on window */ /* @} */ +enum EventDeliveryState { + EVENT_DELIVERED, /**< Event has been delivered to a client */ + EVENT_NOT_DELIVERED, /**< Event was not delivered to any client */ + EVENT_SKIP, /**< Event can be discarded by the caller */ + EVENT_REJECTED, /**< Event was rejected for delivery to the client */ +}; + /* Implemented by the DDX. */ extern _X_EXPORT int NewInputDeviceRequest( InputOption *options, -- cgit v1.2.3 From 80816366aa77f1730a1b6ddabfa55a946d76d494 Mon Sep 17 00:00:00 2001 From: Chase Douglas Date: Fri, 25 Nov 2011 13:57:03 -0800 Subject: dix: Split ActivatePassiveGrab() from CheckPassiveGrab() The changed logic means we don't require the explicit grab = NULL setting and early exit anymore. Not 100% of it, but if we see that message pop up in a log we know it's broken. Signed-off-by: Chase Douglas Reviewed-by: Peter Hutterer Signed-off-by: Peter Hutterer --- dix/events.c | 199 +++++++++++++++++++++++++++++++------------------------- include/input.h | 2 + 2 files changed, 112 insertions(+), 89 deletions(-) (limited to 'include') diff --git a/dix/events.c b/dix/events.c index 09d38a1e5..3041ae601 100644 --- a/dix/events.c +++ b/dix/events.c @@ -3634,39 +3634,129 @@ BorderSizeNotEmpty(DeviceIntPtr pDev, WindowPtr pWin) return FALSE; } +/** + * Activate the given passive grab. If the grab is activated successfully, the + * event has been delivered to the client. + * + * @param device The device of the event to check. + * @param grab The grab to check. + * @param event The current device event. + * + * @return Whether the grab has been activated. + */ +Bool +ActivatePassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event) +{ + SpritePtr pSprite = device->spriteInfo->sprite; + GrabInfoPtr grabinfo = &device->deviceGrab; + xEvent *xE = NULL; + int count; + int rc; + + if (!GetXIType(event->any.type) && !GetCoreType(event->any.type)) + { + ErrorF("Event type %d in CheckPassiveGrabsOnWindow is neither" + " XI 1.x nor core\n", event->any.type); + return FALSE; + } + + /* The only consumers of corestate are Xi 1.x and core events, which + * are guaranteed to come from DeviceEvents. */ + if (grab->grabtype == GRABTYPE_XI || grab->grabtype == GRABTYPE_CORE) + { + DeviceIntPtr gdev; + + event->device_event.corestate &= 0x1f00; + + if (grab->grabtype == GRABTYPE_CORE) + gdev = GetMaster(device, KEYBOARD_OR_FLOAT); + else + gdev = grab->modifierDevice; + + if (gdev && gdev->key && gdev->key->xkbInfo) + event->device_event.corestate |= + gdev->key->xkbInfo->state.grab_mods & (~0x1f00); + } + + if (grab->grabtype == GRABTYPE_CORE) + { + rc = EventToCore(event, &xE, &count); + if (rc != Success) + { + BUG_WARN_MSG(rc != BadMatch,"[dix] %s: core conversion failed" + "(%d, %d).\n", device->name, event->any.type, rc); + return FALSE; + } + } else if (grab->grabtype == GRABTYPE_XI2) + { + rc = EventToXI2(event, &xE); + if (rc != Success) + { + if (rc != BadMatch) + BUG_WARN_MSG(rc != BadMatch,"[dix] %s: XI2 conversion failed" + "(%d, %d).\n", device->name, event->any.type, rc); + return FALSE; + } + count = 1; + } else + { + rc = EventToXI(event, &xE, &count); + if (rc != Success) + { + if (rc != BadMatch) + BUG_WARN_MSG(rc != BadMatch,"[dix] %s: XI conversion failed" + "(%d, %d).\n", device->name, event->any.type, rc); + return FALSE; + } + } + + (*grabinfo->ActivateGrab)(device, grab, currentTime, TRUE); + + if (xE) + { + FixUpEventFromWindow(pSprite, xE, grab->window, None, TRUE); + + /* XXX: XACE? */ + TryClientEvents(rClient(grab), device, xE, count, + GetEventFilter(device, xE), + GetEventFilter(device, xE), grab); + } + + if (grabinfo->sync.state == FROZEN_NO_EVENT) + { + if (!grabinfo->sync.event) + grabinfo->sync.event = calloc(1, sizeof(DeviceEvent)); + *grabinfo->sync.event = event->device_event; + grabinfo->sync.state = FROZEN_WITH_EVENT; + } + + free(xE); + return TRUE; +} + /** * Check an individual grab against an event to determine if a passive grab * should be activated. - * If activate is true and a passive grab is found, it will be activated, and - * the event will be delivered to the client. * * @param device The device of the event to check. * @param grab The grab to check. * @param event The current device event. * @param checkCore Check for core grabs too. - * @param activate Whether to activate a matching grab. * @param tempGrab A pre-allocated temporary grab record for matching. This * must have the window and device values filled in. - * @param[out] grab_return The modified value of grab, to be used in the - * caller for grab activation if a this function returns TRUE. May be NULL. * * @return Whether the grab matches the event. */ static Bool CheckPassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event, - Bool checkCore, Bool activate, GrabPtr tempGrab, GrabPtr *grab_return) + Bool checkCore, GrabPtr tempGrab) { static const int CORE_MATCH = 0x1; static const int XI_MATCH = 0x2; static const int XI2_MATCH = 0x4; - SpritePtr pSprite = device->spriteInfo->sprite; - GrabInfoPtr grabinfo; DeviceIntPtr gdev; XkbSrvInfoPtr xkbi = NULL; - xEvent *xE = NULL; int match = 0; - int count; - int rc; gdev = grab->modifierDevice; if (grab->grabtype == GRABTYPE_CORE) @@ -3715,8 +3805,6 @@ CheckPassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event, !BorderSizeNotEmpty(device, grab->confineTo)))) return FALSE; - *grab_return = grab; - grabinfo = &device->deviceGrab; /* In some cases a passive core grab may exist, but the client * already has a core grab on some other device. In this case we * must not get the grab, otherwise we may never ungrab the @@ -3759,79 +3847,6 @@ CheckPassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event, return FALSE; } - if (!activate) - return TRUE; - else if (!GetXIType(event->any.type) && !GetCoreType(event->any.type)) - { - ErrorF("Event type %d in CheckPassiveGrabsOnWindow is neither" - " XI 1.x nor core\n", event->any.type); - *grab_return = NULL; - return TRUE; - } - - /* The only consumers of corestate are Xi 1.x and core events, which - * are guaranteed to come from DeviceEvents. */ - if (match & (XI_MATCH | CORE_MATCH)) - { - event->device_event.corestate &= 0x1f00; - event->device_event.corestate |= tempGrab->modifiersDetail.exact & - (~0x1f00); - } - - if (match & CORE_MATCH) - { - rc = EventToCore(event, &xE, &count); - if (rc != Success) - { - if (rc != BadMatch) - ErrorF("[dix] %s: core conversion failed in CPGFW " - "(%d, %d).\n", device->name, event->any.type, rc); - return TRUE; - } - } else if (match & XI2_MATCH) - { - rc = EventToXI2(event, &xE); - if (rc != Success) - { - if (rc != BadMatch) - ErrorF("[dix] %s: XI2 conversion failed in CPGFW " - "(%d, %d).\n", device->name, event->any.type, rc); - return TRUE; - } - count = 1; - } else - { - rc = EventToXI(event, &xE, &count); - if (rc != Success) - { - if (rc != BadMatch) - ErrorF("[dix] %s: XI conversion failed in CPGFW " - "(%d, %d).\n", device->name, event->any.type, rc); - return TRUE; - } - } - - (*grabinfo->ActivateGrab)(device, grab, currentTime, TRUE); - - if (xE) - { - FixUpEventFromWindow(pSprite, xE, grab->window, None, TRUE); - - /* XXX: XACE? */ - TryClientEvents(rClient(grab), device, xE, count, - GetEventFilter(device, xE), - GetEventFilter(device, xE), grab); - } - - if (grabinfo->sync.state == FROZEN_NO_EVENT) - { - if (!grabinfo->sync.event) - grabinfo->sync.event = calloc(1, sizeof(DeviceEvent)); - *grabinfo->sync.event = event->device_event; - grabinfo->sync.state = FROZEN_WITH_EVENT; - } - - free(xE); return TRUE; } @@ -3887,9 +3902,15 @@ CheckPassiveGrabsOnWindow( tempGrab->next = NULL; for (; grab; grab = grab->next) - if (CheckPassiveGrab(device, grab, event, checkCore, activate, - tempGrab, &grab)) - break; + { + if (!CheckPassiveGrab(device, grab, event, checkCore, tempGrab)) + continue; + + if (activate && !ActivatePassiveGrab(device, grab, event)) + continue; + + break; + } FreeGrab(tempGrab); return grab; diff --git a/include/input.h b/include/input.h index de2a75d62..cbfaba714 100644 --- a/include/input.h +++ b/include/input.h @@ -548,6 +548,8 @@ void FixUpEventFromWindow(SpritePtr pSprite, extern WindowPtr XYToWindow(SpritePtr pSprite, int x, int y); extern int EventIsDeliverable(DeviceIntPtr dev, InternalEvent* event, WindowPtr win); +extern Bool ActivatePassiveGrab(DeviceIntPtr dev, GrabPtr grab, + InternalEvent *ev); /** * Masks specifying the type of event to deliver for an InternalEvent; used * by EventIsDeliverable. -- cgit v1.2.3 From 1d01e861b69d7ca8fe2335270b8286bc115fb6e9 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 8 Dec 2011 10:22:26 +1000 Subject: dix: split out core state and event state setting into helper functions no functional changes. Signed-off-by: Peter Hutterer Reviewed-by: Chase Douglas --- Xi/exevents.c | 31 +++---------------------------- dix/inpututils.c | 39 +++++++++++++++++++++++++++++++++++++++ include/inpututils.h | 2 ++ 3 files changed, 44 insertions(+), 28 deletions(-) (limited to 'include') diff --git a/Xi/exevents.c b/Xi/exevents.c index 798377670..874759959 100644 --- a/Xi/exevents.c +++ b/Xi/exevents.c @@ -915,7 +915,7 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device) int key = 0, rootX, rootY; ButtonClassPtr b; int ret = 0; - int corestate, i; + int corestate; DeviceIntPtr mouse = NULL, kbd = NULL; DeviceEvent *event = &ev->device_event; @@ -945,33 +945,8 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device) mouse = NULL; } - /* core state needs to be assembled BEFORE the device is updated. */ - corestate = (kbd && kbd->key) ? XkbStateFieldFromRec(&kbd->key->xkbInfo->state) : 0; - corestate |= (mouse && mouse->button) ? (mouse->button->state) : 0; - - for (i = 0; mouse && mouse->button && i < mouse->button->numButtons; i++) - if (BitIsOn(mouse->button->down, i)) - SetBit(event->buttons, i); - - if (kbd && kbd->key) - { - XkbStatePtr state; - /* we need the state before the event happens */ - if (event->type == ET_KeyPress || event->type == ET_KeyRelease) - state = &kbd->key->xkbInfo->prev_state; - else - state = &kbd->key->xkbInfo->state; - - event->mods.base = state->base_mods; - event->mods.latched = state->latched_mods; - event->mods.locked = state->locked_mods; - event->mods.effective = state->mods; - - event->group.base = state->base_group; - event->group.latched = state->latched_group; - event->group.locked = state->locked_group; - event->group.effective = state->group; - } + corestate = event_get_corestate(mouse, kbd); + event_set_state(mouse, kbd, event); ret = UpdateDeviceState(device, event); if (ret == DONT_PROCESS) diff --git a/dix/inpututils.c b/dix/inpututils.c index 60f9fa0a8..5844daf9c 100644 --- a/dix/inpututils.c +++ b/dix/inpututils.c @@ -657,6 +657,45 @@ void init_device_event(DeviceEvent *event, DeviceIntPtr dev, Time ms) event->sourceid = dev->id; } +int event_get_corestate(DeviceIntPtr mouse, DeviceIntPtr kbd) +{ + int corestate; + /* core state needs to be assembled BEFORE the device is updated. */ + corestate = (kbd && kbd->key) ? XkbStateFieldFromRec(&kbd->key->xkbInfo->state) : 0; + corestate |= (mouse && mouse->button) ? (mouse->button->state) : 0; + return corestate; +} + +void event_set_state(DeviceIntPtr mouse, DeviceIntPtr kbd, DeviceEvent *event) +{ + int i; + + for (i = 0; mouse && mouse->button && i < mouse->button->numButtons; i++) + if (BitIsOn(mouse->button->down, i)) + SetBit(event->buttons, i); + + if (kbd && kbd->key) + { + XkbStatePtr state; + /* we need the state before the event happens */ + if (event->type == ET_KeyPress || event->type == ET_KeyRelease) + state = &kbd->key->xkbInfo->prev_state; + else + state = &kbd->key->xkbInfo->state; + + event->mods.base = state->base_mods; + event->mods.latched = state->latched_mods; + event->mods.locked = state->locked_mods; + event->mods.effective = state->mods; + + event->group.base = state->base_group; + event->group.latched = state->latched_group; + event->group.locked = state->locked_group; + event->group.effective = state->group; + } +} + + Bool point_on_screen(ScreenPtr pScreen, int x, int y) { diff --git a/include/inpututils.h b/include/inpututils.h index 5f9dfecc3..96ad6df4d 100644 --- a/include/inpututils.h +++ b/include/inpututils.h @@ -40,6 +40,8 @@ struct _ValuatorMask { extern void verify_internal_event(const InternalEvent *ev); extern void init_device_event(DeviceEvent *event, DeviceIntPtr dev, Time ms); +extern int event_get_corestate(DeviceIntPtr mouse, DeviceIntPtr kbd); +extern void event_set_state(DeviceIntPtr mouse, DeviceIntPtr kbd, DeviceEvent *event); FP3232 double_to_fp3232(double in); FP1616 double_to_fp1616(double in); -- cgit v1.2.3 From cd56bd7b3ee34a4b10eb3a57a6e94cac7512167a Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 8 Dec 2011 14:59:06 +1000 Subject: Add GrabIsPointerGrab and GrabIsKeyboardGrab helpers No functional changes Signed-off-by: Peter Hutterer Reviewed-by: Chase Douglas --- Xi/exevents.c | 8 ++------ dix/grabs.c | 17 +++++++++++++++++ include/dixgrabs.h | 2 ++ 3 files changed, 21 insertions(+), 6 deletions(-) (limited to 'include') diff --git a/Xi/exevents.c b/Xi/exevents.c index 874759959..405a8b1a0 100644 --- a/Xi/exevents.c +++ b/Xi/exevents.c @@ -1001,9 +1001,7 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device) case ET_KeyRelease: if (grab && device->deviceGrab.fromPassiveGrab && (key == device->deviceGrab.activatingKey) && - (device->deviceGrab.grab->type == KeyPress || - device->deviceGrab.grab->type == DeviceKeyPress || - device->deviceGrab.grab->type == XI_KeyPress)) + GrabIsKeyboardGrab(device->deviceGrab.grab)) deactivateDeviceGrab = TRUE; break; case ET_ButtonPress: @@ -1023,9 +1021,7 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device) event->detail.button = b->map[key]; if (grab && !b->buttonsDown && device->deviceGrab.fromPassiveGrab && - (device->deviceGrab.grab->type == ButtonPress || - device->deviceGrab.grab->type == DeviceButtonPress || - device->deviceGrab.grab->type == XI_ButtonPress)) + GrabIsPointerGrab(device->deviceGrab.grab)) deactivateDeviceGrab = TRUE; default: break; diff --git a/dix/grabs.c b/dix/grabs.c index aced130a7..0157b785a 100644 --- a/dix/grabs.c +++ b/dix/grabs.c @@ -60,6 +60,7 @@ SOFTWARE. #include "dixgrabs.h" #include "xace.h" #include "exevents.h" +#include "exglobals.h" #include "inpututils.h" #define BITMASK(i) (((Mask)1) << ((i) & 31)) @@ -737,3 +738,19 @@ DeletePassiveGrabFromList(GrabPtr pMinuendGrab) #undef UPDATE } + +Bool +GrabIsPointerGrab(GrabPtr grab) +{ + return (grab->type == ButtonPress || + grab->type == DeviceButtonPress || + grab->type == XI_ButtonPress); +} + +Bool +GrabIsKeyboardGrab(GrabPtr grab) +{ + return (grab->type == KeyPress || + grab->type == DeviceKeyPress || + grab->type == XI_KeyPress); +} diff --git a/include/dixgrabs.h b/include/dixgrabs.h index 65ff45d1d..ea8877072 100644 --- a/include/dixgrabs.h +++ b/include/dixgrabs.h @@ -64,4 +64,6 @@ extern _X_EXPORT int AddPassiveGrabToList( extern _X_EXPORT Bool DeletePassiveGrabFromList( GrabPtr /* pMinuendGrab */); +extern Bool GrabIsPointerGrab(GrabPtr grab); +extern Bool GrabIsKeyboardGrab(GrabPtr grab); #endif /* DIXGRABS_H */ -- cgit v1.2.3 From 218752bdc5d9323d1e6202e762573a925cf8a4eb Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 8 Dec 2011 14:27:01 +1000 Subject: input: replace GRABTYPE_* with the InputLevel enums They achieve the same thing, re-use the more generic InputLevel so we can convert to/fro easier. Signed-off-by: Peter Hutterer Reviewed-by: Chase Douglas --- Xi/exevents.c | 26 +++---- Xi/grabdev.c | 2 +- Xi/grabdevb.c | 4 +- Xi/grabdevk.c | 4 +- Xi/ungrdev.c | 2 +- Xi/ungrdevb.c | 2 +- Xi/ungrdevk.c | 2 +- Xi/xigrabdev.c | 4 +- Xi/xipassivegrab.c | 8 +- dix/events.c | 64 ++++++++-------- dix/grabs.c | 30 ++++---- include/dixgrabs.h | 2 +- include/eventconvert.h | 6 -- include/exevents.h | 6 +- include/input.h | 6 ++ include/inputstr.h | 8 +- test/input.c | 130 ++++++++++++++++---------------- test/xi2/protocol-xipassivegrabdevice.c | 4 +- 18 files changed, 152 insertions(+), 158 deletions(-) (limited to 'include') diff --git a/Xi/exevents.c b/Xi/exevents.c index 405a8b1a0..45a289add 100644 --- a/Xi/exevents.c +++ b/Xi/exevents.c @@ -1389,9 +1389,9 @@ DeviceFocusEvent(DeviceIntPtr dev, int type, int mode, int detail, int CheckGrabValues(ClientPtr client, GrabParameters* param) { - if (param->grabtype != GRABTYPE_CORE && - param->grabtype != GRABTYPE_XI && - param->grabtype != GRABTYPE_XI2) + if (param->grabtype != CORE && + param->grabtype != XI && + param->grabtype != XI2) { ErrorF("[Xi] grabtype is invalid. This is a bug.\n"); return BadImplementation; @@ -1408,7 +1408,7 @@ CheckGrabValues(ClientPtr client, GrabParameters* param) return BadValue; } - if (param->grabtype != GRABTYPE_XI2 && (param->modifiers != AnyModifier) && + if (param->grabtype != XI2 && (param->modifiers != AnyModifier) && (param->modifiers & ~AllModifiersMask)) { client->errorValue = param->modifiers; return BadValue; @@ -1423,7 +1423,7 @@ CheckGrabValues(ClientPtr client, GrabParameters* param) int GrabButton(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device, - int button, GrabParameters *param, GrabType grabtype, + int button, GrabParameters *param, enum InputLevel grabtype, GrabMask *mask) { WindowPtr pWin, confineTo; @@ -1463,9 +1463,9 @@ GrabButton(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device, if (rc != Success) return rc; - if (grabtype == GRABTYPE_XI) + if (grabtype == XI) type = DeviceButtonPress; - else if (grabtype == GRABTYPE_XI2) + else if (grabtype == XI2) type = XI_ButtonPress; grab = CreateGrab(client->index, dev, modifier_device, pWin, grabtype, @@ -1476,12 +1476,12 @@ GrabButton(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device, } /** - * Grab the given key. If grabtype is GRABTYPE_XI, the key is a keycode. If - * grabtype is GRABTYPE_XI2, the key is a keysym. + * Grab the given key. If grabtype is XI, the key is a keycode. If + * grabtype is XI2, the key is a keysym. */ int GrabKey(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device, - int key, GrabParameters *param, GrabType grabtype, GrabMask *mask) + int key, GrabParameters *param, enum InputLevel grabtype, GrabMask *mask) { WindowPtr pWin; GrabPtr grab; @@ -1494,7 +1494,7 @@ GrabKey(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device, return rc; if ((dev->id != XIAllDevices && dev->id != XIAllMasterDevices) && k == NULL) return BadMatch; - if (grabtype == GRABTYPE_XI) + if (grabtype == XI) { if ((key > k->xkbInfo->desc->max_key_code || key < k->xkbInfo->desc->min_key_code) @@ -1503,7 +1503,7 @@ GrabKey(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device, return BadValue; } type = DeviceKeyPress; - } else if (grabtype == GRABTYPE_XI2) + } else if (grabtype == XI2) type = XI_KeyPress; rc = dixLookupWindow(&pWin, param->grabWindow, client, DixSetAttrAccess); @@ -1558,7 +1558,7 @@ GrabWindow(ClientPtr client, DeviceIntPtr dev, int type, if (rc != Success) return rc; - grab = CreateGrab(client->index, dev, dev, pWin, GRABTYPE_XI2, + grab = CreateGrab(client->index, dev, dev, pWin, XI2, mask, param, (type == XIGrabtypeEnter) ? XI_Enter : XI_FocusIn, 0, NULL, cursor); diff --git a/Xi/grabdev.c b/Xi/grabdev.c index 4572c33fc..8fd114e60 100644 --- a/Xi/grabdev.c +++ b/Xi/grabdev.c @@ -130,7 +130,7 @@ ProcXGrabDevice(ClientPtr client) rc = GrabDevice(client, dev, stuff->other_devices_mode, stuff->this_device_mode, stuff->grabWindow, stuff->ownerEvents, stuff->time, - &mask, GRABTYPE_XI, None, None, + &mask, XI, None, None, &rep.status); if (rc != Success) diff --git a/Xi/grabdevb.c b/Xi/grabdevb.c index 2897d410b..dda0da8bb 100644 --- a/Xi/grabdevb.c +++ b/Xi/grabdevb.c @@ -137,7 +137,7 @@ ProcXGrabDeviceButton(ClientPtr client) return ret; memset(¶m, 0, sizeof(param)); - param.grabtype = GRABTYPE_XI; + param.grabtype = XI; param.ownerEvents = stuff->ownerEvents; param.this_device_mode = stuff->this_device_mode; param.other_devices_mode = stuff->other_devices_mode; @@ -146,7 +146,7 @@ ProcXGrabDeviceButton(ClientPtr client) mask.xi = tmp[stuff->grabbed_device].mask; ret = GrabButton(client, dev, mdev, stuff->button, ¶m, - GRABTYPE_XI, &mask); + XI, &mask); return ret; } diff --git a/Xi/grabdevk.c b/Xi/grabdevk.c index cedd90d9c..61ab43a20 100644 --- a/Xi/grabdevk.c +++ b/Xi/grabdevk.c @@ -135,7 +135,7 @@ ProcXGrabDeviceKey(ClientPtr client) memset(¶m, 0, sizeof(param)); - param.grabtype = GRABTYPE_XI; + param.grabtype = XI; param.ownerEvents = stuff->ownerEvents; param.this_device_mode = stuff->this_device_mode; param.other_devices_mode = stuff->other_devices_mode; @@ -143,7 +143,7 @@ ProcXGrabDeviceKey(ClientPtr client) param.modifiers = stuff->modifiers; mask.xi = tmp[stuff->grabbed_device].mask; - ret = GrabKey(client, dev, mdev, stuff->key, ¶m, GRABTYPE_XI, &mask); + ret = GrabKey(client, dev, mdev, stuff->key, ¶m, XI, &mask); return ret; } diff --git a/Xi/ungrdev.c b/Xi/ungrdev.c index bc66cfc4b..58c1f57ef 100644 --- a/Xi/ungrdev.c +++ b/Xi/ungrdev.c @@ -102,7 +102,7 @@ ProcXUngrabDevice(ClientPtr client) time = ClientTimeToServerTime(stuff->time); if ((CompareTimeStamps(time, currentTime) != LATER) && (CompareTimeStamps(time, dev->deviceGrab.grabTime) != EARLIER) && - (grab) && SameClient(grab, client) && grab->grabtype == GRABTYPE_XI) + (grab) && SameClient(grab, client) && grab->grabtype == XI) (*dev->deviceGrab.DeactivateGrab) (dev); return Success; } diff --git a/Xi/ungrdevb.c b/Xi/ungrdevb.c index 628024870..0ba395cf3 100644 --- a/Xi/ungrdevb.c +++ b/Xi/ungrdevb.c @@ -134,7 +134,7 @@ ProcXUngrabDeviceButton(ClientPtr client) temporaryGrab->device = dev; temporaryGrab->window = pWin; temporaryGrab->type = DeviceButtonPress; - temporaryGrab->grabtype = GRABTYPE_XI; + temporaryGrab->grabtype = XI; temporaryGrab->modifierDevice = mdev; temporaryGrab->modifiersDetail.exact = stuff->modifiers; temporaryGrab->modifiersDetail.pMask = NULL; diff --git a/Xi/ungrdevk.c b/Xi/ungrdevk.c index b0d83cbbc..8785989b0 100644 --- a/Xi/ungrdevk.c +++ b/Xi/ungrdevk.c @@ -141,7 +141,7 @@ ProcXUngrabDeviceKey(ClientPtr client) temporaryGrab->device = dev; temporaryGrab->window = pWin; temporaryGrab->type = DeviceKeyPress; - temporaryGrab->grabtype = GRABTYPE_XI; + temporaryGrab->grabtype = XI; temporaryGrab->modifierDevice = mdev; temporaryGrab->modifiersDetail.exact = stuff->modifiers; temporaryGrab->modifiersDetail.pMask = NULL; diff --git a/Xi/xigrabdev.c b/Xi/xigrabdev.c index 1cfbf243b..2b3055004 100644 --- a/Xi/xigrabdev.c +++ b/Xi/xigrabdev.c @@ -96,7 +96,7 @@ ProcXIGrabDevice(ClientPtr client) stuff->owner_events, stuff->time, &mask, - GRABTYPE_XI2, + XI2, stuff->cursor, None /* confineTo */, &status); @@ -148,7 +148,7 @@ ProcXIUngrabDevice(ClientPtr client) time = ClientTimeToServerTime(stuff->time); if ((CompareTimeStamps(time, currentTime) != LATER) && (CompareTimeStamps(time, dev->deviceGrab.grabTime) != EARLIER) && - (grab) && SameClient(grab, client) && grab->grabtype == GRABTYPE_XI2) + (grab) && SameClient(grab, client) && grab->grabtype == XI2) (*dev->deviceGrab.DeactivateGrab) (dev); return Success; diff --git a/Xi/xipassivegrab.c b/Xi/xipassivegrab.c index 4860757fc..713a1654e 100644 --- a/Xi/xipassivegrab.c +++ b/Xi/xipassivegrab.c @@ -139,7 +139,7 @@ ProcXIPassiveGrabDevice(ClientPtr client) rep.num_modifiers = 0; memset(¶m, 0, sizeof(param)); - param.grabtype = GRABTYPE_XI2; + param.grabtype = XI2; param.ownerEvents = stuff->owner_events; param.this_device_mode = stuff->grab_mode; param.other_devices_mode = stuff->paired_device_mode; @@ -183,11 +183,11 @@ ProcXIPassiveGrabDevice(ClientPtr client) { case XIGrabtypeButton: status = GrabButton(client, dev, mod_dev, stuff->detail, - ¶m, GRABTYPE_XI2, &mask); + ¶m, XI2, &mask); break; case XIGrabtypeKeycode: status = GrabKey(client, dev, mod_dev, stuff->detail, - ¶m, GRABTYPE_XI2, &mask); + ¶m, XI2, &mask); break; case XIGrabtypeEnter: case XIGrabtypeFocusIn: @@ -313,7 +313,7 @@ ProcXIPassiveUngrabDevice(ClientPtr client) case XIGrabtypeEnter: tempGrab->type = XI_Enter; break; case XIGrabtypeFocusIn: tempGrab->type = XI_FocusIn; break; } - tempGrab->grabtype = GRABTYPE_XI2; + tempGrab->grabtype = XI2; tempGrab->modifierDevice = mod_dev; tempGrab->modifiersDetail.pMask = NULL; tempGrab->detail.exact = stuff->detail; diff --git a/dix/events.c b/dix/events.c index 9703ca9cd..db86f5167 100644 --- a/dix/events.c +++ b/dix/events.c @@ -1484,7 +1484,7 @@ ActivatePointerGrab(DeviceIntPtr mouse, GrabPtr grab, Bool isPassive = autoGrab & ~ImplicitGrabMask; /* slave devices need to float for the duration of the grab. */ - if (grab->grabtype == GRABTYPE_XI2 && + if (grab->grabtype == XI2 && !(autoGrab & ImplicitGrabMask) && !IsMaster(mouse)) DetachFromMaster(mouse); @@ -1543,7 +1543,7 @@ DeactivatePointerGrab(DeviceIntPtr mouse) if (grab->cursor) FreeCursor(grab->cursor, (Cursor)0); - if (!wasImplicit && grab->grabtype == GRABTYPE_XI2) + if (!wasImplicit && grab->grabtype == XI2) ReattachToOldMaster(mouse); ComputeFreezes(); @@ -1561,7 +1561,7 @@ ActivateKeyboardGrab(DeviceIntPtr keybd, GrabPtr grab, TimeStamp time, Bool pass WindowPtr oldWin; /* slave devices need to float for the duration of the grab. */ - if (grab->grabtype == GRABTYPE_XI2 && + if (grab->grabtype == XI2 && !(passive & ImplicitGrabMask) && !IsMaster(keybd)) DetachFromMaster(keybd); @@ -1616,7 +1616,7 @@ DeactivateKeyboardGrab(DeviceIntPtr keybd) } DoFocusEvents(keybd, grab->window, focusWin, NotifyUngrab); - if (!wasImplicit && grab->grabtype == GRABTYPE_XI2) + if (!wasImplicit && grab->grabtype == XI2) ReattachToOldMaster(keybd); ComputeFreezes(); @@ -1974,14 +1974,14 @@ ActivateImplicitGrab(DeviceIntPtr dev, ClientPtr client, WindowPtr win, GrabPtr tempGrab; OtherInputMasks *inputMasks; CARD8 type = event->u.u.type; - GrabType grabtype; + enum InputLevel grabtype; if (type == ButtonPress) - grabtype = GRABTYPE_CORE; + grabtype = CORE; else if (type == DeviceButtonPress) - grabtype = GRABTYPE_XI; + grabtype = XI; else if ((type = xi2_get_type(event)) == XI_ButtonPress) - grabtype = GRABTYPE_XI2; + grabtype = XI2; else return FALSE; @@ -3656,13 +3656,13 @@ ActivatePassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event) /* The only consumers of corestate are Xi 1.x and core events, which * are guaranteed to come from DeviceEvents. */ - if (grab->grabtype == GRABTYPE_XI || grab->grabtype == GRABTYPE_CORE) + if (grab->grabtype == XI || grab->grabtype == CORE) { DeviceIntPtr gdev; event->device_event.corestate &= 0x1f00; - if (grab->grabtype == GRABTYPE_CORE) + if (grab->grabtype == CORE) gdev = GetMaster(device, KEYBOARD_OR_FLOAT); else gdev = grab->modifierDevice; @@ -3672,7 +3672,7 @@ ActivatePassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event) gdev->key->xkbInfo->state.grab_mods & (~0x1f00); } - if (grab->grabtype == GRABTYPE_CORE) + if (grab->grabtype == CORE) { rc = EventToCore(event, &xE, &count); if (rc != Success) @@ -3681,7 +3681,7 @@ ActivatePassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event) "(%d, %d).\n", device->name, event->any.type, rc); return FALSE; } - } else if (grab->grabtype == GRABTYPE_XI2) + } else if (grab->grabtype == XI2) { rc = EventToXI2(event, &xE); if (rc != Success) @@ -3737,7 +3737,7 @@ CoreGrabInterferes(DeviceIntPtr device, GrabPtr grab) for (other = inputInfo.devices; other; other = other->next) { GrabPtr othergrab = other->deviceGrab.grab; - if (othergrab && othergrab->grabtype == GRABTYPE_CORE && + if (othergrab && othergrab->grabtype == CORE && SameClient(grab, rClient(othergrab)) && ((IsPointerDevice(grab->device) && IsPointerDevice(othergrab->device)) || @@ -3781,18 +3781,18 @@ MatchForType(const GrabPtr grab, GrabPtr tmp, enum InputLevel level, int event_t switch(level) { case XI2: - grabtype = GRABTYPE_XI2; + grabtype = XI2; evtype = GetXI2Type(event_type); BUG_WARN(!evtype); match = XI2_MATCH; break; case XI: - grabtype = GRABTYPE_XI; + grabtype = XI; evtype = GetXIType(event_type); match = XI_MATCH; break; case CORE: - grabtype = GRABTYPE_CORE; + grabtype = CORE; evtype = GetCoreType(event_type); match = CORE_MATCH; ignore_device = TRUE; @@ -3830,10 +3830,10 @@ CheckPassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event, enum MatchFlags match = 0; gdev = grab->modifierDevice; - if (grab->grabtype == GRABTYPE_CORE) + if (grab->grabtype == CORE) { gdev = GetMaster(device, KEYBOARD_OR_FLOAT); - } else if (grab->grabtype == GRABTYPE_XI2) + } else if (grab->grabtype == XI2) { /* if the device is an attached slave device, gdev must be the * attached master keyboard. Since the slave may have been @@ -3868,7 +3868,7 @@ CheckPassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event, * device. */ - if (grab->grabtype == GRABTYPE_CORE) + if (grab->grabtype == CORE) { /* A passive grab may have been created for a different device than it is assigned to at this point in time. @@ -4272,7 +4272,7 @@ DeliverGrabbedEvent(InternalEvent *event, DeviceIntPtr thisDev, sendCore = (IsMaster(thisDev) && thisDev->coreEvents); /* try core event */ - if (sendCore && grab->grabtype == GRABTYPE_CORE) + if (sendCore && grab->grabtype == CORE) { deliveries = DeliverOneGrabbedEvent(event, thisDev, CORE); } @@ -4970,7 +4970,7 @@ ProcGrabPointer(ClientPtr client) rc = GrabDevice(client, device, stuff->pointerMode, stuff->keyboardMode, stuff->grabWindow, stuff->ownerEvents, stuff->time, - &mask, GRABTYPE_CORE, stuff->cursor, + &mask, CORE, stuff->cursor, stuff->confineTo, &rep.status); if (rc != Success) return rc; @@ -5178,9 +5178,9 @@ GrabDevice(ClientPtr client, DeviceIntPtr dev, tempGrab->ownerEvents = ownerEvents; tempGrab->keyboardMode = keyboard_mode; tempGrab->pointerMode = pointer_mode; - if (grabtype == GRABTYPE_CORE) + if (grabtype == CORE) tempGrab->eventMask = mask->core; - else if (grabtype == GRABTYPE_XI) + else if (grabtype == XI) tempGrab->eventMask = mask->xi; else xi2mask_merge(tempGrab->xi2mask, mask->xi2mask); @@ -5217,7 +5217,7 @@ ProcGrabKeyboard(ClientPtr client) result = GrabDevice(client, keyboard, stuff->pointerMode, stuff->keyboardMode, stuff->grabWindow, stuff->ownerEvents, - stuff->time, &mask, GRABTYPE_CORE, None, None, + stuff->time, &mask, CORE, None, None, &rep.status); if (result != Success) @@ -5250,7 +5250,7 @@ ProcUngrabKeyboard(ClientPtr client) time = ClientTimeToServerTime(stuff->id); if ((CompareTimeStamps(time, currentTime) != LATER) && (CompareTimeStamps(time, device->deviceGrab.grabTime) != EARLIER) && - (grab) && SameClient(grab, client) && grab->grabtype == GRABTYPE_CORE) + (grab) && SameClient(grab, client) && grab->grabtype == CORE) (*device->deviceGrab.DeactivateGrab)(device); return Success; } @@ -5542,7 +5542,7 @@ ProcUngrabKey(ClientPtr client) tempGrab->modifiersDetail.pMask = NULL; tempGrab->modifierDevice = keybd; tempGrab->type = KeyPress; - tempGrab->grabtype = GRABTYPE_CORE; + tempGrab->grabtype = CORE; tempGrab->detail.exact = stuff->key; tempGrab->detail.pMask = NULL; tempGrab->next = NULL; @@ -5575,7 +5575,7 @@ ProcGrabKey(ClientPtr client) REQUEST_SIZE_MATCH(xGrabKeyReq); memset(¶m, 0, sizeof(param)); - param.grabtype = GRABTYPE_CORE; + param.grabtype = CORE; param.ownerEvents = stuff->ownerEvents; param.this_device_mode = stuff->keyboardMode; param.other_devices_mode = stuff->pointerMode; @@ -5599,7 +5599,7 @@ ProcGrabKey(ClientPtr client) mask.core = (KeyPressMask | KeyReleaseMask); - grab = CreateGrab(client->index, keybd, keybd, pWin, GRABTYPE_CORE, &mask, + grab = CreateGrab(client->index, keybd, keybd, pWin, CORE, &mask, ¶m, KeyPress, stuff->key, NullWindow, NullCursor); if (!grab) return BadAlloc; @@ -5690,7 +5690,7 @@ ProcGrabButton(ClientPtr client) return rc; memset(¶m, 0, sizeof(param)); - param.grabtype = GRABTYPE_CORE; + param.grabtype = CORE; param.ownerEvents = stuff->ownerEvents; param.this_device_mode = stuff->keyboardMode; param.other_devices_mode = stuff->pointerMode; @@ -5699,7 +5699,7 @@ ProcGrabButton(ClientPtr client) mask.core = stuff->eventMask; grab = CreateGrab(client->index, ptr, modifierDevice, pWin, - GRABTYPE_CORE, &mask, ¶m, ButtonPress, + CORE, &mask, ¶m, ButtonPress, stuff->button, confineTo, cursor); if (!grab) return BadAlloc; @@ -5744,7 +5744,7 @@ ProcUngrabButton(ClientPtr client) tempGrab->modifierDevice = GetMaster(ptr, MASTER_KEYBOARD); tempGrab->type = ButtonPress; tempGrab->detail.exact = stuff->button; - tempGrab->grabtype = GRABTYPE_CORE; + tempGrab->grabtype = CORE; tempGrab->detail.pMask = NULL; tempGrab->next = NULL; @@ -6151,7 +6151,7 @@ PickPointer(ClientPtr client) for(it = inputInfo.devices; it; it = it->next) { GrabPtr grab = it->deviceGrab.grab; - if (grab && grab->grabtype == GRABTYPE_CORE && SameClient(grab, client)) + if (grab && grab->grabtype == CORE && SameClient(grab, client)) { it = GetMaster(it, MASTER_POINTER); return it; /* Always return a core grabbed device */ diff --git a/dix/grabs.c b/dix/grabs.c index 0157b785a..6f8b39e49 100644 --- a/dix/grabs.c +++ b/dix/grabs.c @@ -81,8 +81,8 @@ PrintDeviceGrabInfo(DeviceIntPtr dev) ErrorF("Active grab 0x%lx (%s) on device '%s' (%d):", (unsigned long) grab->resource, - (grab->grabtype == GRABTYPE_XI2) ? "xi2" : - ((grab->grabtype == GRABTYPE_CORE) ? "core" : "xi1"), + (grab->grabtype == XI2) ? "xi2" : + ((grab->grabtype == CORE) ? "core" : "xi1"), dev->name, dev->id); client = clients[CLIENT_ID(grab->resource)]; @@ -111,18 +111,18 @@ PrintDeviceGrabInfo(DeviceIntPtr dev) devGrab->sync.frozen ? "frozen" : "thawed", devGrab->sync.state); - if (grab->grabtype == GRABTYPE_CORE) + if (grab->grabtype == CORE) { ErrorF(" core event mask 0x%lx\n", (unsigned long) grab->eventMask); } - else if (grab->grabtype == GRABTYPE_XI) + else if (grab->grabtype == XI) { ErrorF(" xi1 event mask 0x%lx\n", devGrab->implicitGrab ? (unsigned long) grab->deviceMask : (unsigned long) grab->eventMask); } - else if (grab->grabtype == GRABTYPE_XI2) + else if (grab->grabtype == XI2) { for (i = 0; i < xi2mask_num_masks(grab->xi2mask); i++) { @@ -206,7 +206,7 @@ CreateGrab( DeviceIntPtr device, DeviceIntPtr modDevice, WindowPtr window, - GrabType grabtype, + enum InputLevel grabtype, GrabMask *mask, GrabParameters *param, int type, @@ -238,7 +238,7 @@ CreateGrab( grab->cursor = cursor; grab->next = NULL; - if (grabtype == GRABTYPE_XI2) + if (grabtype == XI2) xi2mask_merge(grab->xi2mask, mask->xi2mask); if (cursor) cursor->refcnt++; @@ -410,7 +410,7 @@ DetailSupersedesSecond( static Bool GrabSupersedesSecond(GrabPtr pFirstGrab, GrabPtr pSecondGrab) { - unsigned int any_modifier = (pFirstGrab->grabtype == GRABTYPE_XI2) ? + unsigned int any_modifier = (pFirstGrab->grabtype == XI2) ? (unsigned int)XIAnyModifier : (unsigned int)AnyModifier; if (!DetailSupersedesSecond(pFirstGrab->modifiersDetail, @@ -441,14 +441,14 @@ GrabSupersedesSecond(GrabPtr pFirstGrab, GrabPtr pSecondGrab) Bool GrabMatchesSecond(GrabPtr pFirstGrab, GrabPtr pSecondGrab, Bool ignoreDevice) { - unsigned int any_modifier = (pFirstGrab->grabtype == GRABTYPE_XI2) ? + unsigned int any_modifier = (pFirstGrab->grabtype == XI2) ? (unsigned int)XIAnyModifier : (unsigned int)AnyModifier; if (pFirstGrab->grabtype != pSecondGrab->grabtype) return FALSE; - if (pFirstGrab->grabtype == GRABTYPE_XI2) + if (pFirstGrab->grabtype == XI2) { if (pFirstGrab->device == inputInfo.all_devices || pSecondGrab->device == inputInfo.all_devices) @@ -500,7 +500,7 @@ GrabMatchesSecond(GrabPtr pFirstGrab, GrabPtr pSecondGrab, Bool ignoreDevice) static Bool GrabsAreIdentical(GrabPtr pFirstGrab, GrabPtr pSecondGrab) { - unsigned int any_modifier = (pFirstGrab->grabtype == GRABTYPE_XI2) ? + unsigned int any_modifier = (pFirstGrab->grabtype == XI2) ? (unsigned int)XIAnyModifier : (unsigned int)AnyModifier; @@ -550,7 +550,7 @@ AddPassiveGrabToList(ClientPtr client, GrabPtr pGrab) for (grab = wPassiveGrabs(pGrab->window); grab; grab = grab->next) { - if (GrabMatchesSecond(pGrab, grab, (pGrab->grabtype == GRABTYPE_CORE))) + if (GrabMatchesSecond(pGrab, grab, (pGrab->grabtype == CORE))) { if (CLIENT_BITS(pGrab->resource) != CLIENT_BITS(grab->resource)) { @@ -628,9 +628,9 @@ DeletePassiveGrabFromList(GrabPtr pMinuendGrab) return FALSE; } - any_modifier = (pMinuendGrab->grabtype == GRABTYPE_XI2) ? + any_modifier = (pMinuendGrab->grabtype == XI2) ? (unsigned int)XIAnyModifier : (unsigned int)AnyModifier; - any_key = (pMinuendGrab->grabtype == GRABTYPE_XI2) ? + any_key = (pMinuendGrab->grabtype == XI2) ? (unsigned int)XIAnyKeycode : (unsigned int)AnyKey; ndels = nadds = nups = 0; ok = TRUE; @@ -640,7 +640,7 @@ DeletePassiveGrabFromList(GrabPtr pMinuendGrab) { if ((CLIENT_BITS(grab->resource) != CLIENT_BITS(pMinuendGrab->resource)) || !GrabMatchesSecond(grab, pMinuendGrab, - (grab->grabtype == GRABTYPE_CORE))) + (grab->grabtype == CORE))) continue; if (GrabSupersedesSecond(pMinuendGrab, grab)) { diff --git a/include/dixgrabs.h b/include/dixgrabs.h index ea8877072..4dd5eae6d 100644 --- a/include/dixgrabs.h +++ b/include/dixgrabs.h @@ -40,7 +40,7 @@ extern GrabPtr CreateGrab( DeviceIntPtr /* device */, DeviceIntPtr /* modDevice */, WindowPtr /* window */, - GrabType /* grabtype */, + enum InputLevel /* grabtype */, GrabMask * /* mask */, struct _GrabParameters * /* param */, int /* type */, diff --git a/include/eventconvert.h b/include/eventconvert.h index bb45eefef..571a51109 100644 --- a/include/eventconvert.h +++ b/include/eventconvert.h @@ -31,12 +31,6 @@ #define FP1616(integral, frac) ((integral) * (1 << 16) + (frac) * (1 << 16)) -enum InputLevel { - CORE, - XI, - XI2, -}; - _X_EXPORT int EventToCore(InternalEvent *event, xEvent **core, int *count); _X_EXPORT int EventToXI(InternalEvent *ev, xEvent **xi, int *count); _X_EXPORT int EventToXI2(InternalEvent *ev, xEvent **xi); diff --git a/include/exevents.h b/include/exevents.h index 12ea37885..0ab04f525 100644 --- a/include/exevents.h +++ b/include/exevents.h @@ -159,7 +159,7 @@ typedef struct _XIClientRec { typedef struct _GrabParameters { - int grabtype; /* GRABTYPE_CORE, etc. */ + int grabtype; /* CORE, etc. */ unsigned int ownerEvents; unsigned int this_device_mode; unsigned int other_devices_mode; @@ -200,7 +200,7 @@ GrabButton( DeviceIntPtr /* modifier_device */, int /* button */, GrabParameters* /* param */, - GrabType /* grabtype */, + enum InputLevel /* grabtype */, GrabMask* /* eventMask */); extern int @@ -210,7 +210,7 @@ GrabKey( DeviceIntPtr /* modifier_device */, int /* key */, GrabParameters* /* param */, - GrabType /* grabtype */, + enum InputLevel /* grabtype */, GrabMask* /* eventMask */); extern int diff --git a/include/input.h b/include/input.h index cbfaba714..7c5ad3cd9 100644 --- a/include/input.h +++ b/include/input.h @@ -102,6 +102,12 @@ SOFTWARE. #define RevertToFollowKeyboard 3 #endif +enum InputLevel { + CORE, + XI, + XI2, +}; + typedef unsigned long Leds; typedef struct _OtherClients *OtherClientsPtr; typedef struct _InputClients *InputClientsPtr; diff --git a/include/inputstr.h b/include/inputstr.h index 5634f3cfc..754a3f850 100644 --- a/include/inputstr.h +++ b/include/inputstr.h @@ -167,12 +167,6 @@ typedef struct _DetailRec { /* Grab details may be bit masks */ Mask *pMask; } DetailRec; -typedef enum { - GRABTYPE_CORE, - GRABTYPE_XI, - GRABTYPE_XI2 -} GrabType; - union _GrabMask { Mask core; Mask xi; @@ -200,7 +194,7 @@ typedef struct _GrabRec { unsigned ownerEvents:1; unsigned keyboardMode:1; unsigned pointerMode:1; - GrabType grabtype; + enum InputLevel grabtype; CARD8 type; /* event type */ DetailRec modifiersDetail; DeviceIntPtr modifierDevice; diff --git a/test/input.c b/test/input.c index c44e5f613..d27b3f0c0 100644 --- a/test/input.c +++ b/test/input.c @@ -148,7 +148,7 @@ static void dix_check_grab_values(void) memset(&client, 0, sizeof(client)); - param.grabtype = GRABTYPE_CORE; + param.grabtype = CORE; param.this_device_mode = GrabModeSync; param.other_devices_mode = GrabModeSync; param.modifiers = AnyModifier; @@ -531,22 +531,22 @@ static void dix_grab_matching(void) memset(&b, 0, sizeof(b)); /* different grabtypes must fail */ - a.grabtype = GRABTYPE_CORE; - b.grabtype = GRABTYPE_XI2; + a.grabtype = CORE; + b.grabtype = XI2; rc = GrabMatchesSecond(&a, &b, FALSE); assert(rc == FALSE); rc = GrabMatchesSecond(&b, &a, FALSE); assert(rc == FALSE); - a.grabtype = GRABTYPE_XI; - b.grabtype = GRABTYPE_XI2; + a.grabtype = XI; + b.grabtype = XI2; rc = GrabMatchesSecond(&a, &b, FALSE); assert(rc == FALSE); rc = GrabMatchesSecond(&b, &a, FALSE); assert(rc == FALSE); - a.grabtype = GRABTYPE_XI; - b.grabtype = GRABTYPE_CORE; + a.grabtype = XI; + b.grabtype = CORE; rc = GrabMatchesSecond(&a, &b, FALSE); assert(rc == FALSE); rc = GrabMatchesSecond(&b, &a, FALSE); @@ -568,8 +568,8 @@ static void dix_grab_matching(void) inputInfo.all_devices = &xi_all_devices; inputInfo.all_master_devices = &xi_all_master_devices; - a.grabtype = GRABTYPE_XI2; - b.grabtype = GRABTYPE_XI2; + a.grabtype = XI2; + b.grabtype = XI2; a.device = &dev1; b.device = &dev2; @@ -598,8 +598,8 @@ static void dix_grab_matching(void) assert(rc == FALSE); /* ignoreDevice FALSE must fail for different devices for CORE and XI */ - a.grabtype = GRABTYPE_XI; - b.grabtype = GRABTYPE_XI; + a.grabtype = XI; + b.grabtype = XI; a.device = &dev1; b.device = &dev2; a.modifierDevice = &dev1; @@ -607,8 +607,8 @@ static void dix_grab_matching(void) rc = GrabMatchesSecond(&a, &b, FALSE); assert(rc == FALSE); - a.grabtype = GRABTYPE_CORE; - b.grabtype = GRABTYPE_CORE; + a.grabtype = CORE; + b.grabtype = CORE; a.device = &dev1; b.device = &dev2; a.modifierDevice = &dev1; @@ -618,8 +618,8 @@ static void dix_grab_matching(void) /* ignoreDevice FALSE must fail for different modifier devices for CORE * and XI */ - a.grabtype = GRABTYPE_XI; - b.grabtype = GRABTYPE_XI; + a.grabtype = XI; + b.grabtype = XI; a.device = &dev1; b.device = &dev1; a.modifierDevice = &dev1; @@ -627,8 +627,8 @@ static void dix_grab_matching(void) rc = GrabMatchesSecond(&a, &b, FALSE); assert(rc == FALSE); - a.grabtype = GRABTYPE_CORE; - b.grabtype = GRABTYPE_CORE; + a.grabtype = CORE; + b.grabtype = CORE; a.device = &dev1; b.device = &dev1; a.modifierDevice = &dev1; @@ -637,8 +637,8 @@ static void dix_grab_matching(void) assert(rc == FALSE); /* different event type must fail */ - a.grabtype = GRABTYPE_XI2; - b.grabtype = GRABTYPE_XI2; + a.grabtype = XI2; + b.grabtype = XI2; a.device = &dev1; b.device = &dev1; a.modifierDevice = &dev1; @@ -650,8 +650,8 @@ static void dix_grab_matching(void) rc = GrabMatchesSecond(&a, &b, TRUE); assert(rc == FALSE); - a.grabtype = GRABTYPE_CORE; - b.grabtype = GRABTYPE_CORE; + a.grabtype = CORE; + b.grabtype = CORE; a.device = &dev1; b.device = &dev1; a.modifierDevice = &dev1; @@ -663,8 +663,8 @@ static void dix_grab_matching(void) rc = GrabMatchesSecond(&a, &b, TRUE); assert(rc == FALSE); - a.grabtype = GRABTYPE_XI; - b.grabtype = GRABTYPE_XI; + a.grabtype = XI; + b.grabtype = XI; a.device = &dev1; b.device = &dev1; a.modifierDevice = &dev1; @@ -677,8 +677,8 @@ static void dix_grab_matching(void) assert(rc == FALSE); /* different modifiers must fail */ - a.grabtype = GRABTYPE_XI2; - b.grabtype = GRABTYPE_XI2; + a.grabtype = XI2; + b.grabtype = XI2; a.device = &dev1; b.device = &dev1; a.modifierDevice = &dev1; @@ -692,23 +692,23 @@ static void dix_grab_matching(void) rc = GrabMatchesSecond(&b, &a, FALSE); assert(rc == FALSE); - a.grabtype = GRABTYPE_CORE; - b.grabtype = GRABTYPE_CORE; + a.grabtype = CORE; + b.grabtype = CORE; rc = GrabMatchesSecond(&a, &b, FALSE); assert(rc == FALSE); rc = GrabMatchesSecond(&b, &a, FALSE); assert(rc == FALSE); - a.grabtype = GRABTYPE_XI; - b.grabtype = GRABTYPE_XI; + a.grabtype = XI; + b.grabtype = XI; rc = GrabMatchesSecond(&a, &b, FALSE); assert(rc == FALSE); rc = GrabMatchesSecond(&b, &a, FALSE); assert(rc == FALSE); /* AnyModifier must fail for XI2 */ - a.grabtype = GRABTYPE_XI2; - b.grabtype = GRABTYPE_XI2; + a.grabtype = XI2; + b.grabtype = XI2; a.modifiersDetail.exact = AnyModifier; b.modifiersDetail.exact = 1; rc = GrabMatchesSecond(&a, &b, FALSE); @@ -717,8 +717,8 @@ static void dix_grab_matching(void) assert(rc == FALSE); /* XIAnyModifier must fail for CORE and XI */ - a.grabtype = GRABTYPE_XI; - b.grabtype = GRABTYPE_XI; + a.grabtype = XI; + b.grabtype = XI; a.modifiersDetail.exact = XIAnyModifier; b.modifiersDetail.exact = 1; rc = GrabMatchesSecond(&a, &b, FALSE); @@ -726,8 +726,8 @@ static void dix_grab_matching(void) rc = GrabMatchesSecond(&b, &a, FALSE); assert(rc == FALSE); - a.grabtype = GRABTYPE_CORE; - b.grabtype = GRABTYPE_CORE; + a.grabtype = CORE; + b.grabtype = CORE; a.modifiersDetail.exact = XIAnyModifier; b.modifiersDetail.exact = 1; rc = GrabMatchesSecond(&a, &b, FALSE); @@ -736,8 +736,8 @@ static void dix_grab_matching(void) assert(rc == FALSE); /* different detail must fail */ - a.grabtype = GRABTYPE_XI2; - b.grabtype = GRABTYPE_XI2; + a.grabtype = XI2; + b.grabtype = XI2; a.detail.exact = 1; b.detail.exact = 2; a.modifiersDetail.exact = 1; @@ -747,23 +747,23 @@ static void dix_grab_matching(void) rc = GrabMatchesSecond(&b, &a, FALSE); assert(rc == FALSE); - a.grabtype = GRABTYPE_XI; - b.grabtype = GRABTYPE_XI; + a.grabtype = XI; + b.grabtype = XI; rc = GrabMatchesSecond(&a, &b, FALSE); assert(rc == FALSE); rc = GrabMatchesSecond(&b, &a, FALSE); assert(rc == FALSE); - a.grabtype = GRABTYPE_CORE; - b.grabtype = GRABTYPE_CORE; + a.grabtype = CORE; + b.grabtype = CORE; rc = GrabMatchesSecond(&a, &b, FALSE); assert(rc == FALSE); rc = GrabMatchesSecond(&b, &a, FALSE); assert(rc == FALSE); /* detail of AnyModifier must fail */ - a.grabtype = GRABTYPE_XI2; - b.grabtype = GRABTYPE_XI2; + a.grabtype = XI2; + b.grabtype = XI2; a.detail.exact = AnyModifier; b.detail.exact = 1; a.modifiersDetail.exact = 1; @@ -773,23 +773,23 @@ static void dix_grab_matching(void) rc = GrabMatchesSecond(&b, &a, FALSE); assert(rc == FALSE); - a.grabtype = GRABTYPE_CORE; - b.grabtype = GRABTYPE_CORE; + a.grabtype = CORE; + b.grabtype = CORE; rc = GrabMatchesSecond(&a, &b, FALSE); assert(rc == FALSE); rc = GrabMatchesSecond(&b, &a, FALSE); assert(rc == FALSE); - a.grabtype = GRABTYPE_XI; - b.grabtype = GRABTYPE_XI; + a.grabtype = XI; + b.grabtype = XI; rc = GrabMatchesSecond(&a, &b, FALSE); assert(rc == FALSE); rc = GrabMatchesSecond(&b, &a, FALSE); assert(rc == FALSE); /* detail of XIAnyModifier must fail */ - a.grabtype = GRABTYPE_XI2; - b.grabtype = GRABTYPE_XI2; + a.grabtype = XI2; + b.grabtype = XI2; a.detail.exact = XIAnyModifier; b.detail.exact = 1; a.modifiersDetail.exact = 1; @@ -799,23 +799,23 @@ static void dix_grab_matching(void) rc = GrabMatchesSecond(&b, &a, FALSE); assert(rc == FALSE); - a.grabtype = GRABTYPE_CORE; - b.grabtype = GRABTYPE_CORE; + a.grabtype = CORE; + b.grabtype = CORE; rc = GrabMatchesSecond(&a, &b, FALSE); assert(rc == FALSE); rc = GrabMatchesSecond(&b, &a, FALSE); assert(rc == FALSE); - a.grabtype = GRABTYPE_XI; - b.grabtype = GRABTYPE_XI; + a.grabtype = XI; + b.grabtype = XI; rc = GrabMatchesSecond(&a, &b, FALSE); assert(rc == FALSE); rc = GrabMatchesSecond(&b, &a, FALSE); assert(rc == FALSE); /* XIAnyModifier or AnyModifer must succeed */ - a.grabtype = GRABTYPE_XI2; - b.grabtype = GRABTYPE_XI2; + a.grabtype = XI2; + b.grabtype = XI2; a.detail.exact = 1; b.detail.exact = 1; a.modifiersDetail.exact = XIAnyModifier; @@ -825,8 +825,8 @@ static void dix_grab_matching(void) rc = GrabMatchesSecond(&b, &a, FALSE); assert(rc == TRUE); - a.grabtype = GRABTYPE_CORE; - b.grabtype = GRABTYPE_CORE; + a.grabtype = CORE; + b.grabtype = CORE; a.detail.exact = 1; b.detail.exact = 1; a.modifiersDetail.exact = AnyModifier; @@ -836,8 +836,8 @@ static void dix_grab_matching(void) rc = GrabMatchesSecond(&b, &a, FALSE); assert(rc == TRUE); - a.grabtype = GRABTYPE_XI; - b.grabtype = GRABTYPE_XI; + a.grabtype = XI; + b.grabtype = XI; a.detail.exact = 1; b.detail.exact = 1; a.modifiersDetail.exact = AnyModifier; @@ -848,8 +848,8 @@ static void dix_grab_matching(void) assert(rc == TRUE); /* AnyKey or XIAnyKeycode must succeed */ - a.grabtype = GRABTYPE_XI2; - b.grabtype = GRABTYPE_XI2; + a.grabtype = XI2; + b.grabtype = XI2; a.detail.exact = XIAnyKeycode; b.detail.exact = 1; a.modifiersDetail.exact = 1; @@ -859,8 +859,8 @@ static void dix_grab_matching(void) rc = GrabMatchesSecond(&b, &a, FALSE); assert(rc == TRUE); - a.grabtype = GRABTYPE_CORE; - b.grabtype = GRABTYPE_CORE; + a.grabtype = CORE; + b.grabtype = CORE; a.detail.exact = AnyKey; b.detail.exact = 1; a.modifiersDetail.exact = 1; @@ -870,8 +870,8 @@ static void dix_grab_matching(void) rc = GrabMatchesSecond(&b, &a, FALSE); assert(rc == TRUE); - a.grabtype = GRABTYPE_XI; - b.grabtype = GRABTYPE_XI; + a.grabtype = XI; + b.grabtype = XI; a.detail.exact = AnyKey; b.detail.exact = 1; a.modifiersDetail.exact = 1; diff --git a/test/xi2/protocol-xipassivegrabdevice.c b/test/xi2/protocol-xipassivegrabdevice.c index 1ffcdee97..89ffc3d29 100644 --- a/test/xi2/protocol-xipassivegrabdevice.c +++ b/test/xi2/protocol-xipassivegrabdevice.c @@ -49,7 +49,7 @@ struct test_data { } testdata; int __wrap_GrabButton(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device, - int button, GrabParameters *param, GrabType grabtype, + int button, GrabParameters *param, enum InputLevel grabtype, GrabMask *mask); static void reply_XIPassiveGrabDevice_data(ClientPtr client, int len, char *data, void *userdata); @@ -69,7 +69,7 @@ int __wrap_dixLookupWindow(WindowPtr *win, XID id, ClientPtr client, Mask access } int __wrap_GrabButton(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device, - int button, GrabParameters *param, GrabType grabtype, + int button, GrabParameters *param, enum InputLevel grabtype, GrabMask *mask) { /* Fail every odd modifier */ -- cgit v1.2.3 From a03fe819506fbcbfcb299d4919d16061603fd4ec Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 9 Dec 2011 18:02:49 +1000 Subject: dix: switch EventIsDeliverable to take the event type only Signed-off-by: Peter Hutterer Reviewed-by: Alan Coopersmith Reviewed-by: Chase Douglas --- dix/events.c | 12 ++++++------ include/input.h | 3 +-- 2 files changed, 7 insertions(+), 8 deletions(-) (limited to 'include') diff --git a/dix/events.c b/dix/events.c index 086f438fd..e98f7b2aa 100644 --- a/dix/events.c +++ b/dix/events.c @@ -2532,27 +2532,27 @@ FixUpEventFromWindow( * client. * * @param[in] dev The device this event is being sent for. - * @param[in] event The event that is to be sent. + * @param[in] evtype The event type of the event that is to be sent. * @param[in] win The current event window. * * @return Bitmask of ::EVENT_XI2_MASK, ::EVENT_XI1_MASK, ::EVENT_CORE_MASK, and * ::EVENT_DONT_PROPAGATE_MASK. */ int -EventIsDeliverable(DeviceIntPtr dev, InternalEvent* event, WindowPtr win) +EventIsDeliverable(DeviceIntPtr dev, int evtype, WindowPtr win) { int rc = 0; int filter = 0; int type; OtherInputMasks *inputMasks = wOtherInputMasks(win); - if ((type = GetXI2Type(event->any.type)) != 0) + if ((type = GetXI2Type(evtype)) != 0) { if (inputMasks && xi2mask_isset(inputMasks->xi2mask, dev, type)) rc |= EVENT_XI2_MASK; } - if ((type = GetXIType(event->any.type)) != 0) + if ((type = GetXIType(evtype)) != 0) { filter = GetEventFilterMask(dev, type); @@ -2568,7 +2568,7 @@ EventIsDeliverable(DeviceIntPtr dev, InternalEvent* event, WindowPtr win) } - if ((type = GetCoreType(event->any.type)) != 0) + if ((type = GetCoreType(evtype)) != 0) { filter = GetEventFilterMask(dev, type); @@ -2667,7 +2667,7 @@ DeliverDeviceEvents(WindowPtr pWin, InternalEvent *event, GrabPtr grab, while (pWin) { - if ((mask = EventIsDeliverable(dev, event, pWin))) + if ((mask = EventIsDeliverable(dev, event->any.type, pWin))) { /* XI2 events first */ if (mask & EVENT_XI2_MASK) diff --git a/include/input.h b/include/input.h index 7c5ad3cd9..fb24fd5ec 100644 --- a/include/input.h +++ b/include/input.h @@ -552,8 +552,7 @@ void FixUpEventFromWindow(SpritePtr pSprite, Window child, Bool calcChild); extern WindowPtr XYToWindow(SpritePtr pSprite, int x, int y); -extern int EventIsDeliverable(DeviceIntPtr dev, InternalEvent* event, - WindowPtr win); +extern int EventIsDeliverable(DeviceIntPtr dev, int evtype, WindowPtr win); extern Bool ActivatePassiveGrab(DeviceIntPtr dev, GrabPtr grab, InternalEvent *ev); /** -- cgit v1.2.3 From adf8a0d62c0643f4c44a3b6d2e3c6c9b02532915 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 9 Dec 2011 18:38:53 +1000 Subject: dix: move event filter retrieval helpers to inpututils.c No functional changes Signed-off-by: Peter Hutterer Reviewed-by: Alan Coopersmith Reviewed-by: Chase Douglas --- dix/events.c | 28 ++++++++-------------------- dix/inpututils.c | 19 +++++++++++++++++++ include/input.h | 1 - include/inpututils.h | 4 ++++ 4 files changed, 31 insertions(+), 21 deletions(-) (limited to 'include') diff --git a/dix/events.c b/dix/events.c index e98f7b2aa..357b8d1db 100644 --- a/dix/events.c +++ b/dix/events.c @@ -367,7 +367,7 @@ extern int DeviceMotionNotify; * time a button is pressed, the filter is modified to also contain the * matching ButtonXMotion mask. */ -static Mask filters[MAXDEVICES][128]; +Mask event_filters[MAXDEVICES][128]; static const Mask default_filter[128] = { @@ -408,18 +408,6 @@ static const Mask default_filter[128] = CantBeFiltered /* MappingNotify */ }; -static inline Mask -GetEventFilterMask(DeviceIntPtr dev, int evtype) -{ - return filters[dev ? dev->id : 0][evtype]; -} - -inline Mask -GetXI2EventFilterMask(int evtype) -{ - return (1 << (evtype % 8)); -} - /** * For the given event, return the matching event filter. This filter may then * be AND'ed with the selected event mask. @@ -441,9 +429,9 @@ GetEventFilter(DeviceIntPtr dev, xEvent *event) int evtype = 0; if (event->u.u.type != GenericEvent) - return GetEventFilterMask(dev, event->u.u.type); + return event_get_filter_from_type(dev, event->u.u.type); else if ((evtype = xi2_get_type(event))) - return GetXI2EventFilterMask(evtype); + return event_get_filter_from_xi2type(evtype); ErrorF("[dix] Unknown event type %d. No filter\n", event->u.u.type); return 0; } @@ -459,7 +447,7 @@ GetXI2MaskByte(XI2Mask *mask, DeviceIntPtr dev, int event_type) * for this mask anyway. */ if (xi2mask_isset(mask, dev, event_type)) - return GetXI2EventFilterMask(event_type); + return event_get_filter_from_xi2type(event_type); else return 0; } @@ -679,7 +667,7 @@ SetMaskForEvent(int deviceid, Mask mask, int event) { if (deviceid < 0 || deviceid >= MAXDEVICES) FatalError("SetMaskForEvent: bogus device id"); - filters[deviceid][event] = mask; + event_filters[deviceid][event] = mask; } void @@ -2554,7 +2542,7 @@ EventIsDeliverable(DeviceIntPtr dev, int evtype, WindowPtr win) if ((type = GetXIType(evtype)) != 0) { - filter = GetEventFilterMask(dev, type); + filter = event_get_filter_from_type(dev, type); /* Check for XI mask */ if (inputMasks && @@ -2570,7 +2558,7 @@ EventIsDeliverable(DeviceIntPtr dev, int evtype, WindowPtr win) if ((type = GetCoreType(evtype)) != 0) { - filter = GetEventFilterMask(dev, type); + filter = event_get_filter_from_type(dev, type); /* Check for core mask */ if ((win->deliverableEvents & filter) && @@ -5350,7 +5338,7 @@ InitEvents(void) inputInfo.pointer = (DeviceIntPtr)NULL; for (i = 0; i < MAXDEVICES; i++) { - memcpy(&filters[i], default_filter, sizeof(default_filter)); + memcpy(&event_filters[i], default_filter, sizeof(default_filter)); } syncEvents.replayDev = (DeviceIntPtr)NULL; diff --git a/dix/inpututils.c b/dix/inpututils.c index 5844daf9c..9232bdc29 100644 --- a/dix/inpututils.c +++ b/dix/inpututils.c @@ -695,6 +695,25 @@ void event_set_state(DeviceIntPtr mouse, DeviceIntPtr kbd, DeviceEvent *event) } } +/** + * Return the event filter mask for the given device and the given core or + * XI1 protocol type. + */ +Mask +event_get_filter_from_type(DeviceIntPtr dev, int evtype) +{ + return event_filters[dev ? dev->id : 0][evtype]; +} + +/** + * Return the event filter mask for the given device and the given core or + * XI2 protocol type. + */ +Mask +event_get_filter_from_xi2type(int evtype) +{ + return (1 << (evtype % 8)); +} Bool point_on_screen(ScreenPtr pScreen, int x, int y) diff --git a/include/input.h b/include/input.h index fb24fd5ec..bd12f6829 100644 --- a/include/input.h +++ b/include/input.h @@ -544,7 +544,6 @@ extern _X_EXPORT void FreeInputAttributes(InputAttributes *attrs); extern Mask GetEventMask(DeviceIntPtr dev, xEvent* ev, InputClientsPtr clients); extern Mask GetEventFilter(DeviceIntPtr dev, xEvent *event); extern Bool WindowXI2MaskIsset(DeviceIntPtr dev, WindowPtr win, xEvent* ev); -extern Mask GetXI2EventFilterMask(int evtype); extern int GetXI2MaskByte(XI2Mask *mask, DeviceIntPtr dev, int event_type); void FixUpEventFromWindow(SpritePtr pSprite, xEvent *xE, diff --git a/include/inpututils.h b/include/inpututils.h index 96ad6df4d..5aa60c2c1 100644 --- a/include/inpututils.h +++ b/include/inpututils.h @@ -32,6 +32,8 @@ #include "input.h" #include +extern Mask filters[MAXDEVICES][128]; + struct _ValuatorMask { int8_t last_bit; /* highest bit set in mask */ uint8_t mask[(MAX_VALUATORS + 7)/8]; @@ -42,6 +44,8 @@ extern void verify_internal_event(const InternalEvent *ev); extern void init_device_event(DeviceEvent *event, DeviceIntPtr dev, Time ms); extern int event_get_corestate(DeviceIntPtr mouse, DeviceIntPtr kbd); extern void event_set_state(DeviceIntPtr mouse, DeviceIntPtr kbd, DeviceEvent *event); +extern Mask event_get_filter_from_type(DeviceIntPtr dev, int evtype); +extern Mask event_get_filter_from_xi2type(int evtype); FP3232 double_to_fp3232(double in); FP1616 double_to_fp1616(double in); -- cgit v1.2.3 From f0de5e3990b70df9899b7dd17d7ee6ff7c768183 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Sun, 11 Dec 2011 07:31:43 +1000 Subject: dix: add a MAXEVENTS define for the number of core + extension events Not including GenericEvents Signed-off-by: Peter Hutterer Reviewed-by: Walter Harms Reviewed-by: Chase Douglas --- dix/events.c | 6 +++--- dix/extension.c | 3 +-- dix/tables.c | 2 +- include/inpututils.h | 2 +- include/misc.h | 2 ++ 5 files changed, 8 insertions(+), 7 deletions(-) (limited to 'include') diff --git a/dix/events.c b/dix/events.c index 357b8d1db..653813966 100644 --- a/dix/events.c +++ b/dix/events.c @@ -367,9 +367,9 @@ extern int DeviceMotionNotify; * time a button is pressed, the filter is modified to also contain the * matching ButtonXMotion mask. */ -Mask event_filters[MAXDEVICES][128]; +Mask event_filters[MAXDEVICES][MAXEVENTS]; -static const Mask default_filter[128] = +static const Mask default_filter[MAXEVENTS] = { NoSuchEvent, /* 0 */ NoSuchEvent, /* 1 */ @@ -673,7 +673,7 @@ SetMaskForEvent(int deviceid, Mask mask, int event) void SetCriticalEvent(int event) { - if (event >= 128) + if (event >= MAXEVENTS) FatalError("SetCriticalEvent: bogus event number"); criticalEvents[event >> 3] |= 1 << (event & 7); } diff --git a/dix/extension.c b/dix/extension.c index cc516b6ba..af9ba312d 100644 --- a/dix/extension.c +++ b/dix/extension.c @@ -61,7 +61,6 @@ SOFTWARE. #include "registry.h" #include "xace.h" -#define LAST_EVENT 128 #define LAST_ERROR 255 static ExtensionEntry **extensions = (ExtensionEntry **)NULL; @@ -82,7 +81,7 @@ AddExtension(const char *name, int NumEvents, int NumErrors, if (!MainProc || !SwappedMainProc || !MinorOpcodeProc) return((ExtensionEntry *) NULL); - if ((lastEvent + NumEvents > LAST_EVENT) || + if ((lastEvent + NumEvents > MAXEVENTS) || (unsigned)(lastError + NumErrors > LAST_ERROR)) { LogMessage(X_ERROR, "Not enabling extension %s: maximum number of " "events or errors exceeded.\n", name); diff --git a/dix/tables.c b/dix/tables.c index 5bd9ea0c5..45ae2a9d1 100644 --- a/dix/tables.c +++ b/dix/tables.c @@ -592,7 +592,7 @@ int (* SwappedProcVector[256]) ( ProcBadRequest }; -EventSwapPtr EventSwapVector[128] = +EventSwapPtr EventSwapVector[MAXEVENTS] = { (EventSwapPtr)SErrorEvent, NotImplemented, diff --git a/include/inpututils.h b/include/inpututils.h index 5aa60c2c1..9e22c5a28 100644 --- a/include/inpututils.h +++ b/include/inpututils.h @@ -32,7 +32,7 @@ #include "input.h" #include -extern Mask filters[MAXDEVICES][128]; +extern Mask event_filters[MAXDEVICES][MAXEVENTS]; struct _ValuatorMask { int8_t last_bit; /* highest bit set in mask */ diff --git a/include/misc.h b/include/misc.h index d9811ca60..09f928a50 100644 --- a/include/misc.h +++ b/include/misc.h @@ -89,6 +89,8 @@ OF THIS SOFTWARE. #define MAXFORMATS 8 #define MAXDEVICES 40 /* input devices */ +/* 128 event opcodes for core + extension events, excluding GE */ +#define MAXEVENTS 128 #define EXTENSION_EVENT_BASE 64 #define EXTENSION_BASE 128 -- cgit v1.2.3