X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fevdev-mt-touchpad.c;h=2cf8b567eccc8d4092a6dc6b723123407e30d8e6;hb=b3c578521e7b53bb9fd0516344d9c24b24e519a1;hp=830e9feec242ce9ba8ff0d010ed07b2abc52e292;hpb=9ecce8e2f73e9115f680755745d9c0d8c4e50a00;p=platform%2Fupstream%2Flibinput.git diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c index 830e9fe..2cf8b56 100644 --- a/src/evdev-mt-touchpad.c +++ b/src/evdev-mt-touchpad.c @@ -363,15 +363,20 @@ static void tp_palm_detect(struct tp_dispatch *tp, struct tp_touch *t, uint64_t time) { const int PALM_TIMEOUT = 200; /* ms */ + const int DIRECTIONS = NE|E|SE|SW|W|NW; /* If labelled a touch as palm, we unlabel as palm when - we move out of the palm edge zone within the timeout. + we move out of the palm edge zone within the timeout, provided + the direction is within 45 degrees of the horizontal. */ if (t->palm.is_palm) { if (time < t->palm.time + PALM_TIMEOUT && (t->x > tp->palm.left_edge && t->x < tp->palm.right_edge)) { - t->palm.is_palm = false; - tp_set_pointer(tp, t); + int dirs = vector_get_direction(t->x - t->palm.x, t->y - t->palm.y); + if ((dirs & DIRECTIONS) && !(dirs & ~DIRECTIONS)) { + t->palm.is_palm = false; + tp_set_pointer(tp, t); + } } return; } @@ -391,6 +396,8 @@ tp_palm_detect(struct tp_dispatch *tp, struct tp_touch *t, uint64_t time) t->palm.is_palm = true; t->palm.time = time; + t->palm.x = t->x; + t->palm.y = t->y; } static void