[PATCH] evdev: allow mouse wheel emulation to work even with absolute-position devices (like touchscreens)
Dima Kogan
dkogan at cds.caltech.edu
Sat Dec 5 14:14:21 PST 2009
Hi Peter,
Here's the new patch. Let me know when you get a chance to try it out.
Thanks.
Dima
On Wed, 2 Dec 2009 10:15:16 +1000
Peter Hutterer <peter.hutterer at who-t.net> wrote:
> 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 <dkogan at secretsauce.net>
> > 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 <dkogan at cds.caltech.edu>
> > ---
> > 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-allow-wheel-emulation-to-work-with-absolute-position.patch
Type: text/x-patch
Size: 0 bytes
Desc: not available
Url : http://lists.x.org/archives/xorg-devel/attachments/20091205/05cbb40a/attachment.bin
More information about the xorg-devel
mailing list