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

Unified Diff: ui/aura/root_window.cc

Issue 22865036: Add support for reposting the ET_GESTURE_TAP_DOWN gesture event to the RootWindow and in the (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 4 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/root_window.cc
===================================================================
--- ui/aura/root_window.cc (revision 218517)
+++ ui/aura/root_window.cc (working copy)
@@ -216,6 +216,8 @@
}
void RootWindow::RepostEvent(const ui::LocatedEvent& event) {
+ DCHECK(event.type() == ui::ET_MOUSE_PRESSED ||
+ event.type() == ui::ET_GESTURE_TAP_DOWN);
// 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) {
@@ -224,15 +226,22 @@
static_cast<const ui::MouseEvent&>(event),
static_cast<aura::Window*>(event.target()),
static_cast<aura::Window*>(this)));
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&RootWindow::DispatchHeldEvents,
- repostable_event_factory_.GetWeakPtr()));
} else {
- DCHECK(event.type() == ui::ET_GESTURE_TAP_DOWN);
- held_repostable_event_.reset();
- // TODO(sschmitz): add similar code for gesture events.
+ const ui::GestureEvent* gesture_event =
+ static_cast<const ui::GestureEvent*>(&event);
+ held_repostable_event_.reset(new ui::GestureEvent(
sadrul 2013/08/23 03:16:03 Can you use 'new ui::GestureEvent(event, event.tar
+ gesture_event->type(),
+ gesture_event->root_location().x(),
+ gesture_event->root_location().y(),
+ gesture_event->flags(),
+ gesture_event->time_stamp(),
+ gesture_event->details(),
+ gesture_event->touch_ids_bitfield()));
}
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&RootWindow::DispatchHeldEvents,
+ repostable_event_factory_.GetWeakPtr()));
}
RootWindowHostDelegate* RootWindow::AsRootWindowHostDelegate() {
@@ -1017,6 +1026,23 @@
return DispatchMouseEventToTarget(event, target);
}
+bool RootWindow::DispatchGestureEventRepost(ui::GestureEvent* event) {
+ if (event->type() != ui::ET_GESTURE_TAP_DOWN)
+ return false;
+
+ // Cleanup stale gesture events for the old gesture target.
+ GestureConsumer* old_consumer = GetGestureTarget(event);
+ if (old_consumer)
+ CleanupGestureRecognizerState(static_cast<aura::Window*>(old_consumer));
+
+ Window* new_consumer = GetEventHandlerForPoint(event->root_location());
sadrul 2013/08/23 03:16:03 This code should dispatch a GESTURE_BEGIN event be
+ if (new_consumer) {
+ ProcessEvent(new_consumer, event);
+ return event->handled();
+ }
+ return false;
+}
+
bool RootWindow::DispatchMouseEventToTarget(ui::MouseEvent* event,
Window* target) {
client::CursorClient* cursor_client = client::GetCursorClient(this);
@@ -1144,11 +1170,14 @@
if (held_repostable_event_->type() == ui::ET_MOUSE_PRESSED) {
ui::MouseEvent mouse_event(
static_cast<const ui::MouseEvent&>(*held_repostable_event_.get()));
- held_repostable_event_.reset(); // must be reset before dispatch
+ held_repostable_event_.reset(); // must be reset before dispatch
DispatchMouseEventRepost(&mouse_event);
} else {
DCHECK(held_repostable_event_->type() == ui::ET_GESTURE_TAP_DOWN);
- // TODO(sschmitz): add similar code for gesture events
+ ui::GestureEvent gesture_event(
+ static_cast<const ui::GestureEvent&>(*held_repostable_event_.get()));
+ held_repostable_event_.reset(); // must be reset before dispatch
+ DispatchGestureEventRepost(&gesture_event);
}
held_repostable_event_.reset();
}

Powered by Google App Engine
This is Rietveld 408576698