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";