input: replace EventListPtr with InternalEvent array

EventListPtr is a relic from pre-1.6, when we had protocol events in the
event queue and thus events of varying size.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
This commit is contained in:
Peter Hutterer 2011-04-14 22:05:41 +10:00
parent e7150db535
commit 8670c46bdf
16 changed files with 85 additions and 145 deletions

View File

@ -52,6 +52,7 @@
#include "mipointer.h" #include "mipointer.h"
#include "xserver-properties.h" #include "xserver-properties.h"
#include "exevents.h" #include "exevents.h"
#include "eventstr.h"
#include "inpututils.h" #include "inpututils.h"
#include "modinit.h" #include "modinit.h"
@ -61,7 +62,7 @@ extern int DeviceValuator;
/* XTest events are sent during request processing and may be interruped by /* XTest events are sent during request processing and may be interruped by
* a SIGIO. We need a separate event list to avoid events overwriting each * a SIGIO. We need a separate event list to avoid events overwriting each
* other's memory */ * other's memory */
static EventListPtr xtest_evlist; static InternalEvent* xtest_evlist;
/** /**
* xtestpointer * xtestpointer
@ -428,7 +429,7 @@ ProcXTestFakeInput(ClientPtr client)
} }
for (i = 0; i < nevents; i++) for (i = 0; i < nevents; i++)
mieqProcessDeviceEvent(dev, (InternalEvent*)(xtest_evlist+i)->event, NULL); mieqProcessDeviceEvent(dev, &xtest_evlist[i], NULL);
if (need_ptr_update) if (need_ptr_update)
miPointerUpdateSprite(dev); miPointerUpdateSprite(dev);

View File

@ -2368,7 +2368,7 @@ RecalculateMasterButtons(DeviceIntPtr slave)
void void
ReleaseButtonsAndKeys(DeviceIntPtr dev) ReleaseButtonsAndKeys(DeviceIntPtr dev)
{ {
EventListPtr eventlist = InitEventList(GetMaximumEventsNum()); InternalEvent* eventlist = InitEventList(GetMaximumEventsNum());
ButtonClassPtr b = dev->button; ButtonClassPtr b = dev->button;
KeyClassPtr k = dev->key; KeyClassPtr k = dev->key;
int i, j, nevents; int i, j, nevents;
@ -2383,7 +2383,7 @@ ReleaseButtonsAndKeys(DeviceIntPtr dev)
{ {
nevents = GetPointerEvents(eventlist, dev, ButtonRelease, i, 0, NULL); nevents = GetPointerEvents(eventlist, dev, ButtonRelease, i, 0, NULL);
for (j = 0; j < nevents; j++) for (j = 0; j < nevents; j++)
mieqProcessDeviceEvent(dev, (InternalEvent*)(eventlist+j)->event, NULL); mieqProcessDeviceEvent(dev, &eventlist[j], NULL);
} }
} }
@ -2394,7 +2394,7 @@ ReleaseButtonsAndKeys(DeviceIntPtr dev)
{ {
nevents = GetKeyboardEvents(eventlist, dev, KeyRelease, i, NULL); nevents = GetKeyboardEvents(eventlist, dev, KeyRelease, i, NULL);
for (j = 0; j < nevents; j++) for (j = 0; j < nevents; j++)
mieqProcessDeviceEvent(dev, (InternalEvent*)(eventlist+j)->event, NULL); mieqProcessDeviceEvent(dev, &eventlist[j], NULL);
} }
} }

View File

@ -68,15 +68,15 @@
/* Number of motion history events to store. */ /* Number of motion history events to store. */
#define MOTION_HISTORY_SIZE 256 #define MOTION_HISTORY_SIZE 256
/* InputEventList is the container list for all input events generated by the /* InputEventList is the storage for input events generated by the
* DDX. The DDX is expected to call GetEventList() and then pass the list into * DDX. The DDX is expected to call GetEventList() and then pass the list into
* Get{Pointer|Keyboard}Events. * Get{Pointer|Keyboard}Events.
*/ */
EventListPtr InputEventList = NULL; InternalEvent* InputEventList = NULL;
int InputEventListLen = 0; int InputEventListLen = 0;
int int
GetEventList(EventListPtr* list) GetEventList(InternalEvent** list)
{ {
*list = InputEventList; *list = InputEventList;
return InputEventListLen; return InputEventListLen;
@ -224,7 +224,7 @@ set_valuators(DeviceIntPtr dev, DeviceEvent* event, ValuatorMask *mask)
} }
void void
CreateClassesChangedEvent(EventList* event, CreateClassesChangedEvent(InternalEvent* event,
DeviceIntPtr master, DeviceIntPtr master,
DeviceIntPtr slave, DeviceIntPtr slave,
int type) int type)
@ -233,7 +233,7 @@ CreateClassesChangedEvent(EventList* event,
DeviceChangedEvent *dce; DeviceChangedEvent *dce;
CARD32 ms = GetTimeInMillis(); CARD32 ms = GetTimeInMillis();
dce = (DeviceChangedEvent*)event->event; dce = &event->changed_event;
memset(dce, 0, sizeof(DeviceChangedEvent)); memset(dce, 0, sizeof(DeviceChangedEvent));
dce->deviceid = slave->id; dce->deviceid = slave->id;
dce->masterid = master->id; dce->masterid = master->id;
@ -677,15 +677,15 @@ clipValuators(DeviceIntPtr pDev, ValuatorMask *mask)
* is done in the event processing). * is done in the event processing).
* Pull in the coordinates from the MD if necessary. * Pull in the coordinates from the MD if necessary.
* *
* @param events Pointer to a pre-allocated event list. * @param events Pointer to a pre-allocated event array.
* @param dev The slave device that generated an event. * @param dev The slave device that generated an event.
* @param type Either DEVCHANGE_POINTER_EVENT and/or DEVCHANGE_KEYBOARD_EVENT * @param type Either DEVCHANGE_POINTER_EVENT and/or DEVCHANGE_KEYBOARD_EVENT
* @param num_events The current number of events, returns the number of * @param num_events The current number of events, returns the number of
* events if a DCCE was generated. * events if a DCCE was generated.
* @return The updated @events pointer. * @return The updated @events pointer.
*/ */
EventListPtr InternalEvent*
UpdateFromMaster(EventListPtr events, DeviceIntPtr dev, int type, int *num_events) UpdateFromMaster(InternalEvent* events, DeviceIntPtr dev, int type, int *num_events)
{ {
DeviceIntPtr master; DeviceIntPtr master;
@ -926,12 +926,11 @@ updateHistory(DeviceIntPtr dev, ValuatorMask *mask, CARD32 ms)
} }
static void static void
queueEventList(DeviceIntPtr device, EventList *events, int nevents) queueEventList(DeviceIntPtr device, InternalEvent *events, int nevents)
{ {
int i; int i;
for (i = 0; i < nevents; i++) for (i = 0; i < nevents; i++)
mieqEnqueue(device, (InternalEvent*)((events + i)->event)); mieqEnqueue(device, &events[i]);
} }
/** /**
@ -949,7 +948,7 @@ queueEventList(DeviceIntPtr device, EventList *events, int nevents)
* *
*/ */
void void
QueueKeyboardEvents(EventList *events, DeviceIntPtr device, int type, QueueKeyboardEvents(InternalEvent *events, DeviceIntPtr device, int type,
int keycode, const ValuatorMask *mask) int keycode, const ValuatorMask *mask)
{ {
int nevents; int nevents;
@ -962,12 +961,13 @@ QueueKeyboardEvents(EventList *events, DeviceIntPtr device, int type,
* Returns a set of InternalEvents for KeyPress/KeyRelease, optionally * Returns a set of InternalEvents for KeyPress/KeyRelease, optionally
* also with valuator events. * also with valuator events.
* *
* events is not NULL-terminated; the return value is the number of events. * The DDX is responsible for allocating the event list in the first
* The DDX is responsible for allocating the event structure in the first * place via InitEventList(), and for freeing it.
* place via GetMaximumEventsNum(), and for freeing it. *
* @return the number of events written into events.
*/ */
int int
GetKeyboardEvents(EventList *events, DeviceIntPtr pDev, int type, GetKeyboardEvents(InternalEvent *events, DeviceIntPtr pDev, int type,
int key_code, const ValuatorMask *mask_in) { int key_code, const ValuatorMask *mask_in) {
int num_events = 0; int num_events = 0;
CARD32 ms = 0; CARD32 ms = 0;
@ -1000,7 +1000,7 @@ GetKeyboardEvents(EventList *events, DeviceIntPtr pDev, int type,
ms = GetTimeInMillis(); ms = GetTimeInMillis();
raw = (RawDeviceEvent*)events->event; raw = &events->raw_event;
events++; events++;
num_events++; num_events++;
@ -1013,7 +1013,7 @@ GetKeyboardEvents(EventList *events, DeviceIntPtr pDev, int type,
set_raw_valuators(raw, &mask, raw->valuators.data); set_raw_valuators(raw, &mask, raw->valuators.data);
event = (DeviceEvent*) events->event; event = &events->device_event;
init_event(pDev, event, ms); init_event(pDev, event, ms);
event->detail.key = key_code; event->detail.key = key_code;
@ -1034,37 +1034,16 @@ GetKeyboardEvents(EventList *events, DeviceIntPtr pDev, int type,
} }
/** /**
* Initialize an event list and fill with 32 byte sized events. * Initialize an event array large enough for num_events arrays.
* This event list is to be passed into GetPointerEvents() and * This event list is to be passed into GetPointerEvents() and
* GetKeyboardEvents(). * GetKeyboardEvents().
* *
* @param num_events Number of elements in list. * @param num_events Number of elements in list.
*/ */
EventListPtr InternalEvent*
InitEventList(int num_events) InitEventList(int num_events)
{ {
EventListPtr events; InternalEvent *events = calloc(num_events, sizeof(InternalEvent));
int i;
events = (EventListPtr)calloc(num_events, sizeof(EventList));
if (!events)
return NULL;
for (i = 0; i < num_events; i++)
{
events[i].evlen = sizeof(InternalEvent);
events[i].event = calloc(1, sizeof(InternalEvent));
if (!events[i].event)
{
/* rollback */
while(i--)
free(events[i].event);
free(events);
events = NULL;
break;
}
}
return events; return events;
} }
@ -1075,12 +1054,8 @@ InitEventList(int num_events)
* @param num_events Number of elements in list. * @param num_events Number of elements in list.
*/ */
void void
FreeEventList(EventListPtr list, int num_events) FreeEventList(InternalEvent *list, int num_events)
{ {
if (!list)
return;
while(num_events--)
free(list[num_events].event);
free(list); free(list);
} }
@ -1101,7 +1076,7 @@ transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask, int *x, int *y)
* *
* FIXME: don't require the event list to be passed in. * FIXME: don't require the event list to be passed in.
* *
* @param events Event list used as temporary storage * @param events Set of events list used as temporary storage
* @param device The device to generate the event for * @param device The device to generate the event for
* @param type Event type, one of ButtonPress, ButtonRelease, MotionNotify * @param type Event type, one of ButtonPress, ButtonRelease, MotionNotify
* @param buttons Button number of the buttons modified. Must be 0 for * @param buttons Button number of the buttons modified. Must be 0 for
@ -1110,7 +1085,7 @@ transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask, int *x, int *y)
* @param mask Valuator mask for valuators present for this event. * @param mask Valuator mask for valuators present for this event.
*/ */
void void
QueuePointerEvents(EventList *events, DeviceIntPtr device, int type, QueuePointerEvents(InternalEvent *events, DeviceIntPtr device, int type,
int buttons, int flags, const ValuatorMask *mask) int buttons, int flags, const ValuatorMask *mask)
{ {
int nevents; int nevents;
@ -1120,11 +1095,10 @@ QueuePointerEvents(EventList *events, DeviceIntPtr device, int type,
} }
/** /**
* Generate a series of InternalEvents (filled into the EventList) * Generate a series of InternalEvents representing pointer motion, or
* representing pointer motion, or button presses. * button presses.
* *
* events is not NULL-terminated; the return value is the number of events. * The DDX is responsible for allocating the events in the first
* The DDX is responsible for allocating the event structure in the first
* place via InitEventList() and GetMaximumEventsNum(), and for freeing it. * place via InitEventList() and GetMaximumEventsNum(), and for freeing it.
* *
* In the generated events rootX/Y will be in absolute screen coords and * In the generated events rootX/Y will be in absolute screen coords and
@ -1134,9 +1108,11 @@ QueuePointerEvents(EventList *events, DeviceIntPtr device, int type,
* last.valuators[x] of the master device is in absolute screen coords. * last.valuators[x] of the master device is in absolute screen coords.
* *
* master->last.valuators[x] for x > 2 is undefined. * master->last.valuators[x] for x > 2 is undefined.
*
* @return the number of events written into events.
*/ */
int int
GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons, GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, int buttons,
int flags, const ValuatorMask *mask_in) { int flags, const ValuatorMask *mask_in) {
int num_events = 1; int num_events = 1;
CARD32 ms; CARD32 ms;
@ -1174,7 +1150,7 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons,
events = UpdateFromMaster(events, pDev, DEVCHANGE_POINTER_EVENT, &num_events); events = UpdateFromMaster(events, pDev, DEVCHANGE_POINTER_EVENT, &num_events);
raw = (RawDeviceEvent*)events->event; raw = &events->raw_event;
events++; events++;
num_events++; num_events++;
@ -1243,7 +1219,7 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons,
clipValuators(pDev, &mask); clipValuators(pDev, &mask);
event = (DeviceEvent*) events->event; event = &events->device_event;
init_event(pDev, event, ms); init_event(pDev, event, ms);
if (type == MotionNotify) { if (type == MotionNotify) {
@ -1286,7 +1262,7 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons,
* *
*/ */
void void
QueueProximityEvents(EventList *events, DeviceIntPtr device, int type, QueueProximityEvents(InternalEvent *events, DeviceIntPtr device, int type,
const ValuatorMask *mask) const ValuatorMask *mask)
{ {
int nevents; int nevents;
@ -1299,12 +1275,13 @@ QueueProximityEvents(EventList *events, DeviceIntPtr device, int type,
* Generate ProximityIn/ProximityOut InternalEvents, accompanied by * Generate ProximityIn/ProximityOut InternalEvents, accompanied by
* valuators. * valuators.
* *
* events is not NULL-terminated; the return value is the number of events. * The DDX is responsible for allocating the events in the first place via
* The DDX is responsible for allocating the event structure in the first * InitEventList(), and for freeing it.
* place via GetMaximumEventsNum(), and for freeing it. *
* @return the number of events written into events.
*/ */
int int
GetProximityEvents(EventList *events, DeviceIntPtr pDev, int type, const ValuatorMask *mask_in) GetProximityEvents(InternalEvent *events, DeviceIntPtr pDev, int type, const ValuatorMask *mask_in)
{ {
int num_events = 1, i; int num_events = 1, i;
DeviceEvent *event; DeviceEvent *event;
@ -1336,7 +1313,7 @@ GetProximityEvents(EventList *events, DeviceIntPtr pDev, int type, const Valuato
events = UpdateFromMaster(events, pDev, DEVCHANGE_POINTER_EVENT, &num_events); events = UpdateFromMaster(events, pDev, DEVCHANGE_POINTER_EVENT, &num_events);
event = (DeviceEvent *) events->event; event = &events->device_event;
init_event(pDev, event, GetTimeInMillis()); init_event(pDev, event, GetTimeInMillis());
event->type = (type == ProximityIn) ? ET_ProximityIn : ET_ProximityOut; event->type = (type == ProximityIn) ? ET_ProximityIn : ET_ProximityOut;

View File

@ -177,7 +177,7 @@ static void enqueueMotion(DevicePtr pDev, int x, int y)
GETDMXLOCALFROMPDEV; GETDMXLOCALFROMPDEV;
DeviceIntPtr p = dmxLocal->pDevice; DeviceIntPtr p = dmxLocal->pDevice;
int valuators[3]; int valuators[3];
EventListPtr events; InternalEvent* events;
int detail = 0; /* XXX should this be mask of pressed buttons? */ int detail = 0; /* XXX should this be mask of pressed buttons? */
ValuatorMask mask; ValuatorMask mask;
valuators[0] = x; valuators[0] = x;
@ -290,7 +290,7 @@ static void dmxExtMotion(DMXLocalInputInfoPtr dmxLocal,
int thisX = 0; int thisX = 0;
int thisY = 0; int thisY = 0;
int count; int count;
EventListPtr events; InternalEvent* events;
ValuatorMask mask; ValuatorMask mask;
memset(xE, 0, sizeof(xE)); memset(xE, 0, sizeof(xE));
@ -389,7 +389,7 @@ static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
XDeviceMotionEvent *me = (XDeviceMotionEvent *)e; XDeviceMotionEvent *me = (XDeviceMotionEvent *)e;
DeviceIntPtr pDevice = dmxLocal->pDevice; DeviceIntPtr pDevice = dmxLocal->pDevice;
int valuators[MAX_VALUATORS]; int valuators[MAX_VALUATORS];
EventListPtr events; InternalEvent* events;
ValuatorMask mask; ValuatorMask mask;
if (!e) if (!e)
@ -652,7 +652,7 @@ void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
xEvent xE; xEvent xE;
DeviceIntPtr p = dmxLocal->pDevice; DeviceIntPtr p = dmxLocal->pDevice;
int valuators[3]; int valuators[3];
EventListPtr events; InternalEvent* events;
ValuatorMask mask; ValuatorMask mask;
DMXDBG2("dmxEnqueue: Enqueuing type=%d detail=0x%0x\n", type, detail); DMXDBG2("dmxEnqueue: Enqueuing type=%d detail=0x%0x\n", type, detail);

View File

@ -66,7 +66,7 @@ static struct KdConfigDevice *kdConfigPointers = NULL;
static KdKeyboardDriver *kdKeyboardDrivers = NULL; static KdKeyboardDriver *kdKeyboardDrivers = NULL;
static KdPointerDriver *kdPointerDrivers = NULL; static KdPointerDriver *kdPointerDrivers = NULL;
static EventListPtr kdEvents = NULL; static InternalEvent* kdEvents = NULL;
static Bool kdInputEnabled; static Bool kdInputEnabled;
static Bool kdOffScreen; static Bool kdOffScreen;

View File

@ -149,7 +149,7 @@ extern _X_EXPORT int xf86SetLogVerbosity(int verb);
extern _X_EXPORT Bool xf86CallDriverProbe( struct _DriverRec * drv, Bool detect_only ); extern _X_EXPORT Bool xf86CallDriverProbe( struct _DriverRec * drv, Bool detect_only );
/* xf86Xinput.c */ /* xf86Xinput.c */
extern _X_EXPORT EventList *xf86Events; extern _X_EXPORT InternalEvent *xf86Events;
#endif /* _NO_XF86_PROTOTYPES */ #endif /* _NO_XF86_PROTOTYPES */

View File

@ -99,7 +99,7 @@
return; \ return; \
} }
EventListPtr xf86Events = NULL; InternalEvent* xf86Events = NULL;
static int static int
xf86InputDevicePostInit(DeviceIntPtr dev); xf86InputDevicePostInit(DeviceIntPtr dev);

View File

@ -43,7 +43,7 @@ is" without express or implied warranty.
CARD32 lastEventTime = 0; CARD32 lastEventTime = 0;
extern EventList *xnestEvents; extern InternalEvent *xnestEvents;
void void
ProcessInputEvents(void) ProcessInputEvents(void)

View File

@ -45,7 +45,7 @@ is" without express or implied warranty.
Bool xnestDoFullGeneration = True; Bool xnestDoFullGeneration = True;
EventList *xnestEvents = NULL; InternalEvent *xnestEvents = NULL;
void void
InitOutput(ScreenInfo *screenInfo, int argc, char *argv[]) InitOutput(ScreenInfo *screenInfo, int argc, char *argv[])

View File

@ -88,7 +88,7 @@ static pthread_mutex_t fd_add_lock = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t fd_add_ready_cond = PTHREAD_COND_INITIALIZER; static pthread_cond_t fd_add_ready_cond = PTHREAD_COND_INITIALIZER;
static pthread_t fd_add_tid = NULL; static pthread_t fd_add_tid = NULL;
static EventListPtr darwinEvents = NULL; static InternalEvent* darwinEvents = NULL;
static pthread_mutex_t mieq_lock = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t mieq_lock = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t mieq_ready_cond = PTHREAD_COND_INITIALIZER; static pthread_cond_t mieq_ready_cond = PTHREAD_COND_INITIALIZER;

View File

@ -472,7 +472,7 @@ winKeybdReleaseKeys (void)
void void
winSendKeyEvent (DWORD dwKey, Bool fDown) winSendKeyEvent (DWORD dwKey, Bool fDown)
{ {
EventListPtr events; InternalEvent* events;
/* /*
* When alt-tabing between screens we can get phantom key up messages * When alt-tabing between screens we can get phantom key up messages

View File

@ -234,7 +234,7 @@ winMouseWheel (ScreenPtr pScreen, int iDeltaZ)
void void
winMouseButtonsSendEvent (int iEventType, int iButton) winMouseButtonsSendEvent (int iEventType, int iButton)
{ {
EventListPtr events; InternalEvent* events;
ValuatorMask mask; ValuatorMask mask;
if (g_winMouseButtonMap) if (g_winMouseButtonMap)
@ -365,7 +365,7 @@ void winEnqueueMotion(int x, int y)
{ {
int valuators[2]; int valuators[2];
ValuatorMask mask; ValuatorMask mask;
EventListPtr events; InternalEvent* events;
miPointerSetPosition(g_pwinPointer, POINTER_RELATIVE, &x, &y); miPointerSetPosition(g_pwinPointer, POINTER_RELATIVE, &x, &y);
valuators[0] = x; valuators[0] = x;

View File

@ -109,18 +109,8 @@ typedef union _GrabMask GrabMask;
typedef struct _ValuatorMask ValuatorMask; typedef struct _ValuatorMask ValuatorMask;
typedef struct _EventList {
xEvent* event;
int evlen; /* length of allocated memory for event in bytes. This is not
the actual length of the event. The event's actual length is
32 for standard events or 32 +
((xGenericEvent*)event)->length * 4 for GenericEvents.
For events in the EQ, the length is
((InternalEvent*)event)->u.any.length */
} EventList, *EventListPtr;
/* The DIX stores incoming input events in this list */ /* The DIX stores incoming input events in this list */
extern EventListPtr InputEventList; extern InternalEvent* InputEventList;
extern int InputEventListLen; extern int InputEventListLen;
typedef int (*DeviceProc)( typedef int (*DeviceProc)(
@ -439,22 +429,22 @@ extern _X_EXPORT void CloseInput(void);
extern _X_EXPORT int GetMaximumEventsNum(void); extern _X_EXPORT int GetMaximumEventsNum(void);
extern _X_EXPORT int GetEventList(EventListPtr* list); extern _X_EXPORT int GetEventList(InternalEvent** list);
extern _X_EXPORT EventListPtr InitEventList(int num_events); extern _X_EXPORT InternalEvent *InitEventList(int num_events);
extern _X_EXPORT void FreeEventList(EventListPtr list, int num_events); extern _X_EXPORT void FreeEventList(InternalEvent *list, int num_events);
extern void CreateClassesChangedEvent(EventListPtr event, extern void CreateClassesChangedEvent(InternalEvent *event,
DeviceIntPtr master, DeviceIntPtr master,
DeviceIntPtr slave, DeviceIntPtr slave,
int type); int type);
extern EventListPtr UpdateFromMaster( extern InternalEvent * UpdateFromMaster(
EventListPtr events, InternalEvent *events,
DeviceIntPtr pDev, DeviceIntPtr pDev,
int type, int type,
int *num_events); int *num_events);
extern _X_EXPORT int GetPointerEvents( extern _X_EXPORT int GetPointerEvents(
EventListPtr events, InternalEvent *events,
DeviceIntPtr pDev, DeviceIntPtr pDev,
int type, int type,
int buttons, int buttons,
@ -462,7 +452,7 @@ extern _X_EXPORT int GetPointerEvents(
const ValuatorMask *mask); const ValuatorMask *mask);
extern _X_EXPORT void QueuePointerEvents( extern _X_EXPORT void QueuePointerEvents(
EventListPtr events, InternalEvent *events,
DeviceIntPtr pDev, DeviceIntPtr pDev,
int type, int type,
int buttons, int buttons,
@ -470,27 +460,27 @@ extern _X_EXPORT void QueuePointerEvents(
const ValuatorMask *mask); const ValuatorMask *mask);
extern _X_EXPORT int GetKeyboardEvents( extern _X_EXPORT int GetKeyboardEvents(
EventListPtr events, InternalEvent *events,
DeviceIntPtr pDev, DeviceIntPtr pDev,
int type, int type,
int key_code, int key_code,
const ValuatorMask *mask); const ValuatorMask *mask);
extern _X_EXPORT void QueueKeyboardEvents( extern _X_EXPORT void QueueKeyboardEvents(
EventListPtr events, InternalEvent *events,
DeviceIntPtr pDev, DeviceIntPtr pDev,
int type, int type,
int key_code, int key_code,
const ValuatorMask *mask); const ValuatorMask *mask);
extern int GetProximityEvents( extern int GetProximityEvents(
EventListPtr events, InternalEvent *events,
DeviceIntPtr pDev, DeviceIntPtr pDev,
int type, int type,
const ValuatorMask *mask); const ValuatorMask *mask);
extern void QueueProximityEvents( extern void QueueProximityEvents(
EventListPtr events, InternalEvent *events,
DeviceIntPtr pDev, DeviceIntPtr pDev,
int type, int type,
const ValuatorMask *mask); const ValuatorMask *mask);

View File

@ -64,7 +64,7 @@ in this Software without prior written authorization from The Open Group.
#define DequeueScreen(dev) dev->spriteInfo->sprite->pDequeueScreen #define DequeueScreen(dev) dev->spriteInfo->sprite->pDequeueScreen
typedef struct _Event { typedef struct _Event {
EventListPtr events; InternalEvent* events;
ScreenPtr pScreen; ScreenPtr pScreen;
DeviceIntPtr pDev; /* device this event _originated_ from */ DeviceIntPtr pDev; /* device this event _originated_ from */
} EventRec, *EventPtr; } EventRec, *EventPtr;
@ -111,7 +111,7 @@ mieqInit(void)
for (i = 0; i < QUEUE_SIZE; i++) for (i = 0; i < QUEUE_SIZE; i++)
{ {
if (miEventQueue.events[i].events == NULL) { if (miEventQueue.events[i].events == NULL) {
EventListPtr evlist = InitEventList(1); InternalEvent* evlist = InitEventList(1);
if (!evlist) if (!evlist)
FatalError("Could not allocate event queue.\n"); FatalError("Could not allocate event queue.\n");
miEventQueue.events[i].events = evlist; miEventQueue.events[i].events = evlist;
@ -146,7 +146,7 @@ void
mieqEnqueue(DeviceIntPtr pDev, InternalEvent *e) mieqEnqueue(DeviceIntPtr pDev, InternalEvent *e)
{ {
unsigned int oldtail = miEventQueue.tail; unsigned int oldtail = miEventQueue.tail;
EventListPtr evt; InternalEvent* evt;
int isMotion = 0; int isMotion = 0;
int evlen; int evlen;
Time time; Time time;
@ -188,21 +188,7 @@ mieqEnqueue(DeviceIntPtr pDev, InternalEvent *e)
evlen = e->any.length; evlen = e->any.length;
evt = miEventQueue.events[oldtail].events; evt = miEventQueue.events[oldtail].events;
if (evt->evlen < evlen) memcpy(evt, e, evlen);
{
evt->evlen = evlen;
evt->event = realloc(evt->event, evt->evlen);
if (!evt->event)
{
ErrorF("[mi] Running out of memory. Tossing event.\n");
#ifdef XQUARTZ
pthread_mutex_unlock(&miEventQueueMutex);
#endif
return;
}
}
memcpy(evt->event, e, evlen);
time = e->any.time; time = e->any.time;
/* Make sure that event times don't go backwards - this /* Make sure that event times don't go backwards - this
@ -211,7 +197,7 @@ mieqEnqueue(DeviceIntPtr pDev, InternalEvent *e)
miEventQueue.lastEventTime - time < 10000) miEventQueue.lastEventTime - time < 10000)
e->any.time = miEventQueue.lastEventTime; e->any.time = miEventQueue.lastEventTime;
miEventQueue.lastEventTime = ((InternalEvent*)evt->event)->any.time; miEventQueue.lastEventTime = evt->any.time;
miEventQueue.events[oldtail].pScreen = pDev ? EnqueueScreen(pDev) : NULL; miEventQueue.events[oldtail].pScreen = pDev ? EnqueueScreen(pDev) : NULL;
miEventQueue.events[oldtail].pDev = pDev; miEventQueue.events[oldtail].pDev = pDev;
@ -431,10 +417,8 @@ void
mieqProcessInputEvents(void) mieqProcessInputEvents(void)
{ {
EventRec *e = NULL; EventRec *e = NULL;
int evlen;
ScreenPtr screen; ScreenPtr screen;
static InternalEvent *event = NULL; static InternalEvent event;
static size_t event_size = 0;
DeviceIntPtr dev = NULL, DeviceIntPtr dev = NULL,
master = NULL; master = NULL;
@ -445,20 +429,7 @@ mieqProcessInputEvents(void)
while (miEventQueue.head != miEventQueue.tail) { while (miEventQueue.head != miEventQueue.tail) {
e = &miEventQueue.events[miEventQueue.head]; e = &miEventQueue.events[miEventQueue.head];
evlen = e->events->evlen; event = *e->events;
if(evlen > event_size)
{
event = realloc(event, evlen);
event_size = evlen;
}
if (!event)
FatalError("[mi] No memory left for event processing.\n");
memcpy(event, e->events->event, evlen);
dev = e->pDev; dev = e->pDev;
screen = e->pScreen; screen = e->pScreen;
@ -480,10 +451,10 @@ mieqProcessInputEvents(void)
DPMSSet(serverClient, DPMSModeOn); DPMSSet(serverClient, DPMSModeOn);
#endif #endif
mieqProcessDeviceEvent(dev, event, screen); mieqProcessDeviceEvent(dev, &event, screen);
/* Update the sprite now. Next event may be from different device. */ /* Update the sprite now. Next event may be from different device. */
if (event->any.type == ET_Motion && master) if (event.any.type == ET_Motion && master)
miPointerUpdateSprite(dev); miPointerUpdateSprite(dev);
#ifdef XQUARTZ #ifdef XQUARTZ

View File

@ -63,6 +63,7 @@ in this Software without prior written authorization from The Open Group.
# include "dixstruct.h" # include "dixstruct.h"
# include "inputstr.h" # include "inputstr.h"
# include "inpututils.h" # include "inpututils.h"
# include "eventstr.h"
DevPrivateKeyRec miPointerScreenKeyRec; DevPrivateKeyRec miPointerScreenKeyRec;
@ -99,7 +100,7 @@ static void miPointerDeviceCleanup(DeviceIntPtr pDev,
ScreenPtr pScreen); ScreenPtr pScreen);
static void miPointerMoveNoEvent (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y); static void miPointerMoveNoEvent (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y);
static EventList* events; /* for WarpPointer MotionNotifies */ static InternalEvent* events; /* for WarpPointer MotionNotifies */
Bool Bool
miPointerInitialize (ScreenPtr pScreen, miPointerInitialize (ScreenPtr pScreen,
@ -689,7 +690,7 @@ miPointerMove (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
darwinEvents_lock(); darwinEvents_lock();
#endif #endif
for (i = 0; i < nevents; i++) for (i = 0; i < nevents; i++)
mieqEnqueue(pDev, (InternalEvent*)events[i].event); mieqEnqueue(pDev, &events[i]);
#ifdef XQUARTZ #ifdef XQUARTZ
darwinEvents_unlock(); darwinEvents_unlock();
#endif #endif

View File

@ -1351,7 +1351,7 @@ static void
InjectPointerKeyEvents(DeviceIntPtr dev, int type, int button, int flags, ValuatorMask *mask) InjectPointerKeyEvents(DeviceIntPtr dev, int type, int button, int flags, ValuatorMask *mask)
{ {
ScreenPtr pScreen; ScreenPtr pScreen;
EventListPtr events; InternalEvent* events;
int nevents, i; int nevents, i;
DeviceIntPtr ptr, mpointer, lastSlave = NULL; DeviceIntPtr ptr, mpointer, lastSlave = NULL;
Bool saveWait; Bool saveWait;
@ -1377,7 +1377,7 @@ InjectPointerKeyEvents(DeviceIntPtr dev, int type, int button, int flags, Valuat
OsReleaseSignals(); OsReleaseSignals();
for (i = 0; i < nevents; i++) for (i = 0; i < nevents; i++)
mieqProcessDeviceEvent(ptr, (InternalEvent*)events[i].event, NULL); mieqProcessDeviceEvent(ptr, &events[i], NULL);
FreeEventList(events, GetMaximumEventsNum()); FreeEventList(events, GetMaximumEventsNum());