| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/views/widget/root_view.h" | 5 #include "ui/views/widget/root_view.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 return focus_traversable_parent_view_; | 242 return focus_traversable_parent_view_; |
| 243 } | 243 } |
| 244 | 244 |
| 245 //////////////////////////////////////////////////////////////////////////////// | 245 //////////////////////////////////////////////////////////////////////////////// |
| 246 // RootView, ui::EventProcessor overrides: | 246 // RootView, ui::EventProcessor overrides: |
| 247 | 247 |
| 248 ui::EventTarget* RootView::GetRootTarget() { | 248 ui::EventTarget* RootView::GetRootTarget() { |
| 249 return this; | 249 return this; |
| 250 } | 250 } |
| 251 | 251 |
| 252 ui::EventDispatchDetails RootView::OnEventFromSource(ui::Event* event) { | 252 void RootView::OnEventProcessingStarted(ui::Event* event) { |
| 253 if (event->IsKeyEvent()) | 253 if (!event->IsGestureEvent()) |
| 254 return EventProcessor::OnEventFromSource(event); | 254 return; |
| 255 | 255 |
| 256 if (event->IsScrollEvent()) | 256 ui::GestureEvent* gesture_event = event->AsGestureEvent(); |
| 257 return EventProcessor::OnEventFromSource(event); | |
| 258 | 257 |
| 259 if (event->IsGestureEvent()) { | 258 // Do not process ui::ET_GESTURE_BEGIN events. |
| 260 // TODO(tdanderson): Once DispatchGestureEvent() has been removed, move | 259 if (gesture_event->type() == ui::ET_GESTURE_BEGIN) { |
| 261 // all of this logic into an override of a new | 260 event->SetHandled(); |
| 262 // virtual method | 261 return; |
| 263 // EventProcessor::OnEventProcessingStarted() (which | |
| 264 // returns false if no processing should take place). | |
| 265 // Also move the implementation of | |
| 266 // PrepareEventForDispatch() into this new method. | |
| 267 // Then RootView::OnEventFromSource() can be removed. | |
| 268 ui::GestureEvent* gesture_event = event->AsGestureEvent(); | |
| 269 | |
| 270 // Do not dispatch ui::ET_GESTURE_BEGIN events. | |
| 271 if (gesture_event->type() == ui::ET_GESTURE_BEGIN) | |
| 272 return DispatchDetails(); | |
| 273 | |
| 274 // Ignore ui::ET_GESTURE_END events which do not correspond to the | |
| 275 // removal of the final touch point. | |
| 276 if (gesture_event->type() == ui::ET_GESTURE_END && | |
| 277 gesture_event->details().touch_points() > 1) { | |
| 278 return DispatchDetails(); | |
| 279 } | |
| 280 | |
| 281 // Ignore subsequent gesture scroll events if no handler was set for a | |
| 282 // ui::ET_GESTURE_SCROLL_BEGIN event. | |
| 283 if (!gesture_handler_ && | |
| 284 (gesture_event->type() == ui::ET_GESTURE_SCROLL_UPDATE || | |
| 285 gesture_event->type() == ui::ET_GESTURE_SCROLL_END || | |
| 286 gesture_event->type() == ui::ET_SCROLL_FLING_START)) { | |
| 287 return DispatchDetails(); | |
| 288 } | |
| 289 | |
| 290 gesture_handler_set_before_processing_ = !!gesture_handler_; | |
| 291 return EventProcessor::OnEventFromSource(event); | |
| 292 } | 262 } |
| 293 | 263 |
| 294 if (event->IsTouchEvent()) | 264 // Do not process ui::ET_GESTURE_END events which do not correspond to the |
| 295 NOTREACHED() << "Touch events should not be sent to RootView."; | 265 // removal of the final touch point. |
| 266 if (gesture_event->type() == ui::ET_GESTURE_END && |
| 267 gesture_event->details().touch_points() > 1) { |
| 268 event->SetHandled(); |
| 269 return; |
| 270 } |
| 296 | 271 |
| 297 if (event->IsMouseEvent()) | 272 // Do not process subsequent gesture scroll events if no handler was set for |
| 298 NOTREACHED() << "Should not be called with a MouseEvent."; | 273 // a ui::ET_GESTURE_SCROLL_BEGIN event. |
| 274 if (!gesture_handler_ && |
| 275 (gesture_event->type() == ui::ET_GESTURE_SCROLL_UPDATE || |
| 276 gesture_event->type() == ui::ET_GESTURE_SCROLL_END || |
| 277 gesture_event->type() == ui::ET_SCROLL_FLING_START)) { |
| 278 event->SetHandled(); |
| 279 return; |
| 280 } |
| 299 | 281 |
| 300 return DispatchDetails(); | 282 gesture_handler_set_before_processing_ = !!gesture_handler_; |
| 301 } | 283 } |
| 302 | 284 |
| 303 void RootView::OnEventProcessingFinished(ui::Event* event) { | 285 void RootView::OnEventProcessingFinished(ui::Event* event) { |
| 304 // If |event| was not handled and |gesture_handler_| was not set by the | 286 // If |event| was not handled and |gesture_handler_| was not set by the |
| 305 // dispatch of a previous gesture event, then no default gesture handler | 287 // dispatch of a previous gesture event, then no default gesture handler |
| 306 // should be set prior to the next gesture event being received. | 288 // should be set prior to the next gesture event being received. |
| 307 if (event->IsGestureEvent() && | 289 if (event->IsGestureEvent() && |
| 308 !event->handled() && | 290 !event->handled() && |
| 309 !gesture_handler_set_before_processing_) { | 291 !gesture_handler_set_before_processing_) { |
| 310 gesture_handler_ = NULL; | 292 gesture_handler_ = NULL; |
| (...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 737 | 719 |
| 738 #ifndef NDEBUG | 720 #ifndef NDEBUG |
| 739 DCHECK(!event_dispatch_target_ || Contains(event_dispatch_target_)); | 721 DCHECK(!event_dispatch_target_ || Contains(event_dispatch_target_)); |
| 740 #endif | 722 #endif |
| 741 | 723 |
| 742 return details; | 724 return details; |
| 743 } | 725 } |
| 744 | 726 |
| 745 } // namespace internal | 727 } // namespace internal |
| 746 } // namespace views | 728 } // namespace views |
| OLD | NEW |