Can you set the "fake" resolution so that you get the same answer without having to check if it is fake?

It looks like setting tp->device->abs.absinfo_x/y->resolution to diagonal * 2 / DEFAULT_HYSTERESIS_MARGIN_DENOMINATOR would avoid the if statement, and I would probably make everything that uses this resolution value "work" (in that they all scale the same).

On 12-06-15 08:09, Peter Hutterer wrote:

Some touchpads, e.g. the Cyapa in the Acer c720 have a small axis range
([0, 870], [0, 470]), so the diagonal/magic value yields a hysteresis
margin
of 1 device unit. On that device, that's one-tenth of a millimeter,
causing
pointer motion just by holding the finger.

For touchpads that provide a physical resolution, set the hysteresis axes
to
0.5mm and do away with the magic factor.

https://bugzilla.redhat.com/show_bug.cgi?id=1230441

Signed-off-by: Peter Hutterer <[email protected]>


Yes I think this is a good idea:

Reviewed-by: Hans de Goede <[email protected]>

Can you also ask the reporter of:

https://bugs.freedesktop.org/show_bug.cgi?id=90590

To test libinput/master once you've pushed this? It will likely
help with his problem too.

Regards,

Hans



  ---
   src/evdev-mt-touchpad.c | 16 ++++++++++++----
   1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
index 8c28ff7..e9870ad 100644
--- a/src/evdev-mt-touchpad.c
+++ b/src/evdev-mt-touchpad.c
@@ -1495,10 +1495,18 @@ tp_init(struct tp_dispatch *tp,
                                                        EV_ABS,
                                                        ABS_MT_DISTANCE);

-       tp->hysteresis_margin.x =
-               diagonal / DEFAULT_HYSTERESIS_MARGIN_DENOMINATOR;
-       tp->hysteresis_margin.y =
-               diagonal / DEFAULT_HYSTERESIS_MARGIN_DENOMINATOR;
+       if (device->abs.fake_resolution) {
+               tp->hysteresis_margin.x =
+                       diagonal / DEFAULT_HYSTERESIS_MARGIN_DENOMINATOR;
+               tp->hysteresis_margin.y =
+                       diagonal / DEFAULT_HYSTERESIS_MARGIN_DENOMINATOR;
+       } else {
+               int res_x = tp->device->abs.absinfo_x->resolution,
+                   res_y = tp->device->abs.absinfo_y->resolution;
+
+               tp->hysteresis_margin.x = res_x/2;
+               tp->hysteresis_margin.y = res_y/2;
+       }

         if (tp_init_accel(tp, diagonal) != 0)
                 return -1;

  _______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel




_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to