| Index: ash/aura/pointer_watcher_adapter.cc
|
| diff --git a/ash/aura/pointer_watcher_adapter.cc b/ash/aura/pointer_watcher_adapter.cc
|
| index c2e3c8c1f2c329570ab796694077151827095a9b..ccb559f7f41427877fbd473b91fc4a66d03d1074 100644
|
| --- a/ash/aura/pointer_watcher_adapter.cc
|
| +++ b/ash/aura/pointer_watcher_adapter.cc
|
| @@ -24,32 +24,36 @@ 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 |events| unique, just |watcher|.
|
| + DCHECK(!non_move_watchers_.HasObserver(watcher));
|
| + DCHECK(!move_watchers_.HasObserver(watcher));
|
| + DCHECK(!drag_watchers_.HasObserver(watcher));
|
| + if (events == views::PointerWatcherEventTypes::DRAGS)
|
| + drag_watchers_.AddObserver(watcher);
|
| + else if (events == views::PointerWatcherEventTypes::MOVES)
|
| move_watchers_.AddObserver(watcher);
|
| - } else {
|
| - DCHECK(!move_watchers_.HasObserver(watcher));
|
| + else
|
| non_move_watchers_.AddObserver(watcher);
|
| - }
|
| }
|
|
|
| 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) {
|
| - // For compatibility with the mus version, don't 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_MOUSEWHEEL &&
|
| - event->type() != ui::ET_MOUSE_CAPTURE_CHANGED)
|
| + event->type() != ui::ET_MOUSE_CAPTURE_CHANGED &&
|
| + event->type() != ui::ET_MOUSE_DRAGGED)
|
| return;
|
|
|
| DCHECK(ui::PointerEvent::CanConvertFrom(*event));
|
| @@ -57,9 +61,9 @@ 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,8 +96,14 @@ 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 (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) {
|
| FOR_EACH_OBSERVER(
|
| views::PointerWatcher, non_move_watchers_,
|
|
|