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

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

Issue 858333006: [PATCH 9.6/11] ozone: evdev: Remove extra PostTask during dispatch from EventFactoryEvdev (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"
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 base::WeakPtr<EventFactoryEvdev> event_factory_evdev_; 103 base::WeakPtr<EventFactoryEvdev> event_factory_evdev_;
104 }; 104 };
105 105
106 } // namespace 106 } // namespace
107 107
108 EventFactoryEvdev::EventFactoryEvdev(CursorDelegateEvdev* cursor, 108 EventFactoryEvdev::EventFactoryEvdev(CursorDelegateEvdev* cursor,
109 DeviceManager* device_manager, 109 DeviceManager* device_manager,
110 KeyboardLayoutEngine* keyboard_layout) 110 KeyboardLayoutEngine* keyboard_layout)
111 : last_device_id_(0), 111 : last_device_id_(0),
112 device_manager_(device_manager), 112 device_manager_(device_manager),
113 dispatch_callback_( 113 keyboard_(&modifiers_,
114 base::Bind(&EventFactoryEvdev::PostUiEvent, base::Unretained(this))), 114 keyboard_layout,
115 keyboard_(&modifiers_, keyboard_layout, dispatch_callback_), 115 base::Bind(&EventFactoryEvdev::DispatchUiEvent,
116 base::Unretained(this))),
116 cursor_(cursor), 117 cursor_(cursor),
117 input_controller_(&keyboard_, &button_map_), 118 input_controller_(&keyboard_, &button_map_),
118 initialized_(false), 119 initialized_(false),
119 weak_ptr_factory_(this) { 120 weak_ptr_factory_(this) {
120 DCHECK(device_manager_); 121 DCHECK(device_manager_);
121 } 122 }
122 123
123 EventFactoryEvdev::~EventFactoryEvdev() { 124 EventFactoryEvdev::~EventFactoryEvdev() {
124 } 125 }
125 126
(...skipping 26 matching lines...) Expand all
152 weak_ptr_factory_.GetWeakPtr())); 153 weak_ptr_factory_.GetWeakPtr()));
153 return make_scoped_ptr(new InputInjectorEvdev(dispatcher.Pass(), cursor_)); 154 return make_scoped_ptr(new InputInjectorEvdev(dispatcher.Pass(), cursor_));
154 } 155 }
155 156
156 void EventFactoryEvdev::DispatchKeyEvent(const KeyEventParams& params) { 157 void EventFactoryEvdev::DispatchKeyEvent(const KeyEventParams& params) {
157 keyboard_.OnKeyChange(params.code, params.down); 158 keyboard_.OnKeyChange(params.code, params.down);
158 } 159 }
159 160
160 void EventFactoryEvdev::DispatchMouseMoveEvent( 161 void EventFactoryEvdev::DispatchMouseMoveEvent(
161 const MouseMoveEventParams& params) { 162 const MouseMoveEventParams& params) {
162 scoped_ptr<MouseEvent> event(new MouseEvent(ui::ET_MOUSE_MOVED, 163 MouseEvent event(ui::ET_MOUSE_MOVED, params.location, params.location,
163 params.location, params.location, 164 modifiers_.GetModifierFlags(),
164 modifiers_.GetModifierFlags(), 165 /* changed_button_flags */ 0);
165 /* changed_button_flags */ 0)); 166 event.set_source_device_id(params.device_id);
166 event->set_source_device_id(params.device_id); 167 DispatchUiEvent(&event);
167 PostUiEvent(event.Pass());
168 } 168 }
169 169
170 void EventFactoryEvdev::DispatchMouseButtonEvent( 170 void EventFactoryEvdev::DispatchMouseButtonEvent(
171 const MouseButtonEventParams& params) { 171 const MouseButtonEventParams& params) {
172 // Mouse buttons can be remapped, touchpad taps & clicks cannot. 172 // Mouse buttons can be remapped, touchpad taps & clicks cannot.
173 unsigned int button = params.button; 173 unsigned int button = params.button;
174 if (params.allow_remap) 174 if (params.allow_remap)
175 button = button_map_.GetMappedButton(button); 175 button = button_map_.GetMappedButton(button);
176 176
177 int modifier = EVDEV_MODIFIER_NONE; 177 int modifier = EVDEV_MODIFIER_NONE;
178 switch (button) { 178 switch (button) {
179 case BTN_LEFT: 179 case BTN_LEFT:
180 modifier = EVDEV_MODIFIER_LEFT_MOUSE_BUTTON; 180 modifier = EVDEV_MODIFIER_LEFT_MOUSE_BUTTON;
181 break; 181 break;
182 case BTN_RIGHT: 182 case BTN_RIGHT:
183 modifier = EVDEV_MODIFIER_RIGHT_MOUSE_BUTTON; 183 modifier = EVDEV_MODIFIER_RIGHT_MOUSE_BUTTON;
184 break; 184 break;
185 case BTN_MIDDLE: 185 case BTN_MIDDLE:
186 modifier = EVDEV_MODIFIER_MIDDLE_MOUSE_BUTTON; 186 modifier = EVDEV_MODIFIER_MIDDLE_MOUSE_BUTTON;
187 break; 187 break;
188 default: 188 default:
189 return; 189 return;
190 } 190 }
191 191
192 int flag = modifiers_.GetEventFlagFromModifier(modifier); 192 int flag = modifiers_.GetEventFlagFromModifier(modifier);
193 modifiers_.UpdateModifier(modifier, params.down); 193 modifiers_.UpdateModifier(modifier, params.down);
194 194
195 scoped_ptr<MouseEvent> event(new MouseEvent( 195 MouseEvent event(params.down ? ui::ET_MOUSE_PRESSED : ui::ET_MOUSE_RELEASED,
196 params.down ? ui::ET_MOUSE_PRESSED : ui::ET_MOUSE_RELEASED, 196 params.location, params.location,
197 params.location, params.location, modifiers_.GetModifierFlags() | flag, 197 modifiers_.GetModifierFlags() | flag,
198 /* changed_button_flags */ flag)); 198 /* changed_button_flags */ flag);
199 event->set_source_device_id(params.device_id); 199 event.set_source_device_id(params.device_id);
200 PostUiEvent(event.Pass()); 200 DispatchUiEvent(&event);
201 } 201 }
202 202
203 void EventFactoryEvdev::DispatchMouseWheelEvent( 203 void EventFactoryEvdev::DispatchMouseWheelEvent(
204 const MouseWheelEventParams& params) { 204 const MouseWheelEventParams& params) {
205 scoped_ptr<MouseWheelEvent> event(new MouseWheelEvent( 205 MouseWheelEvent event(params.delta, params.location, params.location,
206 params.delta, params.location, params.location, 206 modifiers_.GetModifierFlags(),
207 modifiers_.GetModifierFlags(), 0 /* changed_button_flags */)); 207 0 /* changed_button_flags */);
208 event->set_source_device_id(params.device_id); 208 event.set_source_device_id(params.device_id);
209 PostUiEvent(event.Pass()); 209 DispatchUiEvent(&event);
210 } 210 }
211 211
212 void EventFactoryEvdev::DispatchScrollEvent(const ScrollEventParams& params) { 212 void EventFactoryEvdev::DispatchScrollEvent(const ScrollEventParams& params) {
213 scoped_ptr<ScrollEvent> event(new ScrollEvent( 213 ScrollEvent event(params.type, params.location, params.timestamp,
214 params.type, params.location, params.timestamp, 214 modifiers_.GetModifierFlags(), params.delta.x(),
215 modifiers_.GetModifierFlags(), params.delta.x(), params.delta.y(), 215 params.delta.y(), params.ordinal_delta.x(),
216 params.ordinal_delta.x(), params.ordinal_delta.y(), params.finger_count)); 216 params.ordinal_delta.y(), params.finger_count);
217 event->set_source_device_id(params.device_id); 217 event.set_source_device_id(params.device_id);
218 PostUiEvent(event.Pass()); 218 DispatchUiEvent(&event);
219 } 219 }
220 220
221 void EventFactoryEvdev::DispatchTouchEvent(const TouchEventParams& params) { 221 void EventFactoryEvdev::DispatchTouchEvent(const TouchEventParams& params) {
222 float x = params.location.x(); 222 float x = params.location.x();
223 float y = params.location.y(); 223 float y = params.location.y();
224 double radius_x = params.radii.x(); 224 double radius_x = params.radii.x();
225 double radius_y = params.radii.y(); 225 double radius_y = params.radii.y();
226 226
227 // Transform the event to align touches to the image based on display mode. 227 // Transform the event to align touches to the image based on display mode.
228 DeviceDataManager::GetInstance()->ApplyTouchTransformer(params.device_id, &x, 228 DeviceDataManager::GetInstance()->ApplyTouchTransformer(params.device_id, &x,
229 &y); 229 &y);
230 DeviceDataManager::GetInstance()->ApplyTouchRadiusScale(params.device_id, 230 DeviceDataManager::GetInstance()->ApplyTouchRadiusScale(params.device_id,
231 &radius_x); 231 &radius_x);
232 DeviceDataManager::GetInstance()->ApplyTouchRadiusScale(params.device_id, 232 DeviceDataManager::GetInstance()->ApplyTouchRadiusScale(params.device_id,
233 &radius_y); 233 &radius_y);
234 234
235 scoped_ptr<TouchEvent> touch_event(new TouchEvent( 235 TouchEvent touch_event(params.type, gfx::PointF(x, y),
236 params.type, gfx::PointF(x, y), modifiers_.GetModifierFlags(), 236 modifiers_.GetModifierFlags(), params.touch_id,
237 params.touch_id, params.timestamp, radius_x, radius_y, 237 params.timestamp, radius_x, radius_y,
238 /* angle */ 0., params.pressure)); 238 /* angle */ 0.f, params.pressure);
239 touch_event->set_source_device_id(params.device_id); 239 touch_event.set_source_device_id(params.device_id);
240 PostUiEvent(touch_event.Pass()); 240 DispatchUiEvent(&touch_event);
241 } 241 }
242 242
243 void EventFactoryEvdev::PostUiEvent(scoped_ptr<Event> event) { 243 void EventFactoryEvdev::DispatchUiEvent(Event* event) {
244 base::ThreadTaskRunnerHandle::Get()->PostTask( 244 // DispatchEvent takes PlatformEvent which is void*. This function
245 FROM_HERE, 245 // wraps it with the real type.
246 base::Bind(&EventFactoryEvdev::DispatchUiEventTask, 246 DispatchEvent(event);
247 weak_ptr_factory_.GetWeakPtr(),
248 base::Passed(&event)));
249 } 247 }
250 248
251 void EventFactoryEvdev::DispatchKeyboardDevicesUpdated( 249 void EventFactoryEvdev::DispatchKeyboardDevicesUpdated(
252 const std::vector<KeyboardDevice>& devices) { 250 const std::vector<KeyboardDevice>& devices) {
253 DeviceHotplugEventObserver* observer = DeviceDataManager::GetInstance(); 251 DeviceHotplugEventObserver* observer = DeviceDataManager::GetInstance();
254 observer->OnKeyboardDevicesUpdated(devices); 252 observer->OnKeyboardDevicesUpdated(devices);
255 } 253 }
256 254
257 void EventFactoryEvdev::DispatchTouchscreenDevicesUpdated( 255 void EventFactoryEvdev::DispatchTouchscreenDevicesUpdated(
258 const std::vector<TouchscreenDevice>& devices) { 256 const std::vector<TouchscreenDevice>& devices) {
259 DeviceHotplugEventObserver* observer = DeviceDataManager::GetInstance(); 257 DeviceHotplugEventObserver* observer = DeviceDataManager::GetInstance();
260 observer->OnTouchscreenDevicesUpdated(devices); 258 observer->OnTouchscreenDevicesUpdated(devices);
261 } 259 }
262 260
263 void EventFactoryEvdev::DispatchMouseDevicesUpdated( 261 void EventFactoryEvdev::DispatchMouseDevicesUpdated(
264 const std::vector<InputDevice>& devices) { 262 const std::vector<InputDevice>& devices) {
265 // There's no list of mice in DeviceDataManager. 263 // There's no list of mice in DeviceDataManager.
266 input_controller_.set_has_mouse(devices.size() != 0); 264 input_controller_.set_has_mouse(devices.size() != 0);
267 } 265 }
268 266
269 void EventFactoryEvdev::DispatchTouchpadDevicesUpdated( 267 void EventFactoryEvdev::DispatchTouchpadDevicesUpdated(
270 const std::vector<InputDevice>& devices) { 268 const std::vector<InputDevice>& devices) {
271 // There's no list of touchpads in DeviceDataManager. 269 // There's no list of touchpads in DeviceDataManager.
272 input_controller_.set_has_touchpad(devices.size() != 0); 270 input_controller_.set_has_touchpad(devices.size() != 0);
273 } 271 }
274 272
275 void EventFactoryEvdev::DispatchUiEventTask(scoped_ptr<Event> event) {
276 DispatchEvent(event.get());
277 }
278 273
279 void EventFactoryEvdev::OnDeviceEvent(const DeviceEvent& event) { 274 void EventFactoryEvdev::OnDeviceEvent(const DeviceEvent& event) {
280 if (event.device_type() != DeviceEvent::INPUT) 275 if (event.device_type() != DeviceEvent::INPUT)
281 return; 276 return;
282 277
283 switch (event.action_type()) { 278 switch (event.action_type()) {
284 case DeviceEvent::ADD: 279 case DeviceEvent::ADD:
285 case DeviceEvent::CHANGE: { 280 case DeviceEvent::CHANGE: {
286 TRACE_EVENT1("ozone", "OnDeviceAdded", "path", event.path().value()); 281 TRACE_EVENT1("ozone", "OnDeviceAdded", "path", event.path().value());
287 input_device_factory_->AddInputDevice(NextDeviceId(), event.path()); 282 input_device_factory_->AddInputDevice(NextDeviceId(), event.path());
288 break; 283 break;
289 } 284 }
290 case DeviceEvent::REMOVE: { 285 case DeviceEvent::REMOVE: {
291 TRACE_EVENT1("ozone", "OnDeviceRemoved", "path", event.path().value()); 286 TRACE_EVENT1("ozone", "OnDeviceRemoved", "path", event.path().value());
292 input_device_factory_->RemoveInputDevice(event.path()); 287 input_device_factory_->RemoveInputDevice(event.path());
293 break; 288 break;
294 } 289 }
295 } 290 }
296 } 291 }
297 292
298 void EventFactoryEvdev::OnDispatcherListChanged() { 293 void EventFactoryEvdev::OnDispatcherListChanged() {
299 if (!initialized_) 294 if (!initialized_)
300 Init(); 295 Init();
301 } 296 }
302 297
303 void EventFactoryEvdev::WarpCursorTo(gfx::AcceleratedWidget widget, 298 void EventFactoryEvdev::WarpCursorTo(gfx::AcceleratedWidget widget,
304 const gfx::PointF& location) { 299 const gfx::PointF& location) {
305 if (cursor_) { 300 if (!cursor_)
306 cursor_->MoveCursorTo(widget, location); 301 return;
307 PostUiEvent(make_scoped_ptr(new MouseEvent(ET_MOUSE_MOVED, 302
308 cursor_->GetLocation(), 303 cursor_->MoveCursorTo(widget, location);
309 cursor_->GetLocation(), 304
310 modifiers_.GetModifierFlags(), 305 base::ThreadTaskRunnerHandle::Get()->PostTask(
311 /* changed_button_flags */ 0))); 306 FROM_HERE, base::Bind(&EventFactoryEvdev::DispatchMouseMoveEvent,
312 } 307 weak_ptr_factory_.GetWeakPtr(),
308 MouseMoveEventParams(-1 /* device_id */,
309 cursor_->GetLocation())));
313 } 310 }
314 311
315 int EventFactoryEvdev::NextDeviceId() { 312 int EventFactoryEvdev::NextDeviceId() {
316 return ++last_device_id_; 313 return ++last_device_id_;
317 } 314 }
318 315
319 } // namespace ui 316 } // namespace ui
OLDNEW
« no previous file with comments | « ui/events/ozone/evdev/event_factory_evdev.h ('k') | ui/events/ozone/evdev/input_injector_evdev_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698