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)); |