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 |