From: Kristian Høgsberg Date: Fri, 26 Jul 2013 17:43:26 +0000 (-0700) Subject: evdev: Suport old-style single-touch touch screens X-Git-Tag: 0.1.0~163^2~37 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c1bb30da2f965244677776ee7f7cf89fd4f176c8;p=platform%2Fupstream%2Flibinput.git evdev: Suport old-style single-touch touch screens These screens send only BTN_TOUCH and ABS_X/Y. --- diff --git a/src/evdev.c b/src/evdev.c index dd3e2c9..5ad4d6b 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -83,6 +83,11 @@ evdev_process_key(struct evdev_device *device, struct input_event *e, int time) WL_POINTER_BUTTON_STATE_RELEASED); break; + case BTN_TOUCH: + if (e->value == 0 && !device->is_mt) + notify_touch(device->seat, time, device->mt.slot, 0, 0, + WL_TOUCH_UP); + break; default: notify_key(device->seat, time, e->code, @@ -295,7 +300,16 @@ evdev_flush_motion(struct evdev_device *device, uint32_t time) weston_output_transform_coordinate(device->output, device->abs.x, device->abs.y, &x, &y); - notify_motion_absolute(master, time, x, y); + + if (device->caps & EVDEV_TOUCH) { + if (master->num_tp == 0) + notify_touch(master, time, 0, + x, y, WL_TOUCH_DOWN); + else + notify_touch(master, time, 0, + x, y, WL_TOUCH_MOTION); + } else + notify_motion_absolute(master, time, x, y); device->pending_events &= ~EVDEV_ABSOLUTE_MOTION; } } @@ -482,6 +496,10 @@ evdev_handle_device(struct evdev_device *device) break; } } + if (TEST_BIT(key_bits, BTN_TOUCH)) { + device->caps |= EVDEV_TOUCH; + } + } if (TEST_BIT(ev_bits, EV_LED)) { device->caps |= EVDEV_KEYBOARD;