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/event_factory_evdev.h" | 5 #include "ui/events/ozone/evdev/event_factory_evdev.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
9 #include "base/task_runner.h" | 9 #include "base/task_runner.h" |
10 #include "base/thread_task_runner_handle.h" | 10 #include "base/thread_task_runner_handle.h" |
11 #include "base/threading/worker_pool.h" | 11 #include "base/threading/worker_pool.h" |
12 #include "ui/events/devices/device_data_manager.h" | 12 #include "ui/events/devices/device_data_manager.h" |
13 #include "ui/events/devices/input_device.h" | 13 #include "ui/events/devices/input_device.h" |
14 #include "ui/events/ozone/device/device_event.h" | 14 #include "ui/events/ozone/device/device_event.h" |
15 #include "ui/events/ozone/device/device_manager.h" | 15 #include "ui/events/ozone/device/device_manager.h" |
16 #include "ui/events/ozone/evdev/cursor_delegate_evdev.h" | 16 #include "ui/events/ozone/evdev/cursor_delegate_evdev.h" |
17 #include "ui/events/ozone/evdev/input_controller_evdev.h" | 17 #include "ui/events/ozone/evdev/input_controller_evdev.h" |
18 #include "ui/events/ozone/evdev/input_device_factory_evdev.h" | 18 #include "ui/events/ozone/evdev/input_device_factory_evdev.h" |
| 19 #include "ui/events/ozone/evdev/input_device_factory_proxy_evdev.h" |
19 #include "ui/events/ozone/evdev/input_injector_evdev.h" | 20 #include "ui/events/ozone/evdev/input_injector_evdev.h" |
20 | 21 |
21 namespace ui { | 22 namespace ui { |
22 | 23 |
23 namespace { | 24 namespace { |
24 | 25 |
25 class ForwardingDeviceEventDispatcher : public DeviceEventDispatcherEvdev { | 26 class ForwardingDeviceEventDispatcher : public DeviceEventDispatcherEvdev { |
26 public: | 27 public: |
27 ForwardingDeviceEventDispatcher( | 28 ForwardingDeviceEventDispatcher( |
28 scoped_refptr<base::SingleThreadTaskRunner> ui_thread_runner, | 29 scoped_refptr<base::SingleThreadTaskRunner> ui_thread_runner, |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 | 133 |
133 void EventFactoryEvdev::Init() { | 134 void EventFactoryEvdev::Init() { |
134 DCHECK(!initialized_); | 135 DCHECK(!initialized_); |
135 | 136 |
136 // Set up device factory. | 137 // Set up device factory. |
137 scoped_ptr<DeviceEventDispatcherEvdev> dispatcher( | 138 scoped_ptr<DeviceEventDispatcherEvdev> dispatcher( |
138 new ForwardingDeviceEventDispatcher(base::ThreadTaskRunnerHandle::Get(), | 139 new ForwardingDeviceEventDispatcher(base::ThreadTaskRunnerHandle::Get(), |
139 weak_ptr_factory_.GetWeakPtr())); | 140 weak_ptr_factory_.GetWeakPtr())); |
140 input_device_factory_.reset( | 141 input_device_factory_.reset( |
141 new InputDeviceFactoryEvdev(dispatcher.Pass(), cursor_)); | 142 new InputDeviceFactoryEvdev(dispatcher.Pass(), cursor_)); |
| 143 input_device_factory_proxy_.reset( |
| 144 new InputDeviceFactoryProxyEvdev(base::ThreadTaskRunnerHandle::Get(), |
| 145 input_device_factory_->GetWeakPtr())); |
142 | 146 |
143 // TODO(spang): This settings interface is really broken. crbug.com/450899 | 147 // TODO(spang): This settings interface is really broken. crbug.com/450899 |
144 input_controller_.SetInputDeviceFactory(input_device_factory_.get()); | 148 input_controller_.SetInputDeviceFactory(input_device_factory_proxy_.get()); |
145 | 149 |
146 // Scan & monitor devices. | 150 // Scan & monitor devices. |
147 device_manager_->AddObserver(this); | 151 device_manager_->AddObserver(this); |
148 device_manager_->ScanDevices(this); | 152 device_manager_->ScanDevices(this); |
149 | 153 |
150 initialized_ = true; | 154 initialized_ = true; |
151 } | 155 } |
152 | 156 |
153 scoped_ptr<SystemInputInjector> EventFactoryEvdev::CreateSystemInputInjector() { | 157 scoped_ptr<SystemInputInjector> EventFactoryEvdev::CreateSystemInputInjector() { |
154 return make_scoped_ptr(new InputInjectorEvdev( | 158 return make_scoped_ptr(new InputInjectorEvdev( |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
284 } | 288 } |
285 | 289 |
286 void EventFactoryEvdev::OnDeviceEvent(const DeviceEvent& event) { | 290 void EventFactoryEvdev::OnDeviceEvent(const DeviceEvent& event) { |
287 if (event.device_type() != DeviceEvent::INPUT) | 291 if (event.device_type() != DeviceEvent::INPUT) |
288 return; | 292 return; |
289 | 293 |
290 switch (event.action_type()) { | 294 switch (event.action_type()) { |
291 case DeviceEvent::ADD: | 295 case DeviceEvent::ADD: |
292 case DeviceEvent::CHANGE: { | 296 case DeviceEvent::CHANGE: { |
293 TRACE_EVENT1("ozone", "OnDeviceAdded", "path", event.path().value()); | 297 TRACE_EVENT1("ozone", "OnDeviceAdded", "path", event.path().value()); |
294 input_device_factory_->AddInputDevice(NextDeviceId(), event.path()); | 298 input_device_factory_proxy_->AddInputDevice(NextDeviceId(), event.path()); |
295 break; | 299 break; |
296 } | 300 } |
297 case DeviceEvent::REMOVE: { | 301 case DeviceEvent::REMOVE: { |
298 TRACE_EVENT1("ozone", "OnDeviceRemoved", "path", event.path().value()); | 302 TRACE_EVENT1("ozone", "OnDeviceRemoved", "path", event.path().value()); |
299 input_device_factory_->RemoveInputDevice(event.path()); | 303 input_device_factory_proxy_->RemoveInputDevice(event.path()); |
300 break; | 304 break; |
301 } | 305 } |
302 } | 306 } |
303 } | 307 } |
304 | 308 |
305 void EventFactoryEvdev::OnDispatcherListChanged() { | 309 void EventFactoryEvdev::OnDispatcherListChanged() { |
306 if (!initialized_) | 310 if (!initialized_) |
307 Init(); | 311 Init(); |
308 } | 312 } |
309 | 313 |
310 void EventFactoryEvdev::WarpCursorTo(gfx::AcceleratedWidget widget, | 314 void EventFactoryEvdev::WarpCursorTo(gfx::AcceleratedWidget widget, |
311 const gfx::PointF& location) { | 315 const gfx::PointF& location) { |
312 if (cursor_) { | 316 if (cursor_) { |
313 cursor_->MoveCursorTo(widget, location); | 317 cursor_->MoveCursorTo(widget, location); |
314 PostUiEvent(make_scoped_ptr(new MouseEvent(ET_MOUSE_MOVED, | 318 PostUiEvent(make_scoped_ptr(new MouseEvent(ET_MOUSE_MOVED, |
315 cursor_->GetLocation(), | 319 cursor_->GetLocation(), |
316 cursor_->GetLocation(), | 320 cursor_->GetLocation(), |
317 modifiers_.GetModifierFlags(), | 321 modifiers_.GetModifierFlags(), |
318 /* changed_button_flags */ 0))); | 322 /* changed_button_flags */ 0))); |
319 } | 323 } |
320 } | 324 } |
321 | 325 |
322 int EventFactoryEvdev::NextDeviceId() { | 326 int EventFactoryEvdev::NextDeviceId() { |
323 return ++last_device_id_; | 327 return ++last_device_id_; |
324 } | 328 } |
325 | 329 |
326 } // namespace ui | 330 } // namespace ui |
OLD | NEW |