dmx: remove dmx-internal event queue.
The EQ is in the DIX now. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
545f11139d
commit
2d46678762
|
@ -195,8 +195,8 @@ miPointerScreenFuncRec dmxPointerCursorFuncs =
|
||||||
dmxCursorOffScreen,
|
dmxCursorOffScreen,
|
||||||
dmxCrossScreen,
|
dmxCrossScreen,
|
||||||
dmxWarpCursor,
|
dmxWarpCursor,
|
||||||
dmxeqEnqueue, /*XXX incompatible type/function! */
|
NULL,
|
||||||
dmxeqSwitchScreen
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -71,10 +71,6 @@ void InitInput(int argc, char **argv)
|
||||||
|
|
||||||
for (i = 0, dmxInput = &dmxInputs[0]; i < dmxNumInputs; i++, dmxInput++)
|
for (i = 0, dmxInput = &dmxInputs[0]; i < dmxNumInputs; i++, dmxInput++)
|
||||||
dmxInputInit(dmxInput);
|
dmxInputInit(dmxInput);
|
||||||
if (!dmxeqInitialized()) {
|
|
||||||
dmxLog(dmxWarning, "Use keyboard/mouse pair with the first -input\n");
|
|
||||||
dmxLog(dmxFatal, "At least one core keyboard/mouse pair required\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
mieqInit();
|
mieqInit();
|
||||||
}
|
}
|
||||||
|
|
|
@ -140,8 +140,6 @@ extern void dmxInputLogDevices(void);
|
||||||
extern void dmxUpdateWindowInfo(DMXUpdateType type, WindowPtr pWindow);
|
extern void dmxUpdateWindowInfo(DMXUpdateType type, WindowPtr pWindow);
|
||||||
|
|
||||||
/* These functions are defined in input/dmxeq.c */
|
/* These functions are defined in input/dmxeq.c */
|
||||||
extern Bool dmxeqInitialized(void);
|
|
||||||
extern void dmxeqEnqueue(DeviceIntPtr pDev, xEvent *e);
|
|
||||||
extern void dmxeqSwitchScreen(DeviceIntPtr pDev, ScreenPtr pScreen, Bool fromDIX);
|
extern void dmxeqSwitchScreen(DeviceIntPtr pDev, ScreenPtr pScreen, Bool fromDIX);
|
||||||
|
|
||||||
/* This type is used in input/dmxevents.c. Also, these functions are
|
/* This type is used in input/dmxevents.c. Also, these functions are
|
||||||
|
|
|
@ -88,209 +88,3 @@
|
||||||
#define DMXDBG2(f,a,b)
|
#define DMXDBG2(f,a,b)
|
||||||
#define DMXDBG5(f,a,b,c,d,e)
|
#define DMXDBG5(f,a,b,c,d,e)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** The size of our queue. (The queue provided by mi/mieq.c has a size
|
|
||||||
* of 256.) */
|
|
||||||
#define QUEUE_SIZE 256
|
|
||||||
|
|
||||||
/** Information about the event. */
|
|
||||||
typedef struct _Event {
|
|
||||||
xEvent event; /**< Event. */
|
|
||||||
ScreenPtr pScreen; /**< Screen on which event occurred. */
|
|
||||||
deviceValuator valuator; /**< XInput device valuator information. */
|
|
||||||
DeviceIntPtr pDev;
|
|
||||||
} EventRec, *EventPtr;
|
|
||||||
|
|
||||||
/** Event queue. */
|
|
||||||
typedef struct _EventQueue {
|
|
||||||
HWEventQueueType head; /**< Queue head; must be long for SetInputCheck. */
|
|
||||||
HWEventQueueType tail; /**< Queue tail; must be long for SetInputCheck. */
|
|
||||||
CARD32 lastEventTime; /**< To avoid time running backwards. */
|
|
||||||
Bool lastMotion; /**< True if last event was motion. */
|
|
||||||
EventRec events[QUEUE_SIZE]; /**< Static allocation for signals. */
|
|
||||||
DevicePtr pKbd, pPtr; /**< Device pointers (to get funcs) */
|
|
||||||
ScreenPtr pEnqueueScreen;/**< Screen events are delivered to. */
|
|
||||||
ScreenPtr pDequeueScreen;/**< Screen events are dispatched to. */
|
|
||||||
} EventQueueRec, *EventQueuePtr;
|
|
||||||
|
|
||||||
static EventQueueRec dmxEventQueue;
|
|
||||||
static Bool dmxeqInitializedFlag = FALSE;
|
|
||||||
|
|
||||||
Bool dmxeqInitialized(void)
|
|
||||||
{
|
|
||||||
return dmxeqInitializedFlag;
|
|
||||||
}
|
|
||||||
|
|
||||||
Bool dmxeqInit(DevicePtr pKbd, DevicePtr pPtr)
|
|
||||||
{
|
|
||||||
static unsigned long dmxGeneration = 0;
|
|
||||||
|
|
||||||
if (dmxGeneration == serverGeneration && dmxeqInitializedFlag)
|
|
||||||
return FALSE;
|
|
||||||
dmxGeneration = serverGeneration;
|
|
||||||
dmxeqInitializedFlag = TRUE;
|
|
||||||
dmxEventQueue.head = 0;
|
|
||||||
dmxEventQueue.tail = 0;
|
|
||||||
dmxEventQueue.lastEventTime = GetTimeInMillis();
|
|
||||||
dmxEventQueue.pKbd = pKbd;
|
|
||||||
dmxEventQueue.pPtr = pPtr;
|
|
||||||
dmxEventQueue.lastMotion = FALSE;
|
|
||||||
dmxEventQueue.pEnqueueScreen = screenInfo.screens[0];
|
|
||||||
dmxEventQueue.pDequeueScreen = dmxEventQueue.pEnqueueScreen;
|
|
||||||
SetInputCheck(&dmxEventQueue.head, &dmxEventQueue.tail);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function adds an event to the end of the queue. If the event is
|
|
||||||
* an XInput event, then the next event (the valuator event) is also
|
|
||||||
* stored in the queue. If the new event has a time before the time of
|
|
||||||
* the last event currently on the queue, then the time is updated for
|
|
||||||
* the new event.
|
|
||||||
*
|
|
||||||
* Must be reentrant with ProcessInputEvents. Assumption: dmxeqEnqueue
|
|
||||||
* will never be interrupted. If this is called from both signal
|
|
||||||
* handlers and regular code, make sure the signal is suspended when
|
|
||||||
* called from regular code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
void dmxeqEnqueue(DeviceIntPtr pDev, xEvent *e)
|
|
||||||
{
|
|
||||||
HWEventQueueType oldtail, newtail;
|
|
||||||
Bool isMotion;
|
|
||||||
deviceKeyButtonPointer *ev;
|
|
||||||
|
|
||||||
oldtail = dmxEventQueue.tail;
|
|
||||||
isMotion = e->u.u.type == MotionNotify;
|
|
||||||
if (isMotion
|
|
||||||
&& dmxEventQueue.lastMotion
|
|
||||||
&& oldtail != dmxEventQueue.head) {
|
|
||||||
if (oldtail == 0) oldtail = QUEUE_SIZE;
|
|
||||||
oldtail = oldtail - 1;
|
|
||||||
} else {
|
|
||||||
newtail = oldtail + 1;
|
|
||||||
if (newtail == QUEUE_SIZE) newtail = 0;
|
|
||||||
/* Toss events which come in late */
|
|
||||||
if (newtail == dmxEventQueue.head) return;
|
|
||||||
dmxEventQueue.tail = newtail;
|
|
||||||
}
|
|
||||||
DMXDBG2("dmxeqEnqueue %d %d\n", dmxEventQueue.head, dmxEventQueue.tail);
|
|
||||||
dmxEventQueue.lastMotion = isMotion;
|
|
||||||
dmxEventQueue.events[oldtail].pScreen = dmxEventQueue.pEnqueueScreen;
|
|
||||||
|
|
||||||
/* Store the event in the queue */
|
|
||||||
dmxEventQueue.events[oldtail].event = *e;
|
|
||||||
dmxEventQueue.events[oldtail].pDev = pDev;
|
|
||||||
/* If this is an XInput event, store the
|
|
||||||
* valuator event, too */
|
|
||||||
ev = (deviceKeyButtonPointer *)e;
|
|
||||||
if (e->u.u.type >= LASTEvent && (ev->deviceid & MORE_EVENTS))
|
|
||||||
dmxEventQueue.events[oldtail].valuator = *(deviceValuator *)(ev+1);
|
|
||||||
|
|
||||||
/* Make sure that event times don't go
|
|
||||||
* backwards - this is "unnecessary",
|
|
||||||
* but very useful */
|
|
||||||
if (e->u.keyButtonPointer.time < dmxEventQueue.lastEventTime
|
|
||||||
&& dmxEventQueue.lastEventTime - e->u.keyButtonPointer.time < 10000) {
|
|
||||||
dmxEventQueue.events[oldtail].event.u.keyButtonPointer.time =
|
|
||||||
dmxEventQueue.lastEventTime;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Make \a pScreen the new screen for enqueueing events. If \a fromDIX
|
|
||||||
* is TRUE, also make \a pScreen the new screen for dequeuing events. */
|
|
||||||
void dmxeqSwitchScreen(DeviceIntPtr pDev, ScreenPtr pScreen, Bool fromDIX)
|
|
||||||
{
|
|
||||||
dmxEventQueue.pEnqueueScreen = pScreen;
|
|
||||||
if (fromDIX) dmxEventQueue.pDequeueScreen = pScreen;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void dmxeqProcessXInputEvent(xEvent *xe, EventRec *e)
|
|
||||||
{
|
|
||||||
deviceKeyButtonPointer *ev = (deviceKeyButtonPointer *)xe;
|
|
||||||
int id = ev->deviceid & DEVICE_BITS;
|
|
||||||
DeviceIntPtr pDevice;
|
|
||||||
|
|
||||||
dixLookupDevice(&pDevice, id, serverClient, DixUnknownAccess);
|
|
||||||
if (!pDevice) {
|
|
||||||
dmxLog(dmxError, "dmxeqProcessInputEvents: id %d not found\n", id);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!pDevice->public.processInputProc) {
|
|
||||||
dmxLog(dmxError,
|
|
||||||
"dmxeqProcessInputEvents: no processInputProc for"
|
|
||||||
" device id %d (%s)\n", id, pDevice->name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ev->deviceid & MORE_EVENTS) {
|
|
||||||
xe[1] = *(xEvent *)(&e->valuator);
|
|
||||||
pDevice->public.processInputProc(xe, pDevice, 2);
|
|
||||||
} else {
|
|
||||||
pDevice->public.processInputProc(xe, pDevice, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function is called from #ProcessInputEvents() to remove events
|
|
||||||
* from the queue and process them.
|
|
||||||
*/
|
|
||||||
void dmxeqProcessInputEvents(void)
|
|
||||||
{
|
|
||||||
EventRec *e;
|
|
||||||
int x, y;
|
|
||||||
xEvent xe[2];
|
|
||||||
|
|
||||||
while (dmxEventQueue.head != dmxEventQueue.tail) {
|
|
||||||
dmxDPMSWakeup(); /* Handles screen saver and DPMS */
|
|
||||||
e = &dmxEventQueue.events[dmxEventQueue.head];
|
|
||||||
DMXDBG5("dmxeqProcessInputEvents: type=%d screen=%p,%p root=%d,%d\n",
|
|
||||||
e->event.u.u.type,
|
|
||||||
e->pScreen, dmxEventQueue.pDequeueScreen,
|
|
||||||
e->event.u.keyButtonPointer.rootX,
|
|
||||||
e->event.u.keyButtonPointer.rootY);
|
|
||||||
/*
|
|
||||||
* Assumption - screen switching can only occur on core motion events
|
|
||||||
*/
|
|
||||||
if (e->event.u.u.type == MotionNotify
|
|
||||||
&& e->pScreen != dmxEventQueue.pDequeueScreen) {
|
|
||||||
dmxEventQueue.pDequeueScreen = e->pScreen;
|
|
||||||
x = e->event.u.keyButtonPointer.rootX;
|
|
||||||
y = e->event.u.keyButtonPointer.rootY;
|
|
||||||
if (dmxEventQueue.head == QUEUE_SIZE - 1) dmxEventQueue.head = 0;
|
|
||||||
else ++dmxEventQueue.head;
|
|
||||||
NewCurrentScreen(e->pDev, dmxEventQueue.pDequeueScreen, x, y);
|
|
||||||
} else {
|
|
||||||
xe[0] = e->event;
|
|
||||||
if (dmxEventQueue.head == QUEUE_SIZE - 1) dmxEventQueue.head = 0;
|
|
||||||
else ++dmxEventQueue.head;
|
|
||||||
switch (xe[0].u.u.type) {
|
|
||||||
case KeyPress:
|
|
||||||
case KeyRelease:
|
|
||||||
if (!dmxEventQueue.pKbd) {
|
|
||||||
dmxLog(dmxError, "dmxeqProcessInputEvents: No keyboard\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dmxEventQueue.pKbd
|
|
||||||
->processInputProc(xe,
|
|
||||||
(DeviceIntPtr)dmxEventQueue.pKbd, 1);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
dmxeqProcessXInputEvent(xe, e);
|
|
||||||
break;
|
|
||||||
case ButtonPress:
|
|
||||||
case ButtonRelease:
|
|
||||||
case MotionNotify:
|
|
||||||
if (!dmxEventQueue.pPtr) {
|
|
||||||
dmxLog(dmxError, "dmxeqProcessInputEvents: No mouse\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dmxEventQueue.pPtr
|
|
||||||
->processInputProc(xe,
|
|
||||||
(DeviceIntPtr)dmxEventQueue.pPtr, 1);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -155,59 +155,6 @@ static int dmxCheckFunctionKeys(DMXLocalInputInfoPtr dmxLocal,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dmxEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal, xEvent *e,
|
|
||||||
DMXBlockType block)
|
|
||||||
{
|
|
||||||
xEvent xE[2];
|
|
||||||
deviceKeyButtonPointer *xev = (deviceKeyButtonPointer *)xE;
|
|
||||||
deviceValuator *xv = (deviceValuator *)xev+1;
|
|
||||||
DeviceIntPtr pDevice = dmxLocal->pDevice;
|
|
||||||
DMXInputInfo *dmxInput = &dmxInputs[dmxLocal->inputIdx];
|
|
||||||
int type = e->u.u.type;
|
|
||||||
|
|
||||||
switch (e->u.u.type) {
|
|
||||||
case KeyPress:
|
|
||||||
type = DeviceKeyPress;
|
|
||||||
break;
|
|
||||||
case KeyRelease:
|
|
||||||
type = DeviceKeyRelease;
|
|
||||||
break;
|
|
||||||
case ButtonPress:
|
|
||||||
type = DeviceButtonPress;
|
|
||||||
break;
|
|
||||||
case ButtonRelease:
|
|
||||||
type = DeviceButtonRelease;
|
|
||||||
break;
|
|
||||||
case MotionNotify:
|
|
||||||
dmxLog(dmxError,
|
|
||||||
"dmxEnqueueExtEvent: MotionNotify not allowed here\n");
|
|
||||||
return;
|
|
||||||
default:
|
|
||||||
if (e->u.u.type == ProximityIn || e->u.u.type == ProximityOut)
|
|
||||||
break;
|
|
||||||
dmxLogInput(dmxInput,
|
|
||||||
"dmxEnqueueExtEvent: Unhandled %s event (%d)\n",
|
|
||||||
e->u.u.type >= LASTEvent ? "extension" : "non-extension",
|
|
||||||
e->u.u.type);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
xev->type = type;
|
|
||||||
xev->detail = e->u.u.detail;
|
|
||||||
xev->deviceid = pDevice->id | MORE_EVENTS;
|
|
||||||
xev->time = e->u.keyButtonPointer.time;
|
|
||||||
|
|
||||||
xv->type = DeviceValuator;
|
|
||||||
xv->deviceid = pDevice->id;
|
|
||||||
xv->num_valuators = 0;
|
|
||||||
xv->first_valuator = 0;
|
|
||||||
|
|
||||||
if (block)
|
|
||||||
dmxSigioBlock();
|
|
||||||
dmxeqEnqueue(pDevice, xE);
|
|
||||||
if (block)
|
|
||||||
dmxSigioUnblock();
|
|
||||||
}
|
|
||||||
|
|
||||||
DMXScreenInfo *dmxFindFirstScreen(int x, int y)
|
DMXScreenInfo *dmxFindFirstScreen(int x, int y)
|
||||||
{
|
{
|
||||||
|
@ -291,7 +238,7 @@ dmxCoreMotion(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
|
||||||
pScreen->myNum, dmxScreen->index, localX, localY);
|
pScreen->myNum, dmxScreen->index, localX, localY);
|
||||||
if (block)
|
if (block)
|
||||||
dmxSigioBlock();
|
dmxSigioBlock();
|
||||||
dmxeqProcessInputEvents();
|
mieqProcessInputEvents();
|
||||||
miPointerSetScreen(inputInfo.pointer, dmxScreen->index,
|
miPointerSetScreen(inputInfo.pointer, dmxScreen->index,
|
||||||
localX, localY);
|
localX, localY);
|
||||||
if (pDev)
|
if (pDev)
|
||||||
|
@ -344,6 +291,8 @@ static void dmxExtMotion(DMXLocalInputInfoPtr dmxLocal,
|
||||||
int thisY = 0;
|
int thisY = 0;
|
||||||
int i;
|
int i;
|
||||||
int count;
|
int count;
|
||||||
|
EventListPtr events;
|
||||||
|
int nevents;
|
||||||
|
|
||||||
memset(xE, 0, sizeof(xE));
|
memset(xE, 0, sizeof(xE));
|
||||||
|
|
||||||
|
@ -422,8 +371,12 @@ static void dmxExtMotion(DMXLocalInputInfoPtr dmxLocal,
|
||||||
|
|
||||||
if (block)
|
if (block)
|
||||||
dmxSigioBlock();
|
dmxSigioBlock();
|
||||||
dmxPointerPutMotionEvent(pDevice, firstAxis, axesCount, v, xev->time);
|
GetEventList(&events);
|
||||||
dmxeqEnqueue(pDevice, xE);
|
nevents = GetPointerEvents(events, pDevice, MotionNotify, 0, POINTER_ABSOLUTE,
|
||||||
|
firstAxis, axesCount, v);
|
||||||
|
for (i = 0; i < nevents; i++)
|
||||||
|
mieqEnqueue(pDevice, (InternalEvent*)(events + i)->event);
|
||||||
|
|
||||||
if (block)
|
if (block)
|
||||||
dmxSigioUnblock();
|
dmxSigioUnblock();
|
||||||
}
|
}
|
||||||
|
@ -431,14 +384,14 @@ static void dmxExtMotion(DMXLocalInputInfoPtr dmxLocal,
|
||||||
static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
|
static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
|
||||||
XEvent *e, DMXBlockType block)
|
XEvent *e, DMXBlockType block)
|
||||||
{
|
{
|
||||||
xEvent xE[2];
|
|
||||||
deviceKeyButtonPointer *xev = (deviceKeyButtonPointer *)xE;
|
|
||||||
deviceValuator *xv = (deviceValuator *)xev+1;
|
|
||||||
int type;
|
int type;
|
||||||
int event = -1;
|
int event = -1;
|
||||||
XDeviceKeyEvent *ke = (XDeviceKeyEvent *)e;
|
XDeviceKeyEvent *ke = (XDeviceKeyEvent *)e;
|
||||||
XDeviceMotionEvent *me = (XDeviceMotionEvent *)e;
|
XDeviceMotionEvent *me = (XDeviceMotionEvent *)e;
|
||||||
DeviceIntPtr pDevice = dmxLocal->pDevice;
|
DeviceIntPtr pDevice = dmxLocal->pDevice;
|
||||||
|
int valuators[6];
|
||||||
|
EventListPtr events;
|
||||||
|
int nevents, i;
|
||||||
|
|
||||||
if (!e)
|
if (!e)
|
||||||
return -1; /* No extended event passed, cannot handle */
|
return -1; /* No extended event passed, cannot handle */
|
||||||
|
@ -463,11 +416,11 @@ static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case XI_DeviceValuator: event = DeviceValuator; break;
|
case XI_DeviceValuator: event = DeviceValuator; break;
|
||||||
case XI_DeviceKeyPress: event = DeviceKeyPress; break;
|
case XI_DeviceKeyPress: event = KeyPress; break;
|
||||||
case XI_DeviceKeyRelease: event = DeviceKeyRelease; break;
|
case XI_DeviceKeyRelease: event = KeyRelease; break;
|
||||||
case XI_DeviceButtonPress: event = DeviceButtonPress; break;
|
case XI_DeviceButtonPress: event = ButtonPress; break;
|
||||||
case XI_DeviceButtonRelease: event = DeviceButtonRelease; break;
|
case XI_DeviceButtonRelease: event = ButtonRelease; break;
|
||||||
case XI_DeviceMotionNotify: event = DeviceMotionNotify; break;
|
case XI_DeviceMotionNotify: event = MotionNotify; break;
|
||||||
case XI_DeviceFocusIn: event = DeviceFocusIn; break;
|
case XI_DeviceFocusIn: event = DeviceFocusIn; break;
|
||||||
case XI_DeviceFocusOut: event = DeviceFocusOut; break;
|
case XI_DeviceFocusOut: event = DeviceFocusOut; break;
|
||||||
case XI_ProximityIn: event = ProximityIn; break;
|
case XI_ProximityIn: event = ProximityIn; break;
|
||||||
|
@ -479,35 +432,62 @@ static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
|
||||||
case XI_DeviceButtonstateNotify: event = DeviceStateNotify; break;
|
case XI_DeviceButtonstateNotify: event = DeviceStateNotify; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define EXTRACT_VALUATORS(ke, valuators) \
|
||||||
|
valuators[0] = ke->axis_data[0]; \
|
||||||
|
valuators[1] = ke->axis_data[1]; \
|
||||||
|
valuators[2] = ke->axis_data[2]; \
|
||||||
|
valuators[3] = ke->axis_data[3]; \
|
||||||
|
valuators[4] = ke->axis_data[4]; \
|
||||||
|
valuators[5] = ke->axis_data[5]; \
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case XI_DeviceKeyPress:
|
case XI_DeviceKeyPress:
|
||||||
case XI_DeviceKeyRelease:
|
case XI_DeviceKeyRelease:
|
||||||
case XI_DeviceButtonPress:
|
EXTRACT_VALUATORS(ke, valuators);
|
||||||
case XI_DeviceButtonRelease:
|
|
||||||
case XI_ProximityIn:
|
|
||||||
case XI_ProximityOut:
|
|
||||||
xev->type = event;
|
|
||||||
xev->detail = ke->keycode; /* same as ->button */
|
|
||||||
xev->deviceid = dmxLocal->pDevice->id | MORE_EVENTS;
|
|
||||||
xev->time = GetTimeInMillis();
|
|
||||||
|
|
||||||
xv->type = DeviceValuator;
|
|
||||||
xv->deviceid = dmxLocal->pDevice->id;
|
|
||||||
xv->num_valuators = ke->axes_count;
|
|
||||||
xv->first_valuator = ke->first_axis;
|
|
||||||
xv->valuator0 = ke->axis_data[0];
|
|
||||||
xv->valuator1 = ke->axis_data[1];
|
|
||||||
xv->valuator2 = ke->axis_data[2];
|
|
||||||
xv->valuator3 = ke->axis_data[3];
|
|
||||||
xv->valuator4 = ke->axis_data[4];
|
|
||||||
xv->valuator5 = ke->axis_data[5];
|
|
||||||
|
|
||||||
if (block)
|
if (block)
|
||||||
dmxSigioBlock();
|
dmxSigioBlock();
|
||||||
dmxeqEnqueue(pDevice, xE);
|
GetEventList(&events);
|
||||||
|
nevents = GetKeyboardValuatorEvents(events, pDevice, event,
|
||||||
|
ke->keycode, ke->first_axis,
|
||||||
|
ke->axes_count, valuators);
|
||||||
|
for (i = 0; i < nevents; i++)
|
||||||
|
mieqEnqueue(pDevice, (InternalEvent*)(events + i)->event);
|
||||||
|
|
||||||
if (block)
|
if (block)
|
||||||
dmxSigioUnblock();
|
dmxSigioUnblock();
|
||||||
break;
|
break;
|
||||||
|
case XI_DeviceButtonPress:
|
||||||
|
case XI_DeviceButtonRelease:
|
||||||
|
EXTRACT_VALUATORS(ke, valuators);
|
||||||
|
if (block)
|
||||||
|
dmxSigioBlock();
|
||||||
|
GetEventList(&events);
|
||||||
|
nevents = GetPointerEvents(events, pDevice, event, ke->keycode,
|
||||||
|
POINTER_ABSOLUTE, ke->first_axis,
|
||||||
|
ke->axes_count, valuators);
|
||||||
|
for (i = 0; i < nevents; i++)
|
||||||
|
mieqEnqueue(pDevice, (InternalEvent*)(events + i)->event);
|
||||||
|
|
||||||
|
if (block)
|
||||||
|
dmxSigioUnblock();
|
||||||
|
break;
|
||||||
|
case XI_ProximityIn:
|
||||||
|
case XI_ProximityOut:
|
||||||
|
EXTRACT_VALUATORS(ke, valuators);
|
||||||
|
if (block)
|
||||||
|
dmxSigioBlock();
|
||||||
|
GetEventList(&events);
|
||||||
|
nevents = GetProximityEvents(events, pDevice, event,
|
||||||
|
ke->first_axis, ke->axes_count,
|
||||||
|
valuators);
|
||||||
|
for (i = 0; i < nevents; i++)
|
||||||
|
mieqEnqueue(pDevice, (InternalEvent*)(events + i)->event);
|
||||||
|
|
||||||
|
if (block)
|
||||||
|
dmxSigioUnblock();
|
||||||
|
break;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
case XI_DeviceMotionNotify:
|
case XI_DeviceMotionNotify:
|
||||||
dmxExtMotion(dmxLocal, me->axis_data, me->first_axis, me->axes_count,
|
dmxExtMotion(dmxLocal, me->axis_data, me->first_axis, me->axes_count,
|
||||||
|
|
|
@ -545,7 +545,7 @@ static void dmxProcessInputEvents(DMXInputInfo *dmxInput)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
dmxeqProcessInputEvents();
|
mieqProcessInputEvents();
|
||||||
#if 00 /*BP*/
|
#if 00 /*BP*/
|
||||||
miPointerUpdate();
|
miPointerUpdate();
|
||||||
#endif
|
#endif
|
||||||
|
@ -1071,12 +1071,6 @@ void dmxInputInit(DMXInputInfo *dmxInput)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pPointer && pKeyboard) {
|
|
||||||
if (dmxeqInit(&pKeyboard->public, &pPointer->public))
|
|
||||||
dmxLogInput(dmxInput, "Using %s and %s as true core devices\n",
|
|
||||||
pKeyboard->name, pPointer->name);
|
|
||||||
}
|
|
||||||
|
|
||||||
dmxInput->processInputEvents = dmxProcessInputEvents;
|
dmxInput->processInputEvents = dmxProcessInputEvents;
|
||||||
dmxInput->detached = False;
|
dmxInput->detached = False;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue