| 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..db9c79b63d98a406ece60239ade0e85d6023a9f7 100644
|
| --- a/ash/aura/pointer_watcher_adapter.cc
|
| +++ b/ash/aura/pointer_watcher_adapter.cc
|
| @@ -24,13 +24,21 @@ PointerWatcherAdapter::~PointerWatcherAdapter() {
|
| }
|
|
|
| void PointerWatcherAdapter::AddPointerWatcher(views::PointerWatcher* watcher,
|
| - bool wants_moves) {
|
| + bool wants_moves,
|
| + bool wants_drags) {
|
| // 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 (wants_drags) {
|
| + DCHECK(!move_watchers_.HasObserver(watcher));
|
| + DCHECK(!non_move_watchers_.HasObserver(watcher));
|
| + drag_watchers_.AddObserver(watcher);
|
| + } else if (wants_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 +48,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 +57,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));
|
| @@ -92,9 +104,15 @@ 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_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));
|
|
|