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:
Peter Hutterer 2009-07-28 16:51:14 +10:00
parent f85619b14d
commit 3d3b8babd1
2 changed files with 10 additions and 29 deletions

View File

@ -224,7 +224,7 @@ extern _X_EXPORT void mieqProcessInputEvents(
extern DeviceIntPtr CopyGetMasterEvent( extern DeviceIntPtr CopyGetMasterEvent(
DeviceIntPtr /* sdev */, DeviceIntPtr /* sdev */,
InternalEvent* /* original */, InternalEvent* /* original */,
EventListPtr /* mlist */ InternalEvent* /* copy */
); );
/** /**

View File

@ -78,7 +78,6 @@ typedef struct _EventQueue {
} EventQueueRec, *EventQueuePtr; } EventQueueRec, *EventQueuePtr;
static EventQueueRec miEventQueue; static EventQueueRec miEventQueue;
static EventListPtr masterEvents; /* for use in mieqProcessInputEvents */
#ifdef XQUARTZ #ifdef XQUARTZ
#include <pthread.h> #include <pthread.h>
@ -117,16 +116,6 @@ mieqInit(void)
miEventQueue.events[i].events = evlist; 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); SetInputCheck(&miEventQueue.head, &miEventQueue.tail);
return TRUE; return TRUE;
} }
@ -317,16 +306,15 @@ FixUpEventForMaster(DeviceIntPtr mdev, DeviceIntPtr sdev,
* Copy the given event into master. * Copy the given event into master.
* @param sdev The slave device the original event comes from * @param sdev The slave device the original event comes from
* @param original The event as it came from the EQ * @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. * @return The master device or NULL if the device is a floating slave.
*/ */
DeviceIntPtr DeviceIntPtr
CopyGetMasterEvent(DeviceIntPtr sdev, CopyGetMasterEvent(DeviceIntPtr sdev,
InternalEvent* original, EventListPtr mlist) InternalEvent* original, InternalEvent *copy)
{ {
DeviceIntPtr mdev; DeviceIntPtr mdev;
int len = original->any.length; int len = original->any.length;
InternalEvent *mevent;
CHECKEVENT(original); CHECKEVENT(original);
@ -351,15 +339,9 @@ CopyGetMasterEvent(DeviceIntPtr sdev,
break; break;
} }
memcpy(copy, original, len);
if (mlist->evlen < len) ChangeDeviceID(mdev, copy);
SetMinimumEventSize(mlist, 1, len); FixUpEventForMaster(mdev, sdev, original, copy);
mevent = (InternalEvent*)mlist->event;
memcpy(mevent, original, len);
ChangeDeviceID(mdev, mevent);
FixUpEventForMaster(mdev, sdev, original, mevent);
return mdev; return mdev;
} }
@ -378,6 +360,7 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
mieqHandler handler; mieqHandler handler;
int x = 0, y = 0; int x = 0, y = 0;
DeviceIntPtr master; DeviceIntPtr master;
InternalEvent mevent; /* master event */
CHECKEVENT(event); CHECKEVENT(event);
@ -392,7 +375,7 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
NewCurrentScreen (dev, DequeueScreen(dev), x, y); NewCurrentScreen (dev, DequeueScreen(dev), x, y);
} }
else { else {
master = CopyGetMasterEvent(dev, event, masterEvents); master = CopyGetMasterEvent(dev, event, &mevent);
if (master) if (master)
master->u.lastSlave = dev; master->u.lastSlave = dev;
@ -406,7 +389,7 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
/* Check for the SD's master in case the device got detached /* Check for the SD's master in case the device got detached
* during event processing */ * during event processing */
if (master && dev->u.master) if (master && dev->u.master)
handler(screenNum, (InternalEvent*)masterEvents->event, master); handler(screenNum, &mevent, master);
} else } else
{ {
/* process slave first, then master */ /* process slave first, then master */
@ -415,9 +398,7 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
/* Check for the SD's master in case the device got detached /* Check for the SD's master in case the device got detached
* during event processing */ * during event processing */
if (master && dev->u.master) if (master && dev->u.master)
master->public.processInputProc( master->public.processInputProc(&mevent, master);
(InternalEvent*)masterEvents->event,
master);
} }
} }
} }