Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(169)

Unified Diff: components/mus/public/cpp/lib/window_tree_client_impl.cc

Issue 1921673005: mus: Add PointerWatcher for passively observing mouse and touch events (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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) {
« no previous file with comments | « components/mus/public/cpp/lib/window_tree_client_impl.h ('k') | components/mus/public/cpp/tests/window_server_test_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698