| Index: ui/views/win/hwnd_message_handler.cc
|
| diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc
|
| index b394556ee2943a4c74837aa3e1ff4547c81c9347..7bc4b0016bada615409bf90a2001b2c31a6b3f63 100644
|
| --- a/ui/views/win/hwnd_message_handler.cc
|
| +++ b/ui/views/win/hwnd_message_handler.cc
|
| @@ -2341,7 +2341,6 @@ LRESULT HWNDMessageHandler::OnTouchEvent(UINT message,
|
| // input[i].dwTime doesn't necessarily relate to the system time at all,
|
| // so use base::TimeTicks::Now().
|
| const base::TimeTicks event_time = base::TimeTicks::Now();
|
| - int flags = ui::GetModifiersFromKeyState();
|
| TouchEvents touch_events;
|
| for (int i = 0; i < num_points; ++i) {
|
| POINT point;
|
| @@ -2363,39 +2362,32 @@ LRESULT HWNDMessageHandler::OnTouchEvent(UINT message,
|
|
|
| last_touch_message_time_ = ::GetMessageTime();
|
|
|
| - ui::EventType touch_event_type = ui::ET_UNKNOWN;
|
| + gfx::Point touch_point(point.x, point.y);
|
| + unsigned int touch_id = id_generator_.GetGeneratedID(input[i].dwID);
|
| + base::TimeDelta time_delta = event_time - base::TimeTicks();
|
|
|
| if (input[i].dwFlags & TOUCHEVENTF_DOWN) {
|
| touch_ids_.insert(input[i].dwID);
|
| - touch_event_type = ui::ET_TOUCH_PRESSED;
|
| + GenerateTouchEvent(ui::ET_TOUCH_PRESSED, touch_point, touch_id,
|
| + event_time, time_delta, &touch_events);
|
| touch_down_contexts_++;
|
| base::MessageLoop::current()->PostDelayedTask(
|
| FROM_HERE,
|
| base::Bind(&HWNDMessageHandler::ResetTouchDownContext,
|
| weak_factory_.GetWeakPtr()),
|
| base::TimeDelta::FromMilliseconds(kTouchDownContextResetTimeout));
|
| - } else if (input[i].dwFlags & TOUCHEVENTF_UP) {
|
| - touch_ids_.erase(input[i].dwID);
|
| - touch_event_type = ui::ET_TOUCH_RELEASED;
|
| - } else if (input[i].dwFlags & TOUCHEVENTF_MOVE) {
|
| - touch_event_type = ui::ET_TOUCH_MOVED;
|
| - }
|
| - if (touch_event_type != ui::ET_UNKNOWN) {
|
| - ui::TouchEvent event(touch_event_type,
|
| - gfx::Point(point.x, point.y),
|
| - id_generator_.GetGeneratedID(input[i].dwID),
|
| - event_time - base::TimeTicks());
|
| - event.set_flags(flags);
|
| - event.latency()->AddLatencyNumberWithTimestamp(
|
| - ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT,
|
| - 0,
|
| - 0,
|
| - event_time,
|
| - 1);
|
| -
|
| - touch_events.push_back(event);
|
| - if (touch_event_type == ui::ET_TOUCH_RELEASED)
|
| + } else {
|
| + if (input[i].dwFlags & TOUCHEVENTF_MOVE) {
|
| + GenerateTouchEvent(ui::ET_TOUCH_MOVED, touch_point, touch_id,
|
| + event_time, time_delta, &touch_events);
|
| + }
|
| +
|
| + if (input[i].dwFlags & TOUCHEVENTF_UP) {
|
| + touch_ids_.erase(input[i].dwID);
|
| + GenerateTouchEvent(ui::ET_TOUCH_RELEASED, touch_point, touch_id,
|
| + event_time, time_delta, &touch_events);
|
| id_generator_.ReleaseNumber(input[i].dwID);
|
| + }
|
| }
|
| }
|
| // Handle the touch events asynchronously. We need this because touch
|
| @@ -2790,4 +2782,24 @@ void HWNDMessageHandler::PerformDwmTransition() {
|
| EnumChildWindows(hwnd(), &SendDwmCompositionChanged, NULL);
|
| }
|
|
|
| +void HWNDMessageHandler::GenerateTouchEvent(ui::EventType event_type,
|
| + const gfx::Point& point,
|
| + unsigned int id,
|
| + base::TimeTicks event_time,
|
| + base::TimeDelta time_stamp,
|
| + TouchEvents* touch_events) {
|
| + ui::TouchEvent event(event_type, point, id, time_stamp);
|
| +
|
| + event.set_flags(ui::GetModifiersFromKeyState());
|
| +
|
| + event.latency()->AddLatencyNumberWithTimestamp(
|
| + ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT,
|
| + 0,
|
| + 0,
|
| + event_time,
|
| + 1);
|
| +
|
| + touch_events->push_back(event);
|
| +}
|
| +
|
| } // namespace views
|
|
|