| Index: services/ui/ws/event_targeter.cc
|
| diff --git a/services/ui/ws/event_targeter.cc b/services/ui/ws/event_targeter.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b40eff8e05081e0bd75273ee6a3c990c89f400ab
|
| --- /dev/null
|
| +++ b/services/ui/ws/event_targeter.cc
|
| @@ -0,0 +1,50 @@
|
| +// Copyright 2017 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "services/ui/ws/event_targeter.h"
|
| +
|
| +#include "services/ui/ws/event_dispatcher_delegate.h"
|
| +#include "services/ui/ws/modal_window_controller.h"
|
| +#include "services/ui/ws/window_finder.h"
|
| +#include "ui/events/event.h"
|
| +#include "ui/gfx/geometry/point.h"
|
| +
|
| +namespace ui {
|
| +namespace ws {
|
| +
|
| +EventTargeter::EventTargeter(EventDispatcherDelegate* event_dispatcher_delegate,
|
| + ModalWindowController* modal_window_controller)
|
| + : event_dispatcher_delegate_(event_dispatcher_delegate),
|
| + modal_window_controller_(modal_window_controller) {}
|
| +
|
| +EventTargeter::~EventTargeter() {}
|
| +
|
| +PointerTarget EventTargeter::PointerTargetForEvent(
|
| + const ui::LocatedEvent& event) {
|
| + PointerTarget pointer_target;
|
| + DeepestWindow deepest_window =
|
| + FindDeepestVisibleWindowForEvents(event.root_location());
|
| + 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;
|
| +}
|
| +
|
| +DeepestWindow EventTargeter::FindDeepestVisibleWindowForEvents(
|
| + const gfx::Point& location) {
|
| + gfx::Point relative_location(location);
|
| + // For the case of no root.
|
| + ServerWindow* root =
|
| + event_dispatcher_delegate_->GetRootWindowContaining(&relative_location);
|
| + return root ? ui::ws::FindDeepestVisibleWindowForEvents(root,
|
| + relative_location)
|
| + : DeepestWindow();
|
| +}
|
| +
|
| +} // namespace ws
|
| +} // namespace ui
|
|
|