← Back to team overview

mactel-support team mailing list archive

[Bug 381884] Re: Appletouch touchpad driver produces jumpy two-fingered scrolling

 

Hey everyone.
  I have been hacking away at appletouch.c for a little while now and have had minor success on various fronts.  The reason I am looking at appletouch, not synaptics, is because ideally we want the driver to not 'average' the mouse position when > 2 fingers are being used.  Synaptics only gets the scroll x,y position and finger count.  It would be tough to "unaverage" out the x,y params in the higher level driver.

  So far I have had success in disabling scrolling altogether, to allow
for a fully stable right click.  This means that as soon as I put > 1
finger on the track pad, the cursor will not move, allowing a right
click functionality.  However, the way I implemented it does not allow
for any kind of cursor movement, at all, with more than 1 finger on the
pad.  The side-scrolling feature still works, and in fact this
configuration is pretty nice.  However, ideally we want 2-finger
scrolling.

  My second pseudo-success has come in that I can get 2-finger scrolling
to work without jumpiness, but only if the first finger to touch the pad
is on "top" of the bottom finger (closer to the keyboard).  If the first
finger is furthest from the keyboard, however, jumpy behaviour comes
back.

  I have a few ideas I'm going to try out today.  I'll post back here
with success.  I see, at a minimum, a patch for people who do not want
2-finger scrolling but DO want 2-finger right clicking.

Blaine

PATCH for stable right click, disables 2-finger scrolling.  Edit /etc/hal/fdi/policy/appletouch.fdi and turn on vertical edge scrolling.
/drivers/input/mouse/appletouch.c

620,623c620,629
< 			x = (dev->x_old * 3 + x) >> 2;
< 			y = (dev->y_old * 3 + y) >> 2;
< 			dev->x_old = x;
< 			dev->y_old = y;
---
> 			// *** Fixes the right-click instability problem, but disables 2-finger scrolling ***
> 			if ((max(x_f, y_f)) == 2) {
> 				x = dev->x_old;
> 				y = dev->y_old;
> 			} else {
> 				x = (dev->x_old * 3 + x) >> 2;
> 				y = (dev->y_old * 3 + y) >> 2;
> 				dev->x_old = x;
> 				dev->y_old = y;
> 			}

-- 
Appletouch touchpad driver produces jumpy two-fingered scrolling
https://bugs.launchpad.net/bugs/381884
You received this bug notification because you are a member of Mactel
Support, which is a direct subscriber.

Status in The Linux Kernel: New
Status in Mactel Support: New
Status in “xserver-xorg-input-synaptics” package in Ubuntu: Confirmed

Bug description:
Binary package hint: xserver-xorg-input-synaptics

My system is: Linux richard-laptop 2.6.28-11-generic #42-Ubuntu SMP Fri Apr 17 01:58:03 UTC 2009 x86_64 GNU/Linux.  However, this issue applies to at least Intrepid and Jaunty, 32 and 64 bit, running on Apple Mac hardware that uses an Appletouch touchpad.  It has also been reported in the Gentoo and Debian forums.

>From what I can find on the Net, the Appletouch touchpad was first used in February 2005 for the G4 aluminium PowerBook, and last used for the Macbook Pro in its 3rd generation, then 4th generation Intel Macbook in early 2008.

The issue is with two-fingered scrolling.  The Appletouch features the ability to detect two (or three) touches.  OS X uses this feature to enable scrolling, similar to a scrollwheel on a mouse.

The synaptics driver causes the simulated scrollwheel to start moving as soon as one places a second finger on the touchpad.  That is to say, placing a second finger causes the trackpad driver to deliver scrolling signals, which means that attempts at vertical scrolling feels jumpy, or over sensitive.

There was an update to the OS X driver that fixed this situation for Apple.  I guess that it detects the second finger and programmatically ignores the first few scrollticks, thereby 'deadening' the output.  This is what we need.

The synaptics driver allows for some modification, but not for multitouch input.  This needs to be fixed at source code level.

Richard