Chromium Code Reviews| Index: ash/aura/pointer_watcher_adapter.cc |
| diff --git a/ash/aura/pointer_watcher_adapter.cc b/ash/aura/pointer_watcher_adapter.cc |
| index c57b6b5d5d6c2df393883e3c7ea08cff324c19c9..2d9e679b4e91f1ed89fde23ecaa6df2342187c4f 100644 |
| --- a/ash/aura/pointer_watcher_adapter.cc |
| +++ b/ash/aura/pointer_watcher_adapter.cc |
| @@ -24,13 +24,20 @@ PointerWatcherAdapter::~PointerWatcherAdapter() { |
| } |
| void PointerWatcherAdapter::AddPointerWatcher(views::PointerWatcher* watcher, |
| - bool wants_moves) { |
| + views::RequestedEvents events) { |
| // We only allow a watcher to be added once. That is, we don't consider |
| - // the pair of |watcher| and |wants_move| unique, just |watcher|. |
| - if (wants_moves) { |
| + // the pair of |watcher| and |wants_move| and |wants_drags| unique, just |
| + // |watcher|. |
| + if (events == views::RequestedEvents::DRAGS) { |
| + DCHECK(!move_watchers_.HasObserver(watcher)); |
|
sky
2016/08/26 15:36:54
I think it's ok to assume a watcher isn't added mo
sammiequon
2016/08/26 18:34:20
Done.
|
| + DCHECK(!non_move_watchers_.HasObserver(watcher)); |
| + drag_watchers_.AddObserver(watcher); |
| + } else if (events == views::RequestedEvents::MOVES) { |
| + DCHECK(!drag_watchers_.HasObserver(watcher)); |
| DCHECK(!non_move_watchers_.HasObserver(watcher)); |
| move_watchers_.AddObserver(watcher); |
| } else { |
| + DCHECK(!drag_watchers_.HasObserver(watcher)); |
| DCHECK(!move_watchers_.HasObserver(watcher)); |
| non_move_watchers_.AddObserver(watcher); |
| } |
| @@ -40,6 +47,7 @@ void PointerWatcherAdapter::RemovePointerWatcher( |
| views::PointerWatcher* watcher) { |
| non_move_watchers_.RemoveObserver(watcher); |
| move_watchers_.RemoveObserver(watcher); |
| + drag_watchers_.RemoveObserver(watcher); |
| } |
| void PointerWatcherAdapter::OnMouseEvent(ui::MouseEvent* event) { |
| @@ -48,13 +56,16 @@ void PointerWatcherAdapter::OnMouseEvent(ui::MouseEvent* event) { |
| OnMouseCaptureChanged()); |
| FOR_EACH_OBSERVER(views::PointerWatcher, move_watchers_, |
| OnMouseCaptureChanged()); |
| + FOR_EACH_OBSERVER(views::PointerWatcher, drag_watchers_, |
| + OnMouseCaptureChanged()); |
| return; |
| } |
| - // For compatibility with the mus version, don't send drags. |
| + // The mus version does not send drags. |
| if (event->type() != ui::ET_MOUSE_PRESSED && |
| event->type() != ui::ET_MOUSE_RELEASED && |
| - event->type() != ui::ET_MOUSE_MOVED) |
| + event->type() != ui::ET_MOUSE_MOVED && |
| + event->type() != ui::ET_MOUSE_DRAGGED) |
| return; |
| DCHECK(ui::PointerEvent::CanConvertFrom(*event)); |
| @@ -64,7 +75,8 @@ void PointerWatcherAdapter::OnMouseEvent(ui::MouseEvent* event) { |
| void PointerWatcherAdapter::OnTouchEvent(ui::TouchEvent* event) { |
| // For compatibility with the mus version, don't send drags. |
| if (event->type() != ui::ET_TOUCH_PRESSED && |
| - event->type() != ui::ET_TOUCH_RELEASED) |
| + event->type() != ui::ET_TOUCH_RELEASED && |
| + event->type() != ui::ET_TOUCH_MOVED) |
| return; |
| DCHECK(ui::PointerEvent::CanConvertFrom(*event)); |
| @@ -92,9 +104,16 @@ void PointerWatcherAdapter::NotifyWatchers( |
| const gfx::Point screen_location(GetLocationInScreen(original_event)); |
| views::Widget* target_widget = GetTargetWidget(original_event); |
| FOR_EACH_OBSERVER( |
| - views::PointerWatcher, move_watchers_, |
| + views::PointerWatcher, drag_watchers_, |
| OnPointerEventObserved(event, screen_location, target_widget)); |
| - if (event.type() != ui::ET_POINTER_MOVED) { |
| + if (original_event.type() != ui::ET_TOUCH_MOVED && |
| + original_event.type() != ui::ET_MOUSE_DRAGGED) { |
| + FOR_EACH_OBSERVER( |
| + views::PointerWatcher, move_watchers_, |
| + OnPointerEventObserved(event, screen_location, target_widget)); |
| + } |
| + if (event.type() != ui::ET_POINTER_MOVED && |
| + original_event.type() != ui::ET_MOUSE_DRAGGED) { |
| FOR_EACH_OBSERVER( |
| views::PointerWatcher, non_move_watchers_, |
| OnPointerEventObserved(event, screen_location, target_widget)); |