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