mi: update master event copying to InternalEvents.
This is long overdue. The device events are InternalEvents now (and only one at a time), diminishing the need for an EventList for the master event. Furthermore, don't make masterEvent a static since this will interfere if mieqProcessDeviceEvent is called from somewhere else (e.g. XKB actions). Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
f85619b14d
commit
3d3b8babd1
2
mi/mi.h
2
mi/mi.h
|
@ -224,7 +224,7 @@ extern _X_EXPORT void mieqProcessInputEvents(
|
|||
extern DeviceIntPtr CopyGetMasterEvent(
|
||||
DeviceIntPtr /* sdev */,
|
||||
InternalEvent* /* original */,
|
||||
EventListPtr /* mlist */
|
||||
InternalEvent* /* copy */
|
||||
);
|
||||
|
||||
/**
|
||||
|
|
37
mi/mieq.c
37
mi/mieq.c
|
@ -78,7 +78,6 @@ typedef struct _EventQueue {
|
|||
} EventQueueRec, *EventQueuePtr;
|
||||
|
||||
static EventQueueRec miEventQueue;
|
||||
static EventListPtr masterEvents; /* for use in mieqProcessInputEvents */
|
||||
|
||||
#ifdef XQUARTZ
|
||||
#include <pthread.h>
|
||||
|
@ -117,16 +116,6 @@ mieqInit(void)
|
|||
miEventQueue.events[i].events = evlist;
|
||||
}
|
||||
|
||||
/* XXX: mE is just 1 event long, if we have Motion + Valuator they are
|
||||
* squashed into the first event to make passing it into the event
|
||||
* processing handlers easier. This should be fixed when the processing
|
||||
* handlers switch to EventListPtr instead of xEvent */
|
||||
masterEvents = InitEventList(1);
|
||||
if (!masterEvents)
|
||||
FatalError("Could not allocated MD event queue.\n");
|
||||
SetMinimumEventSize(masterEvents, 1,
|
||||
(1 + MAX_VALUATOR_EVENTS) * sizeof(xEvent));
|
||||
|
||||
SetInputCheck(&miEventQueue.head, &miEventQueue.tail);
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -317,16 +306,15 @@ FixUpEventForMaster(DeviceIntPtr mdev, DeviceIntPtr sdev,
|
|||
* Copy the given event into master.
|
||||
* @param sdev The slave device the original event comes from
|
||||
* @param original The event as it came from the EQ
|
||||
* @param master The event after being copied
|
||||
* @param copy The event after being copied
|
||||
* @return The master device or NULL if the device is a floating slave.
|
||||
*/
|
||||
DeviceIntPtr
|
||||
CopyGetMasterEvent(DeviceIntPtr sdev,
|
||||
InternalEvent* original, EventListPtr mlist)
|
||||
InternalEvent* original, InternalEvent *copy)
|
||||
{
|
||||
DeviceIntPtr mdev;
|
||||
int len = original->any.length;
|
||||
InternalEvent *mevent;
|
||||
|
||||
CHECKEVENT(original);
|
||||
|
||||
|
@ -351,15 +339,9 @@ CopyGetMasterEvent(DeviceIntPtr sdev,
|
|||
break;
|
||||
}
|
||||
|
||||
|
||||
if (mlist->evlen < len)
|
||||
SetMinimumEventSize(mlist, 1, len);
|
||||
|
||||
mevent = (InternalEvent*)mlist->event;
|
||||
|
||||
memcpy(mevent, original, len);
|
||||
ChangeDeviceID(mdev, mevent);
|
||||
FixUpEventForMaster(mdev, sdev, original, mevent);
|
||||
memcpy(copy, original, len);
|
||||
ChangeDeviceID(mdev, copy);
|
||||
FixUpEventForMaster(mdev, sdev, original, copy);
|
||||
|
||||
return mdev;
|
||||
}
|
||||
|
@ -378,6 +360,7 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
|
|||
mieqHandler handler;
|
||||
int x = 0, y = 0;
|
||||
DeviceIntPtr master;
|
||||
InternalEvent mevent; /* master event */
|
||||
|
||||
CHECKEVENT(event);
|
||||
|
||||
|
@ -392,7 +375,7 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
|
|||
NewCurrentScreen (dev, DequeueScreen(dev), x, y);
|
||||
}
|
||||
else {
|
||||
master = CopyGetMasterEvent(dev, event, masterEvents);
|
||||
master = CopyGetMasterEvent(dev, event, &mevent);
|
||||
|
||||
if (master)
|
||||
master->u.lastSlave = dev;
|
||||
|
@ -406,7 +389,7 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
|
|||
/* Check for the SD's master in case the device got detached
|
||||
* during event processing */
|
||||
if (master && dev->u.master)
|
||||
handler(screenNum, (InternalEvent*)masterEvents->event, master);
|
||||
handler(screenNum, &mevent, master);
|
||||
} else
|
||||
{
|
||||
/* process slave first, then master */
|
||||
|
@ -415,9 +398,7 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
|
|||
/* Check for the SD's master in case the device got detached
|
||||
* during event processing */
|
||||
if (master && dev->u.master)
|
||||
master->public.processInputProc(
|
||||
(InternalEvent*)masterEvents->event,
|
||||
master);
|
||||
master->public.processInputProc(&mevent, master);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user