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..be9583f24897c2c7095348adf67ed0377558b6c9 100644 |
| --- a/ash/aura/pointer_watcher_adapter.cc |
| +++ b/ash/aura/pointer_watcher_adapter.cc |
| @@ -23,15 +23,20 @@ PointerWatcherAdapter::~PointerWatcherAdapter() { |
| Shell::GetInstance()->RemovePreTargetHandler(this); |
| } |
| -void PointerWatcherAdapter::AddPointerWatcher(views::PointerWatcher* watcher, |
| - bool wants_moves) { |
| +void PointerWatcherAdapter::AddPointerWatcher( |
| + views::PointerWatcher* watcher, |
| + views::PointerWatcherEventTypes 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) { |
| - DCHECK(!non_move_watchers_.HasObserver(watcher)); |
| + // the pair of |watcher| and |wants_move| and |wants_drags| unique, just |
|
sky
2016/08/26 19:58:57
update comment.
sammiequon
2016/08/26 21:48:04
Done.
|
| + // |watcher|. |
| + DCHECK(!non_move_watchers_.HasObserver(watcher)); |
| + DCHECK(!move_watchers_.HasObserver(watcher)); |
| + DCHECK(!drag_watchers_.HasObserver(watcher)); |
| + if (events == views::PointerWatcherEventTypes::DRAGS) { |
|
sky
2016/08/26 19:58:57
Now that all paths are a single line you can nuke
sammiequon
2016/08/26 21:48:04
Done.
|
| + drag_watchers_.AddObserver(watcher); |
| + } else if (events == views::PointerWatcherEventTypes::MOVES) { |
| move_watchers_.AddObserver(watcher); |
| } else { |
| - DCHECK(!move_watchers_.HasObserver(watcher)); |
| non_move_watchers_.AddObserver(watcher); |
| } |
| } |
| @@ -40,6 +45,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 +54,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. |
|
sky
2016/08/26 19:58:57
I think this comment is no longer helpful, you may
sammiequon
2016/08/26 21:48:04
Done.
|
| 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 +73,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 +102,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) { |
|
sky
2016/08/26 19:58:57
ET_POINTER_MOVED covers ET_MOUSE_DRAGGED, right? I
sammiequon
2016/08/26 21:48:04
Done.
|
| FOR_EACH_OBSERVER( |
| views::PointerWatcher, non_move_watchers_, |
| OnPointerEventObserved(event, screen_location, target_widget)); |