| Index: ui/events/ozone/evdev/event_factory_evdev.cc
|
| diff --git a/ui/events/ozone/evdev/event_factory_evdev.cc b/ui/events/ozone/evdev/event_factory_evdev.cc
|
| index cfdef16daa4af68bcee5075ea35618054fc7f159..80abb0196a2969ce7798e3c84b68e9ee7fb0193c 100644
|
| --- a/ui/events/ozone/evdev/event_factory_evdev.cc
|
| +++ b/ui/events/ozone/evdev/event_factory_evdev.cc
|
| @@ -52,11 +52,12 @@ struct OpenInputDeviceParams {
|
| // Callback for dispatching events. Call on UI thread only.
|
| EventDispatchCallback dispatch_callback;
|
| KeyEventDispatchCallback key_callback;
|
| + MouseMoveEventDispatchCallback mouse_move_callback;
|
| + MouseButtonEventDispatchCallback mouse_button_callback;
|
| TouchEventDispatchCallback touch_callback;
|
|
|
| // State shared between devices. Must not be dereferenced on worker thread.
|
| EventModifiersEvdev* modifiers;
|
| - MouseButtonMapEvdev* button_map;
|
| CursorDelegateEvdev* cursor;
|
| #if defined(USE_EVDEV_GESTURES)
|
| GesturePropertyProvider* gesture_property_provider;
|
| @@ -86,8 +87,9 @@ scoped_ptr<EventConverterEvdev> CreateConverter(
|
| if (UseGesturesLibraryForDevice(devinfo)) {
|
| scoped_ptr<GestureInterpreterLibevdevCros> gesture_interp =
|
| make_scoped_ptr(new GestureInterpreterLibevdevCros(
|
| - params.id, params.modifiers, params.button_map, params.cursor,
|
| + params.id, params.modifiers, params.cursor,
|
| params.gesture_property_provider, params.key_callback,
|
| + params.mouse_move_callback, params.mouse_button_callback,
|
| params.dispatch_callback));
|
| return make_scoped_ptr(new EventReaderLibevdevCros(
|
| fd, params.path, params.id, type, devinfo, gesture_interp.Pass()));
|
| @@ -111,8 +113,8 @@ scoped_ptr<EventConverterEvdev> CreateConverter(
|
| // Everything else: use EventConverterEvdevImpl.
|
| return make_scoped_ptr<EventConverterEvdevImpl>(new EventConverterEvdevImpl(
|
| fd, params.path, params.id, type, devinfo, params.modifiers,
|
| - params.button_map, params.cursor, params.key_callback,
|
| - params.dispatch_callback));
|
| + params.cursor, params.key_callback, params.mouse_move_callback,
|
| + params.mouse_button_callback));
|
| }
|
|
|
| // Open an input device. Opening may put the calling thread to sleep, and
|
| @@ -204,6 +206,48 @@ void EventFactoryEvdev::PostKeyEvent(const KeyEventParams& params) {
|
| keyboard_.OnKeyChange(params.code, params.down);
|
| }
|
|
|
| +void EventFactoryEvdev::PostMouseMoveEvent(const MouseMoveEventParams& params) {
|
| + scoped_ptr<MouseEvent> event(new MouseEvent(ui::ET_MOUSE_MOVED,
|
| + params.location, params.location,
|
| + modifiers_.GetModifierFlags(),
|
| + /* changed_button_flags */ 0));
|
| + event->set_source_device_id(params.device_id);
|
| + PostUiEvent(event.Pass());
|
| +}
|
| +
|
| +void EventFactoryEvdev::PostMouseButtonEvent(
|
| + const MouseButtonEventParams& params) {
|
| + // Mouse buttons can be remapped, touchpad taps & clicks cannot.
|
| + unsigned int button = params.button;
|
| + if (params.allow_remap)
|
| + button = button_map_.GetMappedButton(button);
|
| +
|
| + int modifier = EVDEV_MODIFIER_NONE;
|
| + switch (button) {
|
| + case BTN_LEFT:
|
| + modifier = EVDEV_MODIFIER_LEFT_MOUSE_BUTTON;
|
| + break;
|
| + case BTN_RIGHT:
|
| + modifier = EVDEV_MODIFIER_RIGHT_MOUSE_BUTTON;
|
| + break;
|
| + case BTN_MIDDLE:
|
| + modifier = EVDEV_MODIFIER_MIDDLE_MOUSE_BUTTON;
|
| + break;
|
| + default:
|
| + return;
|
| + }
|
| +
|
| + int flag = modifiers_.GetEventFlagFromModifier(modifier);
|
| + modifiers_.UpdateModifier(modifier, params.down);
|
| +
|
| + scoped_ptr<MouseEvent> event(new MouseEvent(
|
| + params.down ? ui::ET_MOUSE_PRESSED : ui::ET_MOUSE_RELEASED,
|
| + params.location, params.location, modifiers_.GetModifierFlags() | flag,
|
| + /* changed_button_flags */ flag));
|
| + event->set_source_device_id(params.device_id);
|
| + PostUiEvent(event.Pass());
|
| +}
|
| +
|
| void EventFactoryEvdev::PostTouchEvent(const TouchEventParams& params) {
|
| float x = params.location.x();
|
| float y = params.location.y();
|
| @@ -271,10 +315,15 @@ void EventFactoryEvdev::OnDeviceEvent(const DeviceEvent& event) {
|
| params->path = event.path();
|
| params->dispatch_callback = dispatch_callback_;
|
| params->modifiers = &modifiers_;
|
| - params->button_map = &button_map_;
|
| params->cursor = cursor_;
|
| params->key_callback = base::Bind(&EventFactoryEvdev::PostKeyEvent,
|
| weak_ptr_factory_.GetWeakPtr());
|
| + params->mouse_move_callback =
|
| + base::Bind(&EventFactoryEvdev::PostMouseMoveEvent,
|
| + weak_ptr_factory_.GetWeakPtr());
|
| + params->mouse_button_callback =
|
| + base::Bind(&EventFactoryEvdev::PostMouseButtonEvent,
|
| + weak_ptr_factory_.GetWeakPtr());
|
| params->touch_callback = base::Bind(&EventFactoryEvdev::PostTouchEvent,
|
| weak_ptr_factory_.GetWeakPtr());
|
|
|
|
|