| Index: services/ui/ws/event_dispatcher.cc
|
| diff --git a/services/ui/ws/event_dispatcher.cc b/services/ui/ws/event_dispatcher.cc
|
| index 8be65049bb4e1bfab45fad7d2c50210667c347bc..43dd93a1f803fc04159415a9b311f99533fa222f 100644
|
| --- a/services/ui/ws/event_dispatcher.cc
|
| +++ b/services/ui/ws/event_dispatcher.cc
|
| @@ -79,7 +79,7 @@ void EventDispatcher::Reset() {
|
|
|
| void EventDispatcher::SetMousePointerDisplayLocation(
|
| const gfx::Point& display_location,
|
| - const int64_t display_id) {
|
| + int64_t display_id) {
|
| DCHECK(pointer_targets_.empty());
|
| SetMousePointerLocation(display_location, display_id);
|
| UpdateCursorProviderByLastKnownLocation();
|
| @@ -221,34 +221,21 @@ const ServerWindow* EventDispatcher::GetWindowForMouseCursor() const {
|
|
|
| void EventDispatcher::UpdateNonClientAreaForCurrentWindow() {
|
| if (mouse_cursor_source_window_) {
|
| - LocationTarget location_target = event_targeter_->FindTargetForLocation(
|
| - mouse_pointer_last_location_, mouse_pointer_display_id_);
|
| - if (location_target.deepest_window.window == mouse_cursor_source_window_) {
|
| - mouse_cursor_in_non_client_area_ =
|
| - mouse_cursor_source_window_
|
| - ? location_target.deepest_window.in_non_client_area
|
| - : false;
|
| - }
|
| - SetMousePointerLocation(location_target.location_in_root,
|
| - location_target.display_id);
|
| + event_targeter_->FindTargetForLocation(
|
| + mouse_pointer_last_location_, mouse_pointer_display_id_,
|
| + base::BindOnce(
|
| + &EventDispatcher::UpdateNonClientAreaForCurrentWindowOnFoundWindow,
|
| + base::Unretained(this)));
|
| }
|
| }
|
|
|
| void EventDispatcher::UpdateCursorProviderByLastKnownLocation() {
|
| if (!mouse_button_down_) {
|
| - LocationTarget location_target = event_targeter_->FindTargetForLocation(
|
| - mouse_pointer_last_location_, mouse_pointer_display_id_);
|
| - SetMouseCursorSourceWindow(location_target.deepest_window.window);
|
| - if (mouse_cursor_source_window_) {
|
| - mouse_cursor_in_non_client_area_ =
|
| - location_target.deepest_window.in_non_client_area;
|
| - } else {
|
| - SetMouseCursorSourceWindow(delegate_->GetRootWindowContaining(
|
| - &mouse_pointer_last_location_, &mouse_pointer_display_id_));
|
| - mouse_cursor_in_non_client_area_ = true;
|
| - }
|
| - SetMousePointerLocation(location_target.location_in_root,
|
| - location_target.display_id);
|
| + event_targeter_->FindTargetForLocation(
|
| + mouse_pointer_last_location_, mouse_pointer_display_id_,
|
| + base::BindOnce(&EventDispatcher::
|
| + UpdateCursorProviderByLastKnownLocationOnFoundWindow,
|
| + base::Unretained(this)));
|
| }
|
| }
|
|
|
| @@ -280,8 +267,12 @@ void EventDispatcher::RemoveAccelerator(uint32_t id) {
|
| accelerators_.erase(it);
|
| }
|
|
|
| +bool EventDispatcher::IsProcessingEvent() const {
|
| + return event_targeter_->IsHitTestInFlight();
|
| +}
|
| +
|
| void EventDispatcher::ProcessEvent(const ui::Event& event,
|
| - const int64_t display_id,
|
| + int64_t display_id,
|
| AcceleratorMatchPhase match_phase) {
|
| #if !defined(NDEBUG)
|
| if (match_phase == AcceleratorMatchPhase::POST_ONLY) {
|
| @@ -314,8 +305,10 @@ void EventDispatcher::ProcessEvent(const ui::Event& event,
|
| }
|
|
|
| DCHECK(event.IsPointerEvent());
|
| - ProcessPointerEvent(*event.AsPointerEvent());
|
| - return;
|
| + event_targeter_->FindTargetForLocation(
|
| + event.AsPointerEvent()->root_location(), event_display_id_,
|
| + base::BindOnce(&EventDispatcher::ProcessPointerEventOnFoundTarget,
|
| + base::Unretained(this), *event.AsPointerEvent()));
|
| }
|
|
|
| ServerWindow* EventDispatcher::GetRootWindowContaining(
|
| @@ -324,6 +317,10 @@ ServerWindow* EventDispatcher::GetRootWindowContaining(
|
| return delegate_->GetRootWindowContaining(location_in_display, display_id);
|
| }
|
|
|
| +void EventDispatcher::ProcessNextAvailableEvent() {
|
| + delegate_->ProcessNextAvailableEvent();
|
| +}
|
| +
|
| void EventDispatcher::SetMouseCursorSourceWindow(ServerWindow* window) {
|
| if (mouse_cursor_source_window_ == window)
|
| return;
|
| @@ -368,12 +365,10 @@ void EventDispatcher::ProcessKeyEvent(const ui::KeyEvent& event,
|
| EventDispatcherDelegate::AcceleratorPhase::POST);
|
| }
|
|
|
| -void EventDispatcher::ProcessPointerEvent(const ui::PointerEvent& event) {
|
| - DCHECK(event.IsPointerEvent());
|
| -
|
| +void EventDispatcher::ProcessPointerEventOnFoundTarget(
|
| + const ui::PointerEvent& event,
|
| + const LocationTarget& location_target) {
|
| PointerTarget pointer_target;
|
| - LocationTarget location_target = event_targeter_->FindTargetForLocation(
|
| - event.root_location(), event_display_id_);
|
| pointer_target.window = modal_window_controller_.GetTargetForWindow(
|
| location_target.deepest_window.window);
|
| pointer_target.is_mouse_event = event.IsMousePointerEvent();
|
| @@ -462,7 +457,7 @@ void EventDispatcher::ProcessPointerEvent(const ui::PointerEvent& event) {
|
| // before we perform dispatch because the Delegate is going to read this
|
| // information from us.
|
| if (is_pointer_going_up && is_mouse_event)
|
| - UpdateCursorProviderByLastKnownLocation();
|
| + UpdateCursorProviderByLastKnownLocationOnFoundWindow(location_target);
|
|
|
| DispatchToPointerTarget(pointer_targets_[pointer_id],
|
| *cloned_event->AsPointerEvent());
|
| @@ -477,6 +472,41 @@ void EventDispatcher::ProcessPointerEvent(const ui::PointerEvent& event) {
|
| }
|
| }
|
|
|
| +void EventDispatcher::UpdateNonClientAreaForCurrentWindowOnFoundWindow(
|
| + const LocationTarget& location_target) {
|
| + if (!mouse_cursor_source_window_)
|
| + return;
|
| +
|
| + if (location_target.deepest_window.window == mouse_cursor_source_window_) {
|
| + mouse_cursor_in_non_client_area_ =
|
| + mouse_cursor_source_window_
|
| + ? location_target.deepest_window.in_non_client_area
|
| + : false;
|
| + }
|
| + SetMousePointerLocation(location_target.location_in_root,
|
| + location_target.display_id);
|
| + delegate_->UpdateNativeCursorFromDispatcher();
|
| +}
|
| +
|
| +void EventDispatcher::UpdateCursorProviderByLastKnownLocationOnFoundWindow(
|
| + const LocationTarget& location_target) {
|
| + if (mouse_button_down_)
|
| + return;
|
| +
|
| + SetMouseCursorSourceWindow(location_target.deepest_window.window);
|
| + if (mouse_cursor_source_window_) {
|
| + mouse_cursor_in_non_client_area_ =
|
| + location_target.deepest_window.in_non_client_area;
|
| + } else {
|
| + SetMouseCursorSourceWindow(delegate_->GetRootWindowContaining(
|
| + &mouse_pointer_last_location_, &mouse_pointer_display_id_));
|
| + mouse_cursor_in_non_client_area_ = true;
|
| + }
|
| + SetMousePointerLocation(location_target.location_in_root,
|
| + location_target.display_id);
|
| + delegate_->UpdateNativeCursorFromDispatcher();
|
| +}
|
| +
|
| void EventDispatcher::StartTrackingPointer(
|
| int32_t pointer_id,
|
| const PointerTarget& pointer_target) {
|
|
|