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_, |