Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Side by Side Diff: ui/events/ozone/evdev/event_factory_evdev.cc

Issue 874723002: [PATCH 9/11] ozone: evdev: Add a device event dispatcher that forwards to UI thread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "base/time/time.h" 12 #include "base/time/time.h"
13 #include "ui/events/devices/device_data_manager.h" 13 #include "ui/events/devices/device_data_manager.h"
14 #include "ui/events/devices/input_device.h" 14 #include "ui/events/devices/input_device.h"
15 #include "ui/events/ozone/device/device_event.h" 15 #include "ui/events/ozone/device/device_event.h"
16 #include "ui/events/ozone/device/device_manager.h" 16 #include "ui/events/ozone/device/device_manager.h"
17 #include "ui/events/ozone/evdev/cursor_delegate_evdev.h" 17 #include "ui/events/ozone/evdev/cursor_delegate_evdev.h"
18 #include "ui/events/ozone/evdev/input_controller_evdev.h" 18 #include "ui/events/ozone/evdev/input_controller_evdev.h"
19 #include "ui/events/ozone/evdev/input_device_factory_evdev.h" 19 #include "ui/events/ozone/evdev/input_device_factory_evdev.h"
20 #include "ui/events/ozone/evdev/input_injector_evdev.h" 20 #include "ui/events/ozone/evdev/input_injector_evdev.h"
21 21
22 namespace ui { 22 namespace ui {
23 23
24 namespace {
25
26 // Thread safe dispatcher proxy for EventFactoryEvdev.
27 class ProxyDeviceEventDispatcher : public DeviceEventDispatcherEvdev {
28 public:
29 ProxyDeviceEventDispatcher(
30 scoped_refptr<base::SingleThreadTaskRunner> ui_thread_runner,
31 base::WeakPtr<EventFactoryEvdev> event_factory_evdev)
32 : ui_thread_runner_(ui_thread_runner),
33 event_factory_evdev_(event_factory_evdev) {}
34 ~ProxyDeviceEventDispatcher() override {}
35
36 // DeviceEventDispatcher:
37 void DispatchKeyEvent(const KeyEventParams& params) override {
38 ui_thread_runner_->PostTask(FROM_HERE,
39 base::Bind(&EventFactoryEvdev::DispatchKeyEvent,
40 event_factory_evdev_, params));
41 }
42
43 void DispatchMouseMoveEvent(const MouseMoveEventParams& params) override {
44 ui_thread_runner_->PostTask(
45 FROM_HERE, base::Bind(&EventFactoryEvdev::DispatchMouseMoveEvent,
46 event_factory_evdev_, params));
47 }
48
49 void DispatchMouseButtonEvent(const MouseButtonEventParams& params) override {
50 ui_thread_runner_->PostTask(
51 FROM_HERE, base::Bind(&EventFactoryEvdev::DispatchMouseButtonEvent,
52 event_factory_evdev_, params));
53 }
54
55 void DispatchMouseWheelEvent(const MouseWheelEventParams& params) override {
56 ui_thread_runner_->PostTask(
57 FROM_HERE, base::Bind(&EventFactoryEvdev::DispatchMouseWheelEvent,
58 event_factory_evdev_, params));
59 }
60
61 void DispatchScrollEvent(const ScrollEventParams& params) override {
62 ui_thread_runner_->PostTask(
63 FROM_HERE, base::Bind(&EventFactoryEvdev::DispatchScrollEvent,
64 event_factory_evdev_, params));
65 }
66
67 void DispatchTouchEvent(const TouchEventParams& params) override {
68 ui_thread_runner_->PostTask(
69 FROM_HERE, base::Bind(&EventFactoryEvdev::DispatchTouchEvent,
70 event_factory_evdev_, params));
71 }
72
73 void DispatchKeyboardDevicesUpdated(
74 const std::vector<KeyboardDevice>& devices) override {
75 ui_thread_runner_->PostTask(
76 FROM_HERE,
77 base::Bind(&EventFactoryEvdev::DispatchKeyboardDevicesUpdated,
78 event_factory_evdev_, devices));
79 }
80 void DispatchTouchscreenDevicesUpdated(
81 const std::vector<TouchscreenDevice>& devices) override {
82 ui_thread_runner_->PostTask(
83 FROM_HERE,
84 base::Bind(&EventFactoryEvdev::DispatchTouchscreenDevicesUpdated,
85 event_factory_evdev_, devices));
86 }
87 void DispatchMouseDevicesUpdated(
88 const std::vector<InputDevice>& devices) override {
89 ui_thread_runner_->PostTask(
90 FROM_HERE, base::Bind(&EventFactoryEvdev::DispatchMouseDevicesUpdated,
91 event_factory_evdev_, devices));
92 }
93 void DispatchTouchpadDevicesUpdated(
94 const std::vector<InputDevice>& devices) override {
95 ui_thread_runner_->PostTask(
96 FROM_HERE,
97 base::Bind(&EventFactoryEvdev::DispatchTouchpadDevicesUpdated,
98 event_factory_evdev_, devices));
99 }
100
101 private:
102 scoped_refptr<base::SingleThreadTaskRunner> ui_thread_runner_;
103 base::WeakPtr<EventFactoryEvdev> event_factory_evdev_;
104 };
105
106 } // namespace
107
24 EventFactoryEvdev::EventFactoryEvdev(CursorDelegateEvdev* cursor, 108 EventFactoryEvdev::EventFactoryEvdev(CursorDelegateEvdev* cursor,
25 DeviceManager* device_manager, 109 DeviceManager* device_manager,
26 KeyboardLayoutEngine* keyboard_layout) 110 KeyboardLayoutEngine* keyboard_layout)
27 : last_device_id_(0), 111 : last_device_id_(0),
28 device_manager_(device_manager), 112 device_manager_(device_manager),
29 dispatch_callback_( 113 dispatch_callback_(
30 base::Bind(&EventFactoryEvdev::PostUiEvent, base::Unretained(this))), 114 base::Bind(&EventFactoryEvdev::PostUiEvent, base::Unretained(this))),
31 keyboard_(&modifiers_, keyboard_layout, dispatch_callback_), 115 keyboard_(&modifiers_, keyboard_layout, dispatch_callback_),
32 cursor_(cursor), 116 cursor_(cursor),
33 input_controller_(&keyboard_, &button_map_), 117 input_controller_(&keyboard_, &button_map_),
34 initialized_(false), 118 initialized_(false),
35 weak_ptr_factory_(this) { 119 weak_ptr_factory_(this) {
36 DCHECK(device_manager_); 120 DCHECK(device_manager_);
37 } 121 }
38 122
39 EventFactoryEvdev::~EventFactoryEvdev() { 123 EventFactoryEvdev::~EventFactoryEvdev() {
40 } 124 }
41 125
42 void EventFactoryEvdev::Init() { 126 void EventFactoryEvdev::Init() {
43 DCHECK(!initialized_); 127 DCHECK(!initialized_);
44 128
45 // Set up device factory. 129 // Set up device factory.
46 input_device_factory_.reset(new InputDeviceFactoryEvdev( 130 scoped_ptr<DeviceEventDispatcherEvdev> dispatcher(
47 this, base::ThreadTaskRunnerHandle::Get(), cursor_)); 131 new ProxyDeviceEventDispatcher(base::ThreadTaskRunnerHandle::Get(),
132 weak_ptr_factory_.GetWeakPtr()));
133 input_device_factory_.reset(
134 new InputDeviceFactoryEvdev(dispatcher.Pass(), cursor_));
135
48 // TODO(spang): This settings interface is really broken. crbug.com/450899 136 // TODO(spang): This settings interface is really broken. crbug.com/450899
49 input_controller_.SetInputDeviceFactory(input_device_factory_.get()); 137 input_controller_.SetInputDeviceFactory(input_device_factory_.get());
50 138
51 // Scan & monitor devices. 139 // Scan & monitor devices.
52 device_manager_->AddObserver(this); 140 device_manager_->AddObserver(this);
53 device_manager_->ScanDevices(this); 141 device_manager_->ScanDevices(this);
54 142
55 initialized_ = true; 143 initialized_ = true;
56 } 144 }
57 145
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 modifiers_.GetModifierFlags(), 305 modifiers_.GetModifierFlags(),
218 /* changed_button_flags */ 0))); 306 /* changed_button_flags */ 0)));
219 } 307 }
220 } 308 }
221 309
222 int EventFactoryEvdev::NextDeviceId() { 310 int EventFactoryEvdev::NextDeviceId() {
223 return ++last_device_id_; 311 return ++last_device_id_;
224 } 312 }
225 313
226 } // namespace ui 314 } // namespace ui
OLDNEW
« no previous file with comments | « ui/events/ozone/evdev/event_factory_evdev.h ('k') | ui/events/ozone/evdev/input_device_factory_evdev.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698