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/platform/x11/x11_hotplug_event_handler.h" | 5 #include "ui/events/platform/x11/x11_hotplug_event_handler.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.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/Xatom.h> | 10 #include <X11/Xatom.h> |
(...skipping 11 matching lines...) Expand all Loading... |
22 #include "base/process/launch.h" | 22 #include "base/process/launch.h" |
23 #include "base/single_thread_task_runner.h" | 23 #include "base/single_thread_task_runner.h" |
24 #include "base/strings/string_util.h" | 24 #include "base/strings/string_util.h" |
25 #include "base/sys_info.h" | 25 #include "base/sys_info.h" |
26 #include "base/threading/thread_task_runner_handle.h" | 26 #include "base/threading/thread_task_runner_handle.h" |
27 #include "base/threading/worker_pool.h" | 27 #include "base/threading/worker_pool.h" |
28 #include "ui/events/devices/device_data_manager.h" | 28 #include "ui/events/devices/device_data_manager.h" |
29 #include "ui/events/devices/device_hotplug_event_observer.h" | 29 #include "ui/events/devices/device_hotplug_event_observer.h" |
30 #include "ui/events/devices/device_util_linux.h" | 30 #include "ui/events/devices/device_util_linux.h" |
31 #include "ui/events/devices/input_device.h" | 31 #include "ui/events/devices/input_device.h" |
32 #include "ui/events/devices/keyboard_device.h" | |
33 #include "ui/events/devices/touchscreen_device.h" | 32 #include "ui/events/devices/touchscreen_device.h" |
34 #include "ui/gfx/x/x11_types.h" | 33 #include "ui/gfx/x/x11_types.h" |
35 | 34 |
36 #ifndef XI_PROP_PRODUCT_ID | 35 #ifndef XI_PROP_PRODUCT_ID |
37 #define XI_PROP_PRODUCT_ID "Device Product ID" | 36 #define XI_PROP_PRODUCT_ID "Device Product ID" |
38 #endif | 37 #endif |
39 | 38 |
40 namespace ui { | 39 namespace ui { |
41 | 40 |
42 namespace { | 41 namespace { |
(...skipping 20 matching lines...) Expand all Loading... |
63 }; | 62 }; |
64 | 63 |
65 enum DeviceType { | 64 enum DeviceType { |
66 DEVICE_TYPE_KEYBOARD, | 65 DEVICE_TYPE_KEYBOARD, |
67 DEVICE_TYPE_MOUSE, | 66 DEVICE_TYPE_MOUSE, |
68 DEVICE_TYPE_TOUCHPAD, | 67 DEVICE_TYPE_TOUCHPAD, |
69 DEVICE_TYPE_TOUCHSCREEN, | 68 DEVICE_TYPE_TOUCHSCREEN, |
70 DEVICE_TYPE_OTHER | 69 DEVICE_TYPE_OTHER |
71 }; | 70 }; |
72 | 71 |
73 typedef base::Callback<void(const std::vector<KeyboardDevice>&)> | 72 typedef base::Callback<void(const std::vector<InputDevice>&)> |
74 KeyboardDeviceCallback; | 73 KeyboardDeviceCallback; |
75 | 74 |
76 typedef base::Callback<void(const std::vector<TouchscreenDevice>&)> | 75 typedef base::Callback<void(const std::vector<TouchscreenDevice>&)> |
77 TouchscreenDeviceCallback; | 76 TouchscreenDeviceCallback; |
78 | 77 |
79 typedef base::Callback<void(const std::vector<InputDevice>&)> | 78 typedef base::Callback<void(const std::vector<InputDevice>&)> |
80 InputDeviceCallback; | 79 InputDeviceCallback; |
81 | 80 |
82 // Used for updating the state on the UI thread once device information is | 81 // Used for updating the state on the UI thread once device information is |
83 // parsed on helper threads. | 82 // parsed on helper threads. |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 | 244 |
246 return base::FilePath(path); | 245 return base::FilePath(path); |
247 } | 246 } |
248 | 247 |
249 // Helper used to parse keyboard information. When it is done it uses | 248 // Helper used to parse keyboard information. When it is done it uses |
250 // |reply_runner| and |callback| to update the state on the UI thread. | 249 // |reply_runner| and |callback| to update the state on the UI thread. |
251 void HandleKeyboardDevicesInWorker( | 250 void HandleKeyboardDevicesInWorker( |
252 const std::vector<DeviceInfo>& device_infos, | 251 const std::vector<DeviceInfo>& device_infos, |
253 scoped_refptr<base::TaskRunner> reply_runner, | 252 scoped_refptr<base::TaskRunner> reply_runner, |
254 const KeyboardDeviceCallback& callback) { | 253 const KeyboardDeviceCallback& callback) { |
255 std::vector<KeyboardDevice> devices; | 254 std::vector<InputDevice> devices; |
256 | 255 |
257 for (const DeviceInfo& device_info : device_infos) { | 256 for (const DeviceInfo& device_info : device_infos) { |
258 if (device_info.type != DEVICE_TYPE_KEYBOARD) | 257 if (device_info.type != DEVICE_TYPE_KEYBOARD) |
259 continue; | 258 continue; |
260 if (device_info.use != XISlaveKeyboard) | 259 if (device_info.use != XISlaveKeyboard) |
261 continue; // Assume all keyboards are keyboard slaves | 260 continue; // Assume all keyboards are keyboard slaves |
262 if (IsKnownInvalidKeyboardDevice(device_info.name)) | 261 if (IsKnownInvalidKeyboardDevice(device_info.name)) |
263 continue; // Skip invalid devices. | 262 continue; // Skip invalid devices. |
264 InputDeviceType type = GetInputDeviceTypeFromPath(device_info.path); | 263 InputDeviceType type = GetInputDeviceTypeFromPath(device_info.path); |
265 KeyboardDevice keyboard(device_info.id, type, device_info.name); | 264 InputDevice keyboard(device_info.id, type, device_info.name); |
266 devices.push_back(keyboard); | 265 devices.push_back(keyboard); |
267 } | 266 } |
268 | 267 |
269 reply_runner->PostTask(FROM_HERE, base::Bind(callback, devices)); | 268 reply_runner->PostTask(FROM_HERE, base::Bind(callback, devices)); |
270 } | 269 } |
271 | 270 |
272 // Helper used to parse mouse information. When it is done it uses | 271 // Helper used to parse mouse information. When it is done it uses |
273 // |reply_runner| and |callback| to update the state on the UI thread. | 272 // |reply_runner| and |callback| to update the state on the UI thread. |
274 void HandleMouseDevicesInWorker(const std::vector<DeviceInfo>& device_infos, | 273 void HandleMouseDevicesInWorker(const std::vector<DeviceInfo>& device_infos, |
275 scoped_refptr<base::TaskRunner> reply_runner, | 274 scoped_refptr<base::TaskRunner> reply_runner, |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
377 HandleMouseDevicesInWorker(devices, reply_runner, callbacks.mouse_callback); | 376 HandleMouseDevicesInWorker(devices, reply_runner, callbacks.mouse_callback); |
378 HandleTouchpadDevicesInWorker(devices, reply_runner, | 377 HandleTouchpadDevicesInWorker(devices, reply_runner, |
379 callbacks.touchpad_callback); | 378 callbacks.touchpad_callback); |
380 reply_runner->PostTask(FROM_HERE, callbacks.hotplug_finished_callback); | 379 reply_runner->PostTask(FROM_HERE, callbacks.hotplug_finished_callback); |
381 } | 380 } |
382 | 381 |
383 DeviceHotplugEventObserver* GetHotplugEventObserver() { | 382 DeviceHotplugEventObserver* GetHotplugEventObserver() { |
384 return DeviceDataManager::GetInstance(); | 383 return DeviceDataManager::GetInstance(); |
385 } | 384 } |
386 | 385 |
387 void OnKeyboardDevices(const std::vector<KeyboardDevice>& devices) { | 386 void OnKeyboardDevices(const std::vector<InputDevice>& devices) { |
388 GetHotplugEventObserver()->OnKeyboardDevicesUpdated(devices); | 387 GetHotplugEventObserver()->OnKeyboardDevicesUpdated(devices); |
389 } | 388 } |
390 | 389 |
391 void OnTouchscreenDevices(const std::vector<TouchscreenDevice>& devices) { | 390 void OnTouchscreenDevices(const std::vector<TouchscreenDevice>& devices) { |
392 GetHotplugEventObserver()->OnTouchscreenDevicesUpdated(devices); | 391 GetHotplugEventObserver()->OnTouchscreenDevicesUpdated(devices); |
393 } | 392 } |
394 | 393 |
395 void OnMouseDevices(const std::vector<InputDevice>& devices) { | 394 void OnMouseDevices(const std::vector<InputDevice>& devices) { |
396 GetHotplugEventObserver()->OnMouseDevicesUpdated(devices); | 395 GetHotplugEventObserver()->OnMouseDevicesUpdated(devices); |
397 } | 396 } |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
494 // worker thread. Once the device information is extracted the parsed devices | 493 // worker thread. Once the device information is extracted the parsed devices |
495 // will be returned via the callbacks. | 494 // will be returned via the callbacks. |
496 base::WorkerPool::PostTask( | 495 base::WorkerPool::PostTask( |
497 FROM_HERE, | 496 FROM_HERE, |
498 base::Bind(&HandleHotplugEventInWorker, device_infos, display_state, | 497 base::Bind(&HandleHotplugEventInWorker, device_infos, display_state, |
499 base::ThreadTaskRunnerHandle::Get(), callbacks), | 498 base::ThreadTaskRunnerHandle::Get(), callbacks), |
500 true /* task_is_slow */); | 499 true /* task_is_slow */); |
501 } | 500 } |
502 | 501 |
503 } // namespace ui | 502 } // namespace ui |
OLD | NEW |