← Back to team overview

desktop-packages team mailing list archive

[Bug 1026046] Re: Missing support for thumb resting on bottom of clickpad

 

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 Desktop
Packages, which is subscribed to xserver-xorg-input-synaptics in Ubuntu.
https://bugs.launchpad.net/bugs/1026046

Title:
  Missing support for thumb resting on bottom of clickpad

Status in xf86-input-synaptics:
  Unknown
Status in “xserver-xorg-input-synaptics” package in Ubuntu:
  Confirmed
Status in “xserver-xorg-input-synaptics” source package in Precise:
  Confirmed
Status in “xserver-xorg-input-synaptics” package in Debian:
  New

Bug description:
  When using the trackpad on the MacBook Pro In Mac OS X it is possible to have the thumb resting (ready to click) on the bottom part of the touchpad while moving the mouse pointer around with your index or middle finger. 
  Likewise it is also possible to use two finger scrolling with the index and middle finger on the upper part on the track pad while resting the thumb on the lower part of the trackpad.

  This behaviour is not currently supported with the synaptics driver in
  12.04. It wil register a two finger scroll when the thumb is resting
  in the bottom part and index finger moves around in the upper part.

  I have tried playing aroud with the setting AreaBottomEdge that
  disables all motion on the bottom part of the touchpad. Unfortunately
  when this setting is enabled it still detects a finger in the area, so
  it wil register a two finger scroll like before.

To manage notifications about this bug go to:
https://bugs.launchpad.net/xserver-xorg-input-synaptics/+bug/1026046/+subscriptions