Add device class for multi-touch mice
BUG=chromium-os:36322
TEST=On Snow, Magic Mouse works (though its gestures are interpreted as
a touchpad)
Change-Id: Ide9becba558e101cf2a43dffad746ac183ad9559
Reviewed-on: https://gerrit.chromium.org/gerrit/41320
Tested-by: Che-Liang Chiou <clchiou@chromium.org>
Reviewed-by: Andrew de los Reyes <adlr@chromium.org>
Commit-Queue: Che-Liang Chiou <clchiou@chromium.org>
diff --git a/include/libevdev/libevdev.h b/include/libevdev/libevdev.h
index 5c41231..5ebe216 100644
--- a/include/libevdev/libevdev.h
+++ b/include/libevdev/libevdev.h
@@ -26,6 +26,7 @@
EvdevClassUnknown,
EvdevClassKeyboard,
EvdevClassMouse,
+ EvdevClassMultitouchMouse,
EvdevClassTablet,
EvdevClassTouchpad,
EvdevClassTouchscreen,
diff --git a/src/libevdev.c b/src/libevdev.c
index fa60550..8efff0f 100644
--- a/src/libevdev.c
+++ b/src/libevdev.c
@@ -296,8 +296,13 @@
return EvdevClassKeyboard;
if (TestBit(REL_X, info->rel_bitmask) &&
- TestBit(REL_Y, info->rel_bitmask))
- return EvdevClassMouse;
+ TestBit(REL_Y, info->rel_bitmask)) {
+ if (TestBit(ABS_MT_POSITION_X, info->abs_bitmask) &&
+ TestBit(ABS_MT_POSITION_Y, info->abs_bitmask))
+ return EvdevClassMultitouchMouse;
+ else
+ return EvdevClassMouse;
+ }
if (TestBit(ABS_X, info->abs_bitmask) &&
TestBit(ABS_Y, info->abs_bitmask)) {
@@ -331,6 +336,7 @@
case EvdevClassUnknown: return "EvdevClassUnknown";
case EvdevClassKeyboard: return "EvdevClassKeyboard";
case EvdevClassMouse: return "EvdevClassMouse";
+ case EvdevClassMultitouchMouse: return "EvdevClassMultitouchMouse";
case EvdevClassTablet: return "EvdevClassTablet";
case EvdevClassTouchpad: return "EvdevClassTouchpad";
case EvdevClassTouchscreen: return "EvdevClassTouchscreen";