| Index: services/ui/ws/event_dispatcher.cc
|
| diff --git a/services/ui/ws/event_dispatcher.cc b/services/ui/ws/event_dispatcher.cc
|
| index bcea3cf9e2b60ec67f8292d0d08cd3467d6344f0..c6e6897508347096389172210d6d3e9b91594479 100644
|
| --- a/services/ui/ws/event_dispatcher.cc
|
| +++ b/services/ui/ws/event_dispatcher.cc
|
| @@ -46,6 +46,9 @@ EventDispatcher::EventDispatcher(EventDispatcherDelegate* delegate)
|
| capture_window_(nullptr),
|
| capture_window_client_id_(kInvalidClientId),
|
| modal_window_controller_(this),
|
| + event_targeter_(
|
| + base::MakeUnique<EventTargeter>(delegate_,
|
| + &modal_window_controller_)),
|
| mouse_button_down_(false),
|
| mouse_cursor_source_window_(nullptr),
|
| mouse_cursor_in_non_client_area_(false) {}
|
| @@ -221,8 +224,9 @@ const ServerWindow* EventDispatcher::GetWindowForMouseCursor() const {
|
|
|
| void EventDispatcher::UpdateNonClientAreaForCurrentWindow() {
|
| if (mouse_cursor_source_window_) {
|
| - DeepestWindow deepest_window = FindDeepestVisibleWindowForEvents(
|
| - &mouse_pointer_last_location_, &mouse_pointer_display_id_);
|
| + DeepestWindow deepest_window =
|
| + event_targeter_->FindDeepestVisibleWindowForEvents(
|
| + &mouse_pointer_last_location_, &mouse_pointer_display_id_);
|
| if (deepest_window.window == mouse_cursor_source_window_) {
|
| mouse_cursor_in_non_client_area_ = mouse_cursor_source_window_
|
| ? deepest_window.in_non_client_area
|
| @@ -233,8 +237,9 @@ void EventDispatcher::UpdateNonClientAreaForCurrentWindow() {
|
|
|
| void EventDispatcher::UpdateCursorProviderByLastKnownLocation() {
|
| if (!mouse_button_down_) {
|
| - DeepestWindow deepest_window = FindDeepestVisibleWindowForEvents(
|
| - &mouse_pointer_last_location_, &mouse_pointer_display_id_);
|
| + DeepestWindow deepest_window =
|
| + event_targeter_->FindDeepestVisibleWindowForEvents(
|
| + &mouse_pointer_last_location_, &mouse_pointer_display_id_);
|
| SetMouseCursorSourceWindow(deepest_window.window);
|
| if (mouse_cursor_source_window_) {
|
| mouse_cursor_in_non_client_area_ = deepest_window.in_non_client_area;
|
| @@ -376,7 +381,8 @@ void EventDispatcher::ProcessPointerEvent(const ui::PointerEvent& event) {
|
| }
|
|
|
| if (drag_controller_) {
|
| - const PointerTarget target = PointerTargetForEvent(event);
|
| + const PointerTarget target =
|
| + event_targeter_->PointerTargetForEvent(event, &event_display_id_);
|
| if (drag_controller_->DispatchPointerEvent(event, target.window))
|
| return;
|
| }
|
| @@ -454,11 +460,13 @@ void EventDispatcher::StopTrackingPointer(int32_t pointer_id) {
|
| void EventDispatcher::UpdateTargetForPointer(int32_t pointer_id,
|
| const ui::LocatedEvent& event) {
|
| if (!IsTrackingPointer(pointer_id)) {
|
| - StartTrackingPointer(pointer_id, PointerTargetForEvent(event));
|
| + StartTrackingPointer(pointer_id, event_targeter_->PointerTargetForEvent(
|
| + event, &event_display_id_));
|
| return;
|
| }
|
|
|
| - const PointerTarget pointer_target = PointerTargetForEvent(event);
|
| + const PointerTarget pointer_target =
|
| + event_targeter_->PointerTargetForEvent(event, &event_display_id_);
|
| if (pointer_target.window == pointer_targets_[pointer_id].window &&
|
| pointer_target.in_nonclient_area ==
|
| pointer_targets_[pointer_id].in_nonclient_area) {
|
| @@ -486,22 +494,6 @@ void EventDispatcher::UpdateTargetForPointer(int32_t pointer_id,
|
| StartTrackingPointer(pointer_id, pointer_target);
|
| }
|
|
|
| -EventDispatcher::PointerTarget EventDispatcher::PointerTargetForEvent(
|
| - const ui::LocatedEvent& event) {
|
| - PointerTarget pointer_target;
|
| - gfx::Point event_root_location(event.root_location());
|
| - DeepestWindow deepest_window = FindDeepestVisibleWindowForEvents(
|
| - &event_root_location, &event_display_id_);
|
| - pointer_target.window =
|
| - modal_window_controller_.GetTargetForWindow(deepest_window.window);
|
| - pointer_target.is_mouse_event = event.IsMousePointerEvent();
|
| - pointer_target.in_nonclient_area =
|
| - deepest_window.window != pointer_target.window ||
|
| - !pointer_target.window || deepest_window.in_non_client_area;
|
| - pointer_target.is_pointer_down = event.type() == ui::ET_POINTER_DOWN;
|
| - return pointer_target;
|
| -}
|
| -
|
| bool EventDispatcher::AreAnyPointersDown() const {
|
| for (const auto& pair : pointer_targets_) {
|
| if (pair.second.is_pointer_down)
|
| @@ -590,14 +582,6 @@ Accelerator* EventDispatcher::FindAccelerator(
|
| return nullptr;
|
| }
|
|
|
| -DeepestWindow EventDispatcher::FindDeepestVisibleWindowForEvents(
|
| - gfx::Point* location,
|
| - int64_t* display_id) {
|
| - ServerWindow* root = delegate_->GetRootWindowContaining(location, display_id);
|
| - return root ? ui::ws::FindDeepestVisibleWindowForEvents(root, *location)
|
| - : DeepestWindow();
|
| -}
|
| -
|
| void EventDispatcher::CancelImplicitCaptureExcept(ServerWindow* window,
|
| ClientSpecificId client_id) {
|
| for (const auto& pair : pointer_targets_) {
|
|
|