From 4be293e5efb9bedf841f46cbbfc0f53d3376e18b Mon Sep 17 00:00:00 2001 From: Henrik Rydberg Date: Mon, 14 Feb 2011 10:04:12 +0100 Subject: Use udev heuristic for non-property devices Setup device properties based on udev heuristic for non-property, devices. This patch only treats the cases POINTER && !DIRECT and !POINTER && DIRECT the digitizer case, POINTER && DIRECT, is assumed to be handled properly by the kernel properties. Signed-off-by: Henrik Rydberg --- src/frame-mtdev.c | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) (limited to 'src/frame-mtdev.c') diff --git a/src/frame-mtdev.c b/src/frame-mtdev.c index ed5dc9e..9192510 100644 --- a/src/frame-mtdev.c +++ b/src/frame-mtdev.c @@ -25,6 +25,16 @@ #include #include +static int is_pointer(const struct evemu_device *dev) +{ + return evemu_has_event(dev, EV_REL, REL_X) || + evemu_has_event(dev, EV_KEY, BTN_TOOL_FINGER) || + evemu_has_event(dev, EV_KEY, BTN_TOOL_PEN) || + evemu_has_event(dev, EV_KEY, BTN_STYLUS) || + evemu_has_event(dev, EV_KEY, BTN_MOUSE) || + evemu_has_event(dev, EV_KEY, BTN_LEFT); +} + int utouch_frame_is_supported_mtdev(const struct evemu_device *dev) { @@ -52,11 +62,22 @@ int utouch_frame_init_mtdev(utouch_frame_handle fh, if (!utouch_frame_is_supported_mtdev(dev)) return -ENODEV; + if (is_pointer(dev)) { + s->needs_pointer = 1; + s->is_direct = 0; + } else { + s->needs_pointer = 0; + s->is_direct = 1; + } + + s->is_buttonpad = 0; + s->is_semi_mt = 0; + #ifdef INPUT_PROP_POINTER - s->needs_pointer = evemu_has_prop(dev, INPUT_PROP_POINTER); - s->is_direct = evemu_has_prop(dev, INPUT_PROP_DIRECT); - s->is_buttonpad = evemu_has_prop(dev, INPUT_PROP_BUTTONPAD); - s->is_semi_mt = evemu_has_prop(dev, INPUT_PROP_SEMI_MT); + s->needs_pointer |= evemu_has_prop(dev, INPUT_PROP_POINTER); + s->is_direct |= evemu_has_prop(dev, INPUT_PROP_DIRECT); + s->is_buttonpad |= evemu_has_prop(dev, INPUT_PROP_BUTTONPAD); + s->is_semi_mt |= evemu_has_prop(dev, INPUT_PROP_SEMI_MT); #endif s->use_touch_major = evemu_has_event(dev, EV_ABS, ABS_MT_TOUCH_MAJOR); s->use_touch_minor = evemu_has_event(dev, EV_ABS, ABS_MT_TOUCH_MINOR); -- cgit v1.2.3