OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/events/ozone/evdev/libgestures_glue/gesture_property_provider.h" | 5 #include "ui/events/ozone/evdev/libgestures_glue/gesture_property_provider.h" |
6 | 6 |
7 #include <gestures/gestures.h> | 7 #include <gestures/gestures.h> |
8 #include <libevdev/libevdev.h> | 8 #include <libevdev/libevdev.h> |
9 | 9 |
10 #include <fnmatch.h> | 10 #include <fnmatch.h> |
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
424 "MatchIsKeyboard", | 424 "MatchIsKeyboard", |
425 "MatchIsJoystick", | 425 "MatchIsJoystick", |
426 "MatchIsTablet"}; | 426 "MatchIsTablet"}; |
427 | 427 |
428 // Special keywords for boolean values. | 428 // Special keywords for boolean values. |
429 const char* kTrue[] = {"on", "true", "yes"}; | 429 const char* kTrue[] = {"on", "true", "yes"}; |
430 const char* kFalse[] = {"off", "false", "no"}; | 430 const char* kFalse[] = {"off", "false", "no"}; |
431 | 431 |
432 // Check if a device falls into one device type category. | 432 // Check if a device falls into one device type category. |
433 bool IsDeviceOfType(const ui::GesturePropertyProvider::DevicePtr device, | 433 bool IsDeviceOfType(const ui::GesturePropertyProvider::DevicePtr device, |
434 const ui::EventDeviceType type) { | 434 const ui::EventDeviceType type, |
| 435 const GesturesProp* device_mouse_property, |
| 436 const GesturesProp* device_touchpad_property) { |
| 437 // Get the device type info from gesture properties if they are available. |
| 438 // Otherwise, fallback to the libevdev device info. |
| 439 bool is_mouse = false, is_touchpad = false; |
435 EvdevClass evdev_class = device->info.evdev_class; | 440 EvdevClass evdev_class = device->info.evdev_class; |
| 441 if (device_mouse_property) { |
| 442 is_mouse = device_mouse_property->GetBoolValue()[0]; |
| 443 } else { |
| 444 is_mouse = (evdev_class == EvdevClassMouse || |
| 445 evdev_class == EvdevClassMultitouchMouse); |
| 446 } |
| 447 if (device_touchpad_property) { |
| 448 is_touchpad = device_touchpad_property->GetBoolValue()[0]; |
| 449 } else { |
| 450 is_touchpad = (evdev_class == EvdevClassTouchpad || |
| 451 evdev_class == EvdevClassTouchscreen || |
| 452 evdev_class == EvdevClassMultitouchMouse); |
| 453 } |
| 454 |
436 switch (type) { | 455 switch (type) { |
437 case ui::DT_KEYBOARD: | 456 case ui::DT_KEYBOARD: |
438 return (evdev_class == EvdevClassKeyboard); | 457 return (evdev_class == EvdevClassKeyboard); |
439 break; | 458 break; |
440 case ui::DT_MOUSE: | 459 case ui::DT_MOUSE: |
441 return (evdev_class == EvdevClassMouse || | 460 return is_mouse; |
442 evdev_class == EvdevClassMultitouchMouse); | |
443 break; | 461 break; |
444 case ui::DT_TOUCHPAD: | 462 case ui::DT_TOUCHPAD: |
445 // Note that the behavior here is different from the inputcontrol script | 463 return (!is_mouse) && is_touchpad; |
446 // which actually returns touchscreen devices as well. | |
447 return (evdev_class == EvdevClassTouchpad); | |
448 break; | 464 break; |
449 case ui::DT_TOUCHSCREEN: | 465 case ui::DT_TOUCHSCREEN: |
450 return (evdev_class == EvdevClassTouchscreen); | 466 return (evdev_class == EvdevClassTouchscreen); |
451 break; | 467 break; |
452 case ui::DT_MULTITOUCH: | 468 case ui::DT_MULTITOUCH: |
453 return (evdev_class == EvdevClassTouchpad || | 469 return is_touchpad; |
454 evdev_class == EvdevClassTouchscreen || | |
455 evdev_class == EvdevClassMultitouchMouse); | |
456 break; | 470 break; |
457 case ui::DT_MULTITOUCH_MOUSE: | 471 case ui::DT_MULTITOUCH_MOUSE: |
458 return (evdev_class == EvdevClassMultitouchMouse); | 472 return is_mouse && is_touchpad; |
459 break; | 473 break; |
460 case ui::DT_ALL: | 474 case ui::DT_ALL: |
461 return true; | 475 return true; |
462 break; | 476 break; |
463 default: | 477 default: |
464 break; | 478 break; |
465 } | 479 } |
466 return false; | 480 return false; |
467 } | 481 } |
468 | 482 |
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
848 | 862 |
849 GesturePropertyProvider::~GesturePropertyProvider() { | 863 GesturePropertyProvider::~GesturePropertyProvider() { |
850 } | 864 } |
851 | 865 |
852 bool GesturePropertyProvider::GetDeviceIdsByType( | 866 bool GesturePropertyProvider::GetDeviceIdsByType( |
853 const EventDeviceType type, | 867 const EventDeviceType type, |
854 std::vector<DeviceId>* device_ids) { | 868 std::vector<DeviceId>* device_ids) { |
855 bool exists = false; | 869 bool exists = false; |
856 DeviceMap::const_iterator it = device_map_.begin(); | 870 DeviceMap::const_iterator it = device_map_.begin(); |
857 for (; it != device_map_.end(); ++it) { | 871 for (; it != device_map_.end(); ++it) { |
858 if (IsDeviceOfType(it->second, type)) { | 872 if (IsDeviceIdOfType(it->first, type)) { |
859 exists = true; | 873 exists = true; |
860 if (device_ids) | 874 if (device_ids) |
861 device_ids->push_back(it->first); | 875 device_ids->push_back(it->first); |
862 } | 876 } |
863 } | 877 } |
864 return exists; | 878 return exists; |
865 } | 879 } |
866 | 880 |
867 bool GesturePropertyProvider::IsDeviceIdOfType(const DeviceId device_id, | 881 bool GesturePropertyProvider::IsDeviceIdOfType(const DeviceId device_id, |
868 const EventDeviceType type) { | 882 const EventDeviceType type) { |
869 DeviceMap::const_iterator it = device_map_.find(device_id); | 883 DeviceMap::const_iterator it = device_map_.find(device_id); |
870 if (it == device_map_.end()) | 884 if (it == device_map_.end()) |
871 return false; | 885 return false; |
872 return IsDeviceOfType(it->second, type); | 886 return IsDeviceOfType(it->second, type, |
| 887 GetProperty(device_id, "Device Mouse"), |
| 888 GetProperty(device_id, "Device Touchpad")); |
873 } | 889 } |
874 | 890 |
875 GesturesProp* GesturePropertyProvider::GetProperty(const DeviceId device_id, | 891 GesturesProp* GesturePropertyProvider::GetProperty(const DeviceId device_id, |
876 const std::string& name) { | 892 const std::string& name) { |
877 return FindProperty(device_id, name); | 893 return FindProperty(device_id, name); |
878 } | 894 } |
879 | 895 |
880 std::vector<std::string> GesturePropertyProvider::GetPropertyNamesById( | 896 std::vector<std::string> GesturePropertyProvider::GetPropertyNamesById( |
881 const DeviceId device_id) { | 897 const DeviceId device_id) { |
882 internal::GestureDevicePropertyData* device_data = | 898 internal::GestureDevicePropertyData* device_data = |
(...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1524 const GesturesPropProvider kGesturePropProvider = { | 1540 const GesturesPropProvider kGesturePropProvider = { |
1525 GesturesPropFunctionsWrapper::CreateInt, | 1541 GesturesPropFunctionsWrapper::CreateInt, |
1526 GesturesPropFunctionsWrapper::CreateShort, | 1542 GesturesPropFunctionsWrapper::CreateShort, |
1527 GesturesPropFunctionsWrapper::CreateBool, | 1543 GesturesPropFunctionsWrapper::CreateBool, |
1528 GesturesPropFunctionsWrapper::CreateString, | 1544 GesturesPropFunctionsWrapper::CreateString, |
1529 GesturesPropFunctionsWrapper::CreateReal, | 1545 GesturesPropFunctionsWrapper::CreateReal, |
1530 GesturesPropFunctionsWrapper::RegisterHandlers, | 1546 GesturesPropFunctionsWrapper::RegisterHandlers, |
1531 GesturesPropFunctionsWrapper::Free}; | 1547 GesturesPropFunctionsWrapper::Free}; |
1532 | 1548 |
1533 } // namespace ui | 1549 } // namespace ui |
OLD | NEW |