touchpad: Ignore fingers in button area for 2 finger scroll

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Hans de Goede 2014-04-08 08:34:20 +02:00
parent bfe05ed4a6
commit 55b2ea65f3

View file

@ -446,7 +446,7 @@ tp_post_twofinger_scroll(struct tp_dispatch *tp, uint32_t time)
double tmpx, tmpy; double tmpx, tmpy;
tp_for_each_touch(tp, t) { tp_for_each_touch(tp, t) {
if (t->dirty) { if (tp_touch_active(tp, t) && t->dirty) {
nchanged++; nchanged++;
tp_get_delta(t, &tmpx, &tmpy); tp_get_delta(t, &tmpx, &tmpy);
@ -499,12 +499,21 @@ tp_post_twofinger_scroll(struct tp_dispatch *tp, uint32_t time)
static int static int
tp_post_scroll_events(struct tp_dispatch *tp, uint32_t time) tp_post_scroll_events(struct tp_dispatch *tp, uint32_t time)
{ {
struct tp_touch *t;
int nfingers_down = 0;
/* don't scroll if a clickpad is held down */ /* don't scroll if a clickpad is held down */
if (tp->buttons.is_clickpad && if (tp->buttons.is_clickpad &&
(tp->buttons.state || tp->buttons.old_state)) (tp->buttons.state || tp->buttons.old_state))
return 0; return 0;
if (tp->nfingers_down != 2) { /* Only count active touches for 2 finger scrolling */
tp_for_each_touch(tp, t) {
if (tp_touch_active(tp, t))
nfingers_down++;
}
if (nfingers_down != 2) {
/* terminate scrolling with a zero scroll event to notify /* terminate scrolling with a zero scroll event to notify
* caller that it really ended now */ * caller that it really ended now */
if (tp->scroll.state != SCROLL_STATE_NONE) { if (tp->scroll.state != SCROLL_STATE_NONE) {