Chromium Code Reviews| Index: ash/pointer_watcher_delegate_aura.cc |
| diff --git a/ash/pointer_watcher_delegate_aura.cc b/ash/pointer_watcher_delegate_aura.cc |
| index 81a0e7d757ba9b91009018ac9f8535c835d81bd5..ca45a914fe321b022ca302b0609ac166e9c515db 100644 |
| --- a/ash/pointer_watcher_delegate_aura.cc |
| +++ b/ash/pointer_watcher_delegate_aura.cc |
| @@ -24,13 +24,23 @@ PointerWatcherDelegateAura::~PointerWatcherDelegateAura() { |
| } |
| void PointerWatcherDelegateAura::AddPointerWatcher( |
| - views::PointerWatcher* watcher) { |
| - pointer_watchers_.AddObserver(watcher); |
| + views::PointerWatcher* watcher, |
| + bool wants_moves) { |
| + // 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(!pointer_watchers_.HasObserver(watcher)); |
| + move_pointer_watchers_.AddObserver(watcher); |
| + } else { |
| + DCHECK(!move_pointer_watchers_.HasObserver(watcher)); |
| + pointer_watchers_.AddObserver(watcher); |
| + } |
| } |
| void PointerWatcherDelegateAura::RemovePointerWatcher( |
| views::PointerWatcher* watcher) { |
| pointer_watchers_.RemoveObserver(watcher); |
| + move_pointer_watchers_.RemoveObserver(watcher); |
| } |
| void PointerWatcherDelegateAura::OnMouseEvent(ui::MouseEvent* event) { |
| @@ -38,18 +48,19 @@ void PointerWatcherDelegateAura::OnMouseEvent(ui::MouseEvent* event) { |
| if (event->type() != ui::ET_MOUSE_PRESSED && |
| event->type() != ui::ET_MOUSE_RELEASED) |
| return; |
| + |
| if (event->type() == ui::ET_MOUSE_CAPTURE_CHANGED) { |
|
James Cook
2016/08/12 16:08:53
Move above 47 (merge should handle that I think)
sky
2016/08/12 17:59:37
Ya, sorry, I fixed it after you pointed the error
|
| FOR_EACH_OBSERVER(views::PointerWatcher, pointer_watchers_, |
| OnMouseCaptureChanged()); |
| + FOR_EACH_OBSERVER(views::PointerWatcher, move_pointer_watchers_, |
| + OnMouseCaptureChanged()); |
| return; |
| } |
| + |
| if (!ui::PointerEvent::CanConvertFrom(*event)) |
|
James Cook
2016/08/12 16:08:53
DCHECK here instead? event must be pressed or rele
sky
2016/08/12 17:59:37
Turns out mouse wheel events aren't pointer events
|
| return; |
| - ui::PointerEvent mouse_pointer_event(*event); |
| - FOR_EACH_OBSERVER( |
| - views::PointerWatcher, pointer_watchers_, |
| - OnPointerEventObserved(mouse_pointer_event, GetLocationInScreen(*event), |
| - GetTargetWidget(*event))); |
| + |
| + NotifyWatchers(ui::PointerEvent(*event), *event); |
| } |
| void PointerWatcherDelegateAura::OnTouchEvent(ui::TouchEvent* event) { |
| @@ -57,11 +68,9 @@ void PointerWatcherDelegateAura::OnTouchEvent(ui::TouchEvent* event) { |
| if (event->type() != ui::ET_TOUCH_PRESSED && |
| event->type() != ui::ET_TOUCH_RELEASED) |
| return; |
| - ui::PointerEvent touch_pointer_event(*event); |
| - FOR_EACH_OBSERVER( |
| - views::PointerWatcher, pointer_watchers_, |
| - OnPointerEventObserved(touch_pointer_event, GetLocationInScreen(*event), |
| - GetTargetWidget(*event))); |
| + |
| + DCHECK(ui::PointerEvent::CanConvertFrom(*event)); |
| + NotifyWatchers(ui::PointerEvent(*event), *event); |
| } |
| gfx::Point PointerWatcherDelegateAura::GetLocationInScreen( |
| @@ -79,4 +88,20 @@ views::Widget* PointerWatcherDelegateAura::GetTargetWidget( |
| return views::Widget::GetTopLevelWidgetForNativeView(window); |
| } |
| +void PointerWatcherDelegateAura::NotifyWatchers( |
| + const ui::PointerEvent& event, |
| + const ui::LocatedEvent& original_event) { |
| + const gfx::Point screen_location(GetLocationInScreen(original_event)); |
| + views::Widget* target_widget = GetTargetWidget(original_event); |
| + FOR_EACH_OBSERVER( |
| + views::PointerWatcher, move_pointer_watchers_, |
| + OnPointerEventObserved(event, screen_location, target_widget)); |
| + if (event.type() != ui::ET_MOUSE_MOVED && |
| + event.type() != ui::ET_TOUCH_MOVED) { |
| + FOR_EACH_OBSERVER( |
| + views::PointerWatcher, pointer_watchers_, |
| + OnPointerEventObserved(event, screen_location, target_widget)); |
| + } |
| +} |
| + |
| } // namespace ash |