Chromium Code Reviews| 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/devices/x11/device_data_manager_x11.h" | 5 #include "ui/events/devices/x11/device_data_manager_x11.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <X11/extensions/XInput.h> | 8 #include <X11/extensions/XInput.h> |
| 9 #include <X11/extensions/XInput2.h> | 9 #include <X11/extensions/XInput2.h> |
| 10 #include <X11/Xlib.h> | 10 #include <X11/Xlib.h> |
| 11 | 11 |
| 12 #include <utility> | 12 #include <utility> |
| 13 | 13 |
| 14 #include "base/bind.h" | 14 #include "base/bind.h" |
| 15 #include "base/bind_helpers.h" | 15 #include "base/bind_helpers.h" |
| 16 #include "base/command_line.h" | |
| 16 #include "base/logging.h" | 17 #include "base/logging.h" |
| 17 #include "base/macros.h" | 18 #include "base/macros.h" |
| 18 #include "base/memory/singleton.h" | 19 #include "base/memory/singleton.h" |
| 19 #include "base/sys_info.h" | 20 #include "base/sys_info.h" |
| 20 #include "build/build_config.h" | 21 #include "build/build_config.h" |
| 21 #include "ui/display/display.h" | 22 #include "ui/display/display.h" |
| 22 #include "ui/events/devices/x11/device_list_cache_x11.h" | 23 #include "ui/events/devices/x11/device_list_cache_x11.h" |
| 23 #include "ui/events/devices/x11/touch_factory_x11.h" | 24 #include "ui/events/devices/x11/touch_factory_x11.h" |
| 25 #include "ui/events/devices/x11/ui_events_devices_x11_switches.h" | |
| 24 #include "ui/events/event_constants.h" | 26 #include "ui/events/event_constants.h" |
| 25 #include "ui/events/event_switches.h" | 27 #include "ui/events/event_switches.h" |
| 26 #include "ui/events/keycodes/keyboard_code_conversion_x.h" | 28 #include "ui/events/keycodes/keyboard_code_conversion_x.h" |
| 27 #include "ui/gfx/geometry/point3_f.h" | 29 #include "ui/gfx/geometry/point3_f.h" |
| 28 #include "ui/gfx/x/x11_types.h" | 30 #include "ui/gfx/x/x11_types.h" |
| 29 | 31 |
| 30 // XIScrollClass was introduced in XI 2.1 so we need to define it here | 32 // XIScrollClass was introduced in XI 2.1 so we need to define it here |
| 31 // for backward-compatibility with older versions of XInput. | 33 // for backward-compatibility with older versions of XInput. |
| 32 #if !defined(XIScrollClass) | 34 #if !defined(XIScrollClass) |
| 33 #define XIScrollClass 3 | 35 #define XIScrollClass 3 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 117 | 119 |
| 118 template <typename Iterator> | 120 template <typename Iterator> |
| 119 Iterator FindDeviceWithId(Iterator begin, Iterator end, int id) { | 121 Iterator FindDeviceWithId(Iterator begin, Iterator end, int id) { |
| 120 for (auto it = begin; it != end; ++it) { | 122 for (auto it = begin; it != end; ++it) { |
| 121 if (it->id == id) | 123 if (it->id == id) |
| 122 return it; | 124 return it; |
| 123 } | 125 } |
| 124 return end; | 126 return end; |
| 125 } | 127 } |
| 126 | 128 |
| 129 bool IsHighPrecisionScrollingDisabled() { | |
| 130 return base::CommandLine::ForCurrentProcess()->HasSwitch( | |
| 131 switches::kDisableHighPrecisionScrolling); | |
| 132 } | |
| 133 | |
| 127 } // namespace | 134 } // namespace |
| 128 | 135 |
| 129 bool DeviceDataManagerX11::IsCMTDataType(const int type) { | 136 bool DeviceDataManagerX11::IsCMTDataType(const int type) { |
| 130 return (type >= kCMTDataTypeStart) && (type <= kCMTDataTypeEnd); | 137 return (type >= kCMTDataTypeStart) && (type <= kCMTDataTypeEnd); |
| 131 } | 138 } |
| 132 | 139 |
| 133 bool DeviceDataManagerX11::IsTouchDataType(const int type) { | 140 bool DeviceDataManagerX11::IsTouchDataType(const int type) { |
| 134 return (type >= kTouchDataTypeStart) && (type <= kTouchDataTypeEnd); | 141 return (type >= kTouchDataTypeStart) && (type <= kTouchDataTypeEnd); |
| 135 } | 142 } |
| 136 | 143 |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 148 set_instance(device_data_manager); | 155 set_instance(device_data_manager); |
| 149 } | 156 } |
| 150 | 157 |
| 151 // static | 158 // static |
| 152 DeviceDataManagerX11* DeviceDataManagerX11::GetInstance() { | 159 DeviceDataManagerX11* DeviceDataManagerX11::GetInstance() { |
| 153 return static_cast<DeviceDataManagerX11*>(DeviceDataManager::GetInstance()); | 160 return static_cast<DeviceDataManagerX11*>(DeviceDataManager::GetInstance()); |
| 154 } | 161 } |
| 155 | 162 |
| 156 DeviceDataManagerX11::DeviceDataManagerX11() | 163 DeviceDataManagerX11::DeviceDataManagerX11() |
| 157 : xi_opcode_(-1), | 164 : xi_opcode_(-1), |
| 165 high_precision_scrolling_disabled_(IsHighPrecisionScrollingDisabled()), | |
| 158 atom_cache_(gfx::GetXDisplay(), kCachedAtoms), | 166 atom_cache_(gfx::GetXDisplay(), kCachedAtoms), |
| 159 button_map_count_(0) { | 167 button_map_count_(0) { |
| 160 CHECK(gfx::GetXDisplay()); | 168 CHECK(gfx::GetXDisplay()); |
| 161 InitializeXInputInternal(); | 169 InitializeXInputInternal(); |
| 162 | 170 |
| 163 // Make sure the sizes of enum and kCachedAtoms are aligned. | 171 // Make sure the sizes of enum and kCachedAtoms are aligned. |
| 164 CHECK(arraysize(kCachedAtoms) == static_cast<size_t>(DT_LAST_ENTRY) + 1); | 172 CHECK(arraysize(kCachedAtoms) == static_cast<size_t>(DT_LAST_ENTRY) + 1); |
| 165 UpdateDeviceList(gfx::GetXDisplay()); | 173 UpdateDeviceList(gfx::GetXDisplay()); |
| 166 UpdateButtonMap(); | 174 UpdateButtonMap(); |
| 167 } | 175 } |
| (...skipping 596 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 764 valuator_max_[deviceid][data_type] = valuator_class_info->max; | 772 valuator_max_[deviceid][data_type] = valuator_class_info->max; |
| 765 return IsCMTDataType(data_type); | 773 return IsCMTDataType(data_type); |
| 766 } | 774 } |
| 767 | 775 |
| 768 void DeviceDataManagerX11::UpdateScrollClassDevice( | 776 void DeviceDataManagerX11::UpdateScrollClassDevice( |
| 769 XIScrollClassInfo* scroll_class_info, | 777 XIScrollClassInfo* scroll_class_info, |
| 770 int deviceid) { | 778 int deviceid) { |
| 771 DCHECK(deviceid >= 0 && deviceid < kMaxDeviceNum); | 779 DCHECK(deviceid >= 0 && deviceid < kMaxDeviceNum); |
| 772 ScrollInfo& info = scroll_data_[deviceid]; | 780 ScrollInfo& info = scroll_data_[deviceid]; |
| 773 | 781 |
| 774 // TODO: xinput2 is disabled until edge cases are fixed. | 782 if (high_precision_scrolling_disabled_) { |
| 775 // http://crbug.com/616308 | 783 return; |
| 776 return; | 784 } |
|
sadrul
2016/07/20 17:02:26
no {}
Move after the DCHECK() above
Will Shackleton
2016/07/25 20:53:38
Done.
| |
| 777 | 785 |
| 778 bool legacy_scroll_available = | 786 bool legacy_scroll_available = |
| 779 (scroll_class_info->flags & XIScrollFlagNoEmulation) == 0; | 787 (scroll_class_info->flags & XIScrollFlagNoEmulation) == 0; |
| 780 // If the device's highest resolution is lower than the resolution of xinput1 | 788 // If the device's highest resolution is lower than the resolution of xinput1 |
| 781 // then use xinput1's events instead (ie. don't configure smooth scrolling). | 789 // then use xinput1's events instead (ie. don't configure smooth scrolling). |
| 782 if (legacy_scroll_available && | 790 if (legacy_scroll_available && |
| 783 std::abs(scroll_class_info->increment) <= 1.0) { | 791 std::abs(scroll_class_info->increment) <= 1.0) { |
| 784 return; | 792 return; |
| 785 } | 793 } |
| 786 | 794 |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 884 } else { | 892 } else { |
| 885 keyboards.erase(it); | 893 keyboards.erase(it); |
| 886 ++blocked_iter; | 894 ++blocked_iter; |
| 887 } | 895 } |
| 888 } | 896 } |
| 889 // Notify base class of updated list. | 897 // Notify base class of updated list. |
| 890 DeviceDataManager::OnKeyboardDevicesUpdated(keyboards); | 898 DeviceDataManager::OnKeyboardDevicesUpdated(keyboards); |
| 891 } | 899 } |
| 892 | 900 |
| 893 } // namespace ui | 901 } // namespace ui |
| OLD | NEW |