dix: added isMPdev field to _DeviceIntRec, is used in GetPointerEvents()

mieq:   avoid merging events from different devices in mieqEnqueue()

xfree86/common
        isMPdev field used from xf86ActivateDevice(), xf86PostMotionEvent()
        and xf86PostButtonEvent()
This commit is contained in:
Peter Hutterer 2006-11-16 15:11:14 +10:30 committed by Peter Hutterer
parent 7ce2dc5784
commit c957a16180
5 changed files with 31 additions and 3 deletions

View File

@ -23,3 +23,17 @@ Files:
configure.ac
include/dix-config.h.in
dix: added isMPdev field to _DeviceIntRec, is used in GetPointerEvents()
mieq: avoid merging events from different devices in mieqEnqueue()
xfree86/common
isMPdev field used from xf86ActivateDevice(), xf86PostMotionEvent()
and xf86PostButtonEvent()
Files:
dix/getevents.c
hw/xfree86/common/xf86Xinput.c
include/inputstr.h
mi/mieq.c

View File

@ -636,7 +636,12 @@ GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons,
num_valuators, valuators);
}
#ifdef MPX
/* MPX devices always send core events */
if (pDev->coreEvents || pDev->isMPDev) {
#else
if (pDev->coreEvents) {
#endif
events->u.u.type = type;
events->u.keyButtonPointer.time = ms;
events->u.keyButtonPointer.rootX = x;

View File

@ -215,7 +215,7 @@ xf86ActivateDevice(LocalDevicePtr local)
dev->coreEvents = local->flags & XI86_ALWAYS_CORE;
#ifdef MPX
dev->coreEvents |= local->flags & XI86_MP_DEVICE;
dev->isMPDev = local->flags & XI86_MP_DEVICE;
#endif
RegisterOtherDevice(dev);
@ -464,7 +464,7 @@ xf86PostMotionEvent(DeviceIntPtr device,
flags = POINTER_RELATIVE | POINTER_ACCELERATE;
#ifdef MPX
if (device->coreEvents & XI86_MP_DEVICE)
if (device->isMPDev)
flags |= POINTER_MULTIPOINTER;
#endif
@ -541,7 +541,7 @@ xf86PostButtonEvent(DeviceIntPtr device,
flags = POINTER_RELATIVE;
#ifdef MPX
if (device->coreEvents & XI86_MP_DEVICE)
if (device->isMPDev)
flags |= POINTER_MULTIPOINTER;
#endif

View File

@ -288,6 +288,9 @@ typedef struct _DeviceIntRec {
Bool inited; /* TRUE if INIT returns Success */
Bool enabled; /* TRUE if ON returns Success */
Bool coreEvents; /* TRUE if device also sends core */
#ifdef MPX
Bool isMPDev; /* TRUE if multipointer device */
#endif
GrabPtr grab; /* the grabber - used by DIX */
struct {
Bool frozen;

View File

@ -101,6 +101,12 @@ mieqEnqueue(DeviceIntPtr pDev, xEvent *e)
deviceKeyButtonPointer *lastkbp = (deviceKeyButtonPointer *)
&laste->event[0];
#ifdef MPX
/* avoid merging events from different devices */
if (e->u.u.type == MotionNotify && pDev->isMPDev)
isMotion = pDev->id;
else
#endif
if (e->u.u.type == MotionNotify)
isMotion = inputInfo.pointer->id;
else if (e->u.u.type == DeviceMotionNotify)