| 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 <X11/extensions/XInput.h> | 7 #include <X11/extensions/XInput.h> |
| 8 #include <X11/extensions/XInput2.h> | 8 #include <X11/extensions/XInput2.h> |
| 9 #include <X11/Xlib.h> | 9 #include <X11/Xlib.h> |
| 10 | 10 |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 // Check if XInput is available on the system. | 158 // Check if XInput is available on the system. |
| 159 xi_opcode_ = -1; | 159 xi_opcode_ = -1; |
| 160 int opcode, event, error; | 160 int opcode, event, error; |
| 161 if (!XQueryExtension( | 161 if (!XQueryExtension( |
| 162 gfx::GetXDisplay(), "XInputExtension", &opcode, &event, &error)) { | 162 gfx::GetXDisplay(), "XInputExtension", &opcode, &event, &error)) { |
| 163 VLOG(1) << "X Input extension not available: error=" << error; | 163 VLOG(1) << "X Input extension not available: error=" << error; |
| 164 return false; | 164 return false; |
| 165 } | 165 } |
| 166 | 166 |
| 167 // Check the XInput version. | 167 // Check the XInput version. |
| 168 #if defined(USE_XI2_MT) | 168 int major = 2, minor = 2; |
| 169 int major = 2, minor = USE_XI2_MT; | |
| 170 #else | |
| 171 int major = 2, minor = 0; | |
| 172 #endif | |
| 173 if (XIQueryVersion(gfx::GetXDisplay(), &major, &minor) == BadRequest) { | 169 if (XIQueryVersion(gfx::GetXDisplay(), &major, &minor) == BadRequest) { |
| 174 VLOG(1) << "XInput2 not supported in the server."; | 170 VLOG(1) << "XInput2 not supported in the server."; |
| 175 return false; | 171 return false; |
| 176 } | 172 } |
| 177 #if defined(USE_XI2_MT) | 173 if (major < 2 || (major == 2 && minor < 2)) { |
| 178 if (major < 2 || (major == 2 && minor < USE_XI2_MT)) { | |
| 179 DVLOG(1) << "XI version on server is " << major << "." << minor << ". " | 174 DVLOG(1) << "XI version on server is " << major << "." << minor << ". " |
| 180 << "But 2." << USE_XI2_MT << " is required."; | 175 << "But 2.2 is required."; |
| 181 return false; | 176 return false; |
| 182 } | 177 } |
| 183 #endif | |
| 184 | 178 |
| 185 xi_opcode_ = opcode; | 179 xi_opcode_ = opcode; |
| 186 CHECK_NE(-1, xi_opcode_); | 180 CHECK_NE(-1, xi_opcode_); |
| 187 | 181 |
| 188 // Possible XI event types for XIDeviceEvent. See the XI2 protocol | 182 // Possible XI event types for XIDeviceEvent. See the XI2 protocol |
| 189 // specification. | 183 // specification. |
| 190 xi_device_event_types_[XI_KeyPress] = true; | 184 xi_device_event_types_[XI_KeyPress] = true; |
| 191 xi_device_event_types_[XI_KeyRelease] = true; | 185 xi_device_event_types_[XI_KeyRelease] = true; |
| 192 xi_device_event_types_[XI_ButtonPress] = true; | 186 xi_device_event_types_[XI_ButtonPress] = true; |
| 193 xi_device_event_types_[XI_ButtonRelease] = true; | 187 xi_device_event_types_[XI_ButtonRelease] = true; |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 } | 277 } |
| 284 } | 278 } |
| 285 } | 279 } |
| 286 | 280 |
| 287 if (possible_cmt && !not_cmt) | 281 if (possible_cmt && !not_cmt) |
| 288 cmt_devices_[deviceid] = true; | 282 cmt_devices_[deviceid] = true; |
| 289 } | 283 } |
| 290 } | 284 } |
| 291 | 285 |
| 292 bool DeviceDataManagerX11::GetSlotNumber(const XIDeviceEvent* xiev, int* slot) { | 286 bool DeviceDataManagerX11::GetSlotNumber(const XIDeviceEvent* xiev, int* slot) { |
| 293 #if defined(USE_XI2_MT) | |
| 294 ui::TouchFactory* factory = ui::TouchFactory::GetInstance(); | 287 ui::TouchFactory* factory = ui::TouchFactory::GetInstance(); |
| 295 if (!factory->IsMultiTouchDevice(xiev->sourceid)) { | 288 if (!factory->IsMultiTouchDevice(xiev->sourceid)) { |
| 296 *slot = 0; | 289 *slot = 0; |
| 297 return true; | 290 return true; |
| 298 } | 291 } |
| 299 return factory->QuerySlotForTrackingID(xiev->detail, slot); | 292 return factory->QuerySlotForTrackingID(xiev->detail, slot); |
| 300 #else | |
| 301 *slot = 0; | |
| 302 return true; | |
| 303 #endif | |
| 304 } | 293 } |
| 305 | 294 |
| 306 void DeviceDataManagerX11::GetEventRawData(const XEvent& xev, EventData* data) { | 295 void DeviceDataManagerX11::GetEventRawData(const XEvent& xev, EventData* data) { |
| 307 if (xev.type != GenericEvent) | 296 if (xev.type != GenericEvent) |
| 308 return; | 297 return; |
| 309 | 298 |
| 310 XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(xev.xcookie.data); | 299 XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(xev.xcookie.data); |
| 311 if (xiev->sourceid >= kMaxDeviceNum || xiev->deviceid >= kMaxDeviceNum) | 300 if (xiev->sourceid >= kMaxDeviceNum || xiev->deviceid >= kMaxDeviceNum) |
| 312 return; | 301 return; |
| 313 data->clear(); | 302 data->clear(); |
| (...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 667 valuator_lookup_[deviceid][j] = valuator_count_[deviceid]; | 656 valuator_lookup_[deviceid][j] = valuator_count_[deviceid]; |
| 668 data_type_lookup_[deviceid][valuator_count_[deviceid]] = j; | 657 data_type_lookup_[deviceid][valuator_count_[deviceid]] = j; |
| 669 valuator_min_[deviceid][j] = min_value; | 658 valuator_min_[deviceid][j] = min_value; |
| 670 valuator_max_[deviceid][j] = max_value; | 659 valuator_max_[deviceid][j] = max_value; |
| 671 valuator_count_[deviceid]++; | 660 valuator_count_[deviceid]++; |
| 672 } | 661 } |
| 673 } | 662 } |
| 674 | 663 |
| 675 bool DeviceDataManagerX11::TouchEventNeedsCalibrate( | 664 bool DeviceDataManagerX11::TouchEventNeedsCalibrate( |
| 676 unsigned int touch_device_id) const { | 665 unsigned int touch_device_id) const { |
| 677 #if defined(OS_CHROMEOS) && defined(USE_XI2_MT) | 666 #if defined(OS_CHROMEOS) && defined(USE_X11) |
| 678 int64 touch_display_id = GetDisplayForTouchDevice(touch_device_id); | 667 int64 touch_display_id = GetDisplayForTouchDevice(touch_device_id); |
| 679 if (base::SysInfo::IsRunningOnChromeOS() && | 668 if (base::SysInfo::IsRunningOnChromeOS() && |
| 680 touch_display_id == gfx::Display::InternalDisplayId()) { | 669 touch_display_id == gfx::Display::InternalDisplayId()) { |
| 681 return true; | 670 return true; |
| 682 } | 671 } |
| 683 #endif // defined(OS_CHROMEOS) && defined(USE_XI2_MT) | 672 #endif // defined(OS_CHROMEOS) && defined(USE_X11) |
| 684 return false; | 673 return false; |
| 685 } | 674 } |
| 686 | 675 |
| 687 void DeviceDataManagerX11::SetDisabledKeyboardAllowedKeys( | 676 void DeviceDataManagerX11::SetDisabledKeyboardAllowedKeys( |
| 688 scoped_ptr<std::set<KeyboardCode> > excepted_keys) { | 677 scoped_ptr<std::set<KeyboardCode> > excepted_keys) { |
| 689 DCHECK(!excepted_keys.get() || | 678 DCHECK(!excepted_keys.get() || |
| 690 !blocked_keyboard_allowed_keys_.get()); | 679 !blocked_keyboard_allowed_keys_.get()); |
| 691 blocked_keyboard_allowed_keys_ = excepted_keys.Pass(); | 680 blocked_keyboard_allowed_keys_ = excepted_keys.Pass(); |
| 692 } | 681 } |
| 693 | 682 |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 760 } else { | 749 } else { |
| 761 keyboards.erase(it); | 750 keyboards.erase(it); |
| 762 ++blocked_iter; | 751 ++blocked_iter; |
| 763 } | 752 } |
| 764 } | 753 } |
| 765 // Notify base class of updated list. | 754 // Notify base class of updated list. |
| 766 DeviceDataManager::OnKeyboardDevicesUpdated(keyboards); | 755 DeviceDataManager::OnKeyboardDevicesUpdated(keyboards); |
| 767 } | 756 } |
| 768 | 757 |
| 769 } // namespace ui | 758 } // namespace ui |
| OLD | NEW |