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:
parent
e7150db535
commit
8670c46bdf
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
101
dix/getevents.c
101
dix/getevents.c
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,7 @@
|
||||||
return; \
|
return; \
|
||||||
}
|
}
|
||||||
|
|
||||||
EventListPtr xf86Events = NULL;
|
InternalEvent* xf86Events = NULL;
|
||||||
|
|
||||||
static int
|
static int
|
||||||
xf86InputDevicePostInit(DeviceIntPtr dev);
|
xf86InputDevicePostInit(DeviceIntPtr dev);
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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[])
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
47
mi/mieq.c
47
mi/mieq.c
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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());
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue