Hi Pierre. Thank you for taking the time to create a patch.
My biggest change was moving the following up in the HandleState
function, so the low level state is corrected *before* doing button
detection (this removed the quirk that depended on the order in which
fingers hit the touchpad):
//Correct HW state by throwing out fingers outside of the active area
inside_active_area = FALSE;
hw->numFingers = 0;
for (int i = 0; i < hw->num_mt_mask; i++) {
ValuatorMask *f1;
Bool mt_inside;
double x1, y1;
if (hw->slot_state[i] == SLOTSTATE_EMPTY || hw->slot_state[i] ==
SLOTSTATE_CLOSE)
continue;
f1 = hw->mt_mask[i];
x1 = valuator_mask_get_double(f1, 0);
y1 = valuator_mask_get_double(f1, 1);
mt_inside = is_inside_active_area(priv, x1, y1);
if (!mt_inside) {
hw->slot_state[i] = SLOTSTATE_EMPTY;
continue;
}
if (!inside_active_area) {
inside_active_area = TRUE;
hw->x = x1;
hw->y = y1;
}
hw->numFingers++;
}
You may notice that I removed the check to see if the touchpad is a
clickpad - I did this because it did not look like the code was being
executed. You could put that back in (turned out I was not actually
replacing the installed driver when I did "make install").
Secondly, I also removed something odd from is_inside_active_area. That
function now looks like:
static Bool is_inside_active_area(SynapticsPrivate * priv, int x, int y) {
if ((priv->synpara.area_left_edge != 0) && (x <
priv->synpara.area_left_edge))
return FALSE;
else if ((priv->synpara.area_right_edge != 0) && (x >
priv->synpara.area_right_edge))
return FALSE;
if ((priv->synpara.area_top_edge != 0) && (y <
priv->synpara.area_top_edge))
return FALSE;
else if ((priv->synpara.area_bottom_edge != 0) && (y >
priv->synpara.area_bottom_edge))
return FALSE;
return TRUE;
}
I did this mainly because the code that was there was not consistent
with how the function is being used now - it would return true in
circumstances when the source finger was NOT in the active area but if
something else was (which could mess up the finger count). I don't think
I tried the first change without the second, but it is certainly
plausible that the second change could fix the type of behavior you are
talking about. I have not seen such behavior on my machine with these
changes.
It seems suspicious that the patched driver would result in no changes.
I would make sure that you are actually running your custom version of
the driver and not the stock version. Try to break something
deliberately - I would suggest putting:
if (hw->numFingers > 1) hw->numFingers = 1;
After the first change and try to run the new driver. If two-finger
scroll still works you know that you are running the old driver.
Bryan
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1026046
Title:
Missing support for thumb resting on bottom of clickpad
To manage notifications about this bug go to:
https://bugs.launchpad.net/xserver-xorg-input-synaptics/+bug/1026046/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs