| Index: ui/events/ozone/evdev/touch_event_converter_evdev.cc
 | 
| diff --git a/ui/events/ozone/evdev/touch_event_converter_evdev.cc b/ui/events/ozone/evdev/touch_event_converter_evdev.cc
 | 
| index 98483d30df2094fc1077b08478f638a06dcc4f01..c46608d938577b8a3ec79c290e71ab7be7ddf89b 100644
 | 
| --- a/ui/events/ozone/evdev/touch_event_converter_evdev.cc
 | 
| +++ b/ui/events/ozone/evdev/touch_event_converter_evdev.cc
 | 
| @@ -78,23 +78,15 @@ int32_t AbsCodeToMtCode(int32_t code) {
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -ui::PointerDetails GetEventPointerDetails(
 | 
| -    const ui::InProgressTouchEvdev& event) {
 | 
| -  ui::EventPointerType type;
 | 
| -  switch (event.tool_code) {
 | 
| +ui::EventPointerType GetEventPointerType(int tool_code) {
 | 
| +  switch (tool_code) {
 | 
|      case BTN_TOOL_PEN:
 | 
| -      type = ui::EventPointerType::POINTER_TYPE_PEN;
 | 
| -      break;
 | 
| +      return ui::EventPointerType::POINTER_TYPE_PEN;
 | 
|      case BTN_TOOL_RUBBER:
 | 
| -      type = ui::EventPointerType::POINTER_TYPE_ERASER;
 | 
| -      break;
 | 
| +      return ui::EventPointerType::POINTER_TYPE_ERASER;
 | 
|      default:
 | 
| -      type = ui::EventPointerType::POINTER_TYPE_TOUCH;
 | 
| +      return ui::EventPointerType::POINTER_TYPE_TOUCH;
 | 
|    }
 | 
| -  return ui::PointerDetails(type, event.radius_x, event.radius_y,
 | 
| -                            event.pressure,
 | 
| -                            /* tilt_x */ 0.0f,
 | 
| -                            /* tilt_y */ 0.0f);
 | 
|  }
 | 
|  
 | 
|  const int kTrackingIdForUnusedSlot = -1;
 | 
| @@ -328,7 +320,7 @@ void TouchEventConverterEvdev::EmulateMultitouchEvent(
 | 
|      if (emulated_event.code >= 0)
 | 
|        ProcessMultitouchEvent(emulated_event);
 | 
|    } else if (event.type == EV_KEY) {
 | 
| -    if (event.code == BTN_TOUCH ||
 | 
| +    if (event.code == BTN_TOUCH || event.code == BTN_0 ||
 | 
|          (quirk_left_mouse_button_ && event.code == BTN_LEFT)) {
 | 
|        emulated_event.type = EV_ABS;
 | 
|        emulated_event.code = ABS_MT_TRACKING_ID;
 | 
| @@ -357,11 +349,6 @@ void TouchEventConverterEvdev::ProcessKey(const input_event& input) {
 | 
|        break;
 | 
|      case BTN_TOOL_PEN:
 | 
|      case BTN_TOOL_RUBBER:
 | 
| -      // Do not change tool types while touching to prevent inconsistencies
 | 
| -      // from switching between Mouse and TouchEvents.
 | 
| -      if (events_[current_slot_].was_touching)
 | 
| -        break;
 | 
| -
 | 
|        if (input.value > 0) {
 | 
|          events_[current_slot_].tool_code = input.code;
 | 
|        } else {
 | 
| @@ -450,33 +437,12 @@ void TouchEventConverterEvdev::ReportTouchEvent(
 | 
|      const InProgressTouchEvdev& event,
 | 
|      EventType event_type,
 | 
|      base::TimeTicks timestamp) {
 | 
| -  dispatcher_->DispatchTouchEvent(TouchEventParams(
 | 
| -      input_device_.id, event.slot, event_type, gfx::PointF(event.x, event.y),
 | 
| -      GetEventPointerDetails(event), timestamp));
 | 
| -}
 | 
| -
 | 
| -void TouchEventConverterEvdev::ReportStylusEvent(
 | 
| -    const InProgressTouchEvdev& event,
 | 
| -    base::TimeTicks timestamp) {
 | 
| -  if (event.btn_left.changed)
 | 
| -    ReportButton(BTN_LEFT, event.btn_left.down, event, timestamp);
 | 
| -  if (event.btn_right.changed)
 | 
| -    ReportButton(BTN_RIGHT, event.btn_right.down, event, timestamp);
 | 
| -  if (event.btn_middle.changed)
 | 
| -    ReportButton(BTN_MIDDLE, event.btn_middle.down, event, timestamp);
 | 
| -
 | 
| -  dispatcher_->DispatchMouseMoveEvent(MouseMoveEventParams(
 | 
| -      input_device_.id, EF_DIRECT_INPUT, gfx::PointF(event.x, event.y),
 | 
| -      GetEventPointerDetails(event), timestamp));
 | 
| -}
 | 
| -
 | 
| -void TouchEventConverterEvdev::ReportButton(unsigned int button,
 | 
| -                                            bool down,
 | 
| -                                            const InProgressTouchEvdev& event,
 | 
| -                                            base::TimeTicks timestamp) {
 | 
| -  dispatcher_->DispatchMouseButtonEvent(MouseButtonEventParams(
 | 
| -      input_device_.id, EF_DIRECT_INPUT, gfx::PointF(event.x, event.y), button,
 | 
| -      down, false /* allow_remap */, GetEventPointerDetails(event), timestamp));
 | 
| +  ui::PointerDetails details(event.reported_tool_type, event.radius_x,
 | 
| +                             event.radius_y, event.pressure,
 | 
| +                             /* tilt_x */ 0.0f, /* tilt_y */ 0.0f);
 | 
| +  dispatcher_->DispatchTouchEvent(
 | 
| +      TouchEventParams(input_device_.id, event.slot, event_type,
 | 
| +                       gfx::PointF(event.x, event.y), details, timestamp));
 | 
|  }
 | 
|  
 | 
|  void TouchEventConverterEvdev::ReportEvents(base::TimeTicks timestamp) {
 | 
| @@ -499,13 +465,12 @@ void TouchEventConverterEvdev::ReportEvents(base::TimeTicks timestamp) {
 | 
|      if (touch_noise_finder_ && touch_noise_finder_->SlotHasNoise(event->slot))
 | 
|        event->cancelled = true;
 | 
|  
 | 
| -    if (event->tool_code > 0) {
 | 
| -      ReportStylusEvent(*event, timestamp);
 | 
| -    } else {
 | 
| -      EventType event_type = GetEventTypeForTouch(*event);
 | 
| -      if (event_type != ET_UNKNOWN)
 | 
| -        ReportTouchEvent(*event, event_type, timestamp);
 | 
| -    }
 | 
| +    EventType event_type = GetEventTypeForTouch(*event);
 | 
| +    // The tool type is fixed with the touch pressed event and does not change.
 | 
| +    if (event_type == ET_TOUCH_PRESSED)
 | 
| +      event->reported_tool_type = GetEventPointerType(event->tool_code);
 | 
| +    if (event_type != ET_UNKNOWN)
 | 
| +      ReportTouchEvent(*event, event_type, timestamp);
 | 
|  
 | 
|      event->was_cancelled = event->cancelled;
 | 
|      event->was_touching = event->touching;
 | 
| 
 |