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

Unified Diff: ui/aura/window_event_dispatcher.cc

Issue 1565013002: Don't send touch events to windows like menus when the touch occurs outside the menu bounds. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Restore DCHECK Created 4 years, 11 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 side-by-side diff with in-line comments
Download patch
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();

Powered by Google App Engine
This is Rietveld 408576698