Synaptics: y movements moves 2 pixels each step, why?

Mildred Ki'Lya ml.mildred593 at online.fr
Sat Nov 8 09:37:10 PST 2008


Hi,

A little while ago, I promised a patch to support orientation in the
synaptics driver, this way, movements on the trackpad be consistent with
the screen orientation (set using XRandR).

For those who want the full story, read on. If you are not so
interested, you can skip until after the diagram.


Attached: the first version of my patch. it has still issues with the
scrolling, but except that, it seems to work fine.

But now, I have a problem: when the screen and the trackpad are
oriented left, it seems the new Y axis is over-sensitive, and
relatively, movements along the new X axis seems very slow. Combined
with the fact that my trackpad is more sensitive along that direction
(physically, it's from left to right), it makes the feature almost
unusable.

A little diagram to show you what I mean :


(The numbers shown are the coordinates of the trackpad as reported to
synaptics. So even though the trackpad is wider than higher, you can
see it is much more precise horizontally.)


       new    __
orientation /               Keyboard
           |
           V     ,-----------------------------. 10
                 |                             |
                 |  ^ new x                    |
left side of     |  |                          |       Right side of
  the laptop     |  |                          |       the laptop
                 |  +----------------->        |
                 |              new y          |
                 `-----------------------------' 350
                 200                        1100




So, I think I found one of the sources of that problem: It is
impossible with the trackpad to move the mouse cursor of only one pixel
downwards, the minimum is two pixel as I have measured.

Try this for example, take an image which as alternatively one while
pixel and one colored pixel, use a screen magnifier and configure the
zoom factor so you can see something and try to move the mouse
downwards with the trackpad over this canvas (10x for me, you can try
the gnome-magnifier, disable any 3D desktop effects and run: magnifier -v
-z 10). I don't know for you, but I was unable to move only one pixel.
With a regular mouse, it's possible.

But ... synaptics seems to report correctly one pixel movement.

At some point in synaptics.c there is:

    /* Post events */
    if (dx || dy)
	xf86PostMotionEvent(local->dev, 0, 0, 2, dx, dy);

I replaced it by:

    /* Post events */
    if (dx || dy) {
	ErrorF("DBG: dx=%d dy=%d\n", dx, dy);
	xf86PostMotionEvent(local->dev, 0, 0, 2, dx, dy);
    }

And I was clearly able to see on the output of the Xorg server the
message:

DBG: dx=0 dy=1

So ...
The problem seems to be down further in the Xorg internals.
Can someone help me there?

Another question, can you test as I did? Perhaps it is related to the
hardware (which could perhaps tell that the Y value must be amplified).
Or if it's something else.

Thanks.



Mildred


-- 
Mildred Ki'Lya
╭───────── mildred593@online.fr ──────────
│ Jabber, GoogleTalk: <mildred at jabber.fr>
│ Site: <http://ki.lya.online.fr>              GPG ID: 9A7D 2E2B
│ Fingerprint: 197C A7E6 645B 4299 6D37 684B 6F9D A8D6 9A7D 2E2B



More information about the xorg mailing list