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(
|
extern DeviceIntPtr CopyGetMasterEvent(
|
||||||
DeviceIntPtr /* sdev */,
|
DeviceIntPtr /* sdev */,
|
||||||
InternalEvent* /* original */,
|
InternalEvent* /* original */,
|
||||||
EventListPtr /* mlist */
|
InternalEvent* /* copy */
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
37
mi/mieq.c
37
mi/mieq.c
@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user