| Index: ui/aura/window_event_dispatcher.cc
|
| diff --git a/ui/aura/window_event_dispatcher.cc b/ui/aura/window_event_dispatcher.cc
|
| index 5f9204847b5cbaebe69172f7e4c83b1c1c7a2977..d9c59136b2439165a1068d8242afc7b7ef2d27d0 100644
|
| --- a/ui/aura/window_event_dispatcher.cc
|
| +++ b/ui/aura/window_event_dispatcher.cc
|
| @@ -100,27 +100,34 @@ WindowEventDispatcher::~WindowEventDispatcher() {
|
| ui::GestureRecognizer::Get()->RemoveGestureEventHelper(this);
|
| }
|
|
|
| -void WindowEventDispatcher::RepostEvent(const ui::LocatedEvent& event) {
|
| - DCHECK(event.type() == ui::ET_MOUSE_PRESSED ||
|
| - event.type() == ui::ET_GESTURE_TAP_DOWN);
|
| +void WindowEventDispatcher::RepostEvent(const ui::LocatedEvent* event) {
|
| + DCHECK(event->type() == ui::ET_MOUSE_PRESSED ||
|
| + event->type() == ui::ET_GESTURE_TAP_DOWN ||
|
| + event->type() == ui::ET_TOUCH_PRESSED);
|
| // We allow for only one outstanding repostable event. This is used
|
| // in exiting context menus. A dropped repost request is allowed.
|
| - if (event.type() == ui::ET_MOUSE_PRESSED) {
|
| + if (event->type() == ui::ET_MOUSE_PRESSED) {
|
| held_repostable_event_.reset(
|
| new ui::MouseEvent(
|
| - static_cast<const ui::MouseEvent&>(event),
|
| - static_cast<aura::Window*>(event.target()),
|
| + static_cast<const ui::MouseEvent&>(*event),
|
| + static_cast<aura::Window*>(event->target()),
|
| window()));
|
| - base::MessageLoop::current()->PostNonNestableTask(
|
| - FROM_HERE, base::Bind(
|
| - base::IgnoreResult(&WindowEventDispatcher::DispatchHeldEvents),
|
| - repost_event_factory_.GetWeakPtr()));
|
| + } else if (event->type() == ui::ET_TOUCH_PRESSED) {
|
| + held_repostable_event_.reset(
|
| + new ui::TouchEvent(static_cast<const ui::TouchEvent&>(*event)));
|
| } else {
|
| - DCHECK(event.type() == ui::ET_GESTURE_TAP_DOWN);
|
| + DCHECK(event->type() == ui::ET_GESTURE_TAP_DOWN);
|
| held_repostable_event_.reset();
|
| // TODO(rbyers): Reposing of gestures is tricky to get
|
| // right, so it's not yet supported. crbug.com/170987.
|
| }
|
| +
|
| + if (held_repostable_event_) {
|
| + base::MessageLoop::current()->PostNonNestableTask(
|
| + FROM_HERE, base::Bind(
|
| + base::IgnoreResult(&WindowEventDispatcher::DispatchHeldEvents),
|
| + repost_event_factory_.GetWeakPtr()));
|
| + }
|
| }
|
|
|
| void WindowEventDispatcher::OnMouseEventsEnableStateChanged(bool enabled) {
|
| @@ -666,11 +673,11 @@ ui::EventDispatchDetails WindowEventDispatcher::DispatchHeldEvents() {
|
|
|
| DispatchDetails dispatch_details;
|
| if (held_repostable_event_) {
|
| - if (held_repostable_event_->type() == ui::ET_MOUSE_PRESSED) {
|
| - scoped_ptr<ui::MouseEvent> mouse_event(
|
| - static_cast<ui::MouseEvent*>(held_repostable_event_.release()));
|
| - dispatching_held_event_ = mouse_event.get();
|
| - dispatch_details = OnEventFromSource(mouse_event.get());
|
| + if (held_repostable_event_->type() == ui::ET_MOUSE_PRESSED ||
|
| + held_repostable_event_->type() == ui::ET_TOUCH_PRESSED) {
|
| + scoped_ptr<ui::LocatedEvent> event = std::move(held_repostable_event_);
|
| + dispatching_held_event_ = event.get();
|
| + dispatch_details = OnEventFromSource(event.get());
|
| } else {
|
| // TODO(rbyers): GESTURE_TAP_DOWN not yet supported: crbug.com/170987.
|
| NOTREACHED();
|
|
|