| 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..9329b4b536b4726e948574e44ecb88e1df6513b3
|
| --- /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,
|
| + int64_t* display_id) {
|
| + PointerTarget pointer_target;
|
| + gfx::Point event_root_location(event.root_location());
|
| + DeepestWindow deepest_window =
|
| + FindDeepestVisibleWindowForEvents(&event_root_location, 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;
|
| +}
|
| +
|
| +DeepestWindow EventTargeter::FindDeepestVisibleWindowForEvents(
|
| + gfx::Point* location,
|
| + int64_t* display_id) {
|
| + ServerWindow* root =
|
| + event_dispatcher_delegate_->GetRootWindowContaining(location, display_id);
|
| + return root ? ui::ws::FindDeepestVisibleWindowForEvents(root, *location)
|
| + : DeepestWindow();
|
| +}
|
| +
|
| +} // namespace ws
|
| +} // namespace ui
|
|
|