| Index: components/mus/public/cpp/lib/window_tree_client_impl.cc
|
| diff --git a/components/mus/public/cpp/lib/window_tree_client_impl.cc b/components/mus/public/cpp/lib/window_tree_client_impl.cc
|
| index c377a8ffc75064da17b0fb218d69447c3c597d40..ec57bf62712b12a29a7b5c0129bbaaffb38e4ac9 100644
|
| --- a/components/mus/public/cpp/lib/window_tree_client_impl.cc
|
| +++ b/components/mus/public/cpp/lib/window_tree_client_impl.cc
|
| @@ -551,6 +551,17 @@ void WindowTreeClientImpl::ClearFocus() {
|
| SetFocus(nullptr);
|
| }
|
|
|
| +void WindowTreeClientImpl::SetEventObserver(mojom::EventMatcherPtr matcher) {
|
| + if (matcher.is_null()) {
|
| + has_event_observer_ = false;
|
| + tree_->SetEventObserver(nullptr, 0u);
|
| + } else {
|
| + has_event_observer_ = true;
|
| + event_observer_id_++;
|
| + tree_->SetEventObserver(std::move(matcher), event_observer_id_);
|
| + }
|
| +}
|
| +
|
| Window* WindowTreeClientImpl::NewWindow(
|
| const Window::SharedProperties* properties) {
|
| return NewWindowImpl(NewWindowType::CHILD, properties);
|
| @@ -867,8 +878,13 @@ void WindowTreeClientImpl::OnWindowInputEvent(uint32_t event_id,
|
| Id window_id,
|
| mojom::EventPtr event,
|
| uint32_t event_observer_id) {
|
| - // TODO(jamescook): If event_observer_id is non-zero, also route the event to
|
| - // PointerWatchers.
|
| + std::unique_ptr<ui::Event> ui_event = event.To<std::unique_ptr<ui::Event>>();
|
| +
|
| + // Non-zero event_observer_id means it matched an event observer on the
|
| + // server.
|
| + if (event_observer_id != 0 && has_event_observer_ &&
|
| + event_observer_id == event_observer_id_)
|
| + delegate_->OnEventObserved(*ui_event);
|
|
|
| Window* window = GetWindowByServerId(window_id);
|
| if (!window || !window->input_event_handler_) {
|
| @@ -889,9 +905,13 @@ void WindowTreeClientImpl::OnWindowInputEvent(uint32_t event_id,
|
| ack_callback->Run(mojom::EventResult::UNHANDLED);
|
| }
|
|
|
| -void WindowTreeClientImpl::OnEventObserved(mojom::EventPtr event_in,
|
| +void WindowTreeClientImpl::OnEventObserved(mojom::EventPtr event,
|
| uint32_t event_observer_id) {
|
| - // TODO(jamescook): Route the observed event to PointerWatchers.
|
| + if (has_event_observer_ && event_observer_id == event_observer_id_) {
|
| + std::unique_ptr<ui::Event> ui_event =
|
| + event.To<std::unique_ptr<ui::Event>>();
|
| + delegate_->OnEventObserved(*ui_event);
|
| + }
|
| }
|
|
|
| void WindowTreeClientImpl::OnWindowFocused(Id focused_window_id) {
|
|
|