From 5388423eb05daefcc71067b6ab96b6e57c44ef5c Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 16 Nov 2006 20:43:27 +1030 Subject: [PATCH] mieq: EQ processing handles MP devices global: MPX define added to xorg-server.h.in xfree86/common: small fix to avoid byte overflow --- Changelog | 12 ++++++++++++ hw/xfree86/common/xf86Xinput.c | 5 ++++- include/xorg-server.h.in | 3 +++ mi/mieq.c | 26 +++++++++++++++++++++++++- 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/Changelog b/Changelog index 3b5e9add3..87501fb3a 100644 --- a/Changelog +++ b/Changelog @@ -37,3 +37,15 @@ Files: hw/xfree86/common/xf86Xinput.c include/inputstr.h mi/mieq.c + + +mieq: EQ processing handles MP devices + +global: MPX define added to xorg-server.h.in + +xfree86/common: small fix to avoid byte overflow + +Files: + mi/mieq.c + hw/xfree86/common/xf86Xinput.c + include/xserver-config.h.in diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c index 888ad4235..2cb1441db 100644 --- a/hw/xfree86/common/xf86Xinput.c +++ b/hw/xfree86/common/xf86Xinput.c @@ -215,7 +215,10 @@ xf86ActivateDevice(LocalDevicePtr local) dev->coreEvents = local->flags & XI86_ALWAYS_CORE; #ifdef MPX - dev->isMPDev = local->flags & XI86_MP_DEVICE; + if (local->flags & XI86_MP_DEVICE) + dev->isMPDev = TRUE; + else + dev->isMPDev = FALSE; #endif RegisterOtherDevice(dev); diff --git a/include/xorg-server.h.in b/include/xorg-server.h.in index 48196d8b6..c58e2b39a 100644 --- a/include/xorg-server.h.in +++ b/include/xorg-server.h.in @@ -142,6 +142,9 @@ /* Support X Input extension */ #undef XINPUT +/* Support MPX multipointer extension */ +#undef MPX + /* Build XKB */ #undef XKB diff --git a/mi/mieq.c b/mi/mieq.c index b901fbcd6..d19933520 100644 --- a/mi/mieq.c +++ b/mi/mieq.c @@ -24,6 +24,15 @@ in this Software without prior written authorization from The Open Group. * * Author: Keith Packard, MIT X Consortium */ +#ifdef MPX + /* + * MPX additions: + * Copyright © 2006 Peter Hutterer + * License see above. + * Author: Peter Hutterer + * + */ +#endif /* * mieq.c @@ -218,13 +227,28 @@ mieqProcessInputEvents() else if (e->event[0].u.u.type == MotionNotify || e->event[0].u.u.type == ButtonPress || e->event[0].u.u.type == ButtonRelease) { - SwitchCorePointer(e->pDev); +#ifdef MPX + if (!e->pDev->isMPDev) +#endif + SwitchCorePointer(e->pDev); dev = inputInfo.pointer; + } else { dev = e->pDev; } +#ifdef MPX + /* MPX devices send both core and Xi events. Depending on what + * event we have, dev is set to either the core pointer or the + * device. This gives us the right processing function but we need + * to pass the right device in too. + * Any device that is not a MP device is processed as usual. + */ + if (e->pDev->isMPDev) + dev->public.processInputProc(e->event, e->pDev, e->nevents); + else +#endif dev->public.processInputProc(e->event, dev, e->nevents); } }