Hi Dima, On Sun, Nov 29, 2009 at 07:16:37PM -0800, Dima Kogan wrote: > Hi. I modified the evdev driver to allow mousewheel emulation to work > on touchscreen devices. Previously this wasn't possible since > touchscreens report absolute, instead of relative positions, and the > wheel emulation code hooked into the relative position reporting code. > > The bulk is in the first patch; the second patch is not strictly > necessary. I have tested the code on the one touchscreen device I have > (openmoko freerunner) and it seems to work. If I get the thumbs up, I > will modify the non-evdev versions of this code (the "mouse" driver is > the only one, right?) Thanks.
Thanks for the patch. I'm happy to add support for mousewheel emu for absolute devices. Please see the comments below though. > From 4db8b697d2cf4c06b8b1d0384eab9bdc9b638335 Mon Sep 17 00:00:00 2001 > From: Dima Kogan <[email protected]> > Date: Sun, 29 Nov 2009 18:00:08 -0800 > Subject: [PATCH 1/2] allow wheel emulation to work even with > absolute-position devices > > Signed-off-by: Dima Kogan <[email protected]> > --- > src/emuWheel.c | 22 +++++----------------- > src/evdev.c | 23 ++++++++++++++++++++--- > src/evdev.h | 2 +- > 3 files changed, 26 insertions(+), 21 deletions(-) > > diff --git a/src/emuWheel.c b/src/emuWheel.c > index e7b2f98..734b11a 100644 > --- a/src/emuWheel.c > +++ b/src/emuWheel.c > @@ -95,11 +95,10 @@ EvdevWheelEmuFilterButton(InputInfoPtr pInfo, unsigned > int button, int value) > > /* Filter mouse wheel events */ > BOOL > -EvdevWheelEmuFilterMotion(InputInfoPtr pInfo, struct input_event *pEv) > +EvdevWheelEmuFilterMotion(InputInfoPtr pInfo, BOOL isX, int delta) > { > EvdevPtr pEvdev = (EvdevPtr)pInfo->private; > WheelAxisPtr pAxis = NULL, pOtherAxis = NULL; > - int value = pEv->value; > > /* Has wheel emulation been configured to be enabled? */ > if (!pEvdev->emulateWheel.enabled) > @@ -117,20 +116,12 @@ EvdevWheelEmuFilterMotion(InputInfoPtr pInfo, struct > input_event *pEv) > return TRUE; > } > > - /* We don't want to intercept real mouse wheel events */ > - switch(pEv->code) { > - case REL_X: > + if (isX) { > pAxis = &(pEvdev->emulateWheel.X); > pOtherAxis = &(pEvdev->emulateWheel.Y); > - break; > - > - case REL_Y: > + } else { > pAxis = &(pEvdev->emulateWheel.Y); > pOtherAxis = &(pEvdev->emulateWheel.X); > - break; instead of modifying the function signature and introducing a lot of churn, you could just change the switch statement to: switch(pEv->code) { case REL_X: case ABS_X: blahblah ... } this should give you the same result but make the code a lot cleaner. of course, the other hunks need to be adjusted for that then but the diff should be a lot smaller. Cheers, Peter _______________________________________________ xorg-devel mailing list [email protected] http://lists.x.org/mailman/listinfo/xorg-devel
