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

Side by Side 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, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/mus/public/cpp/lib/window_tree_client_impl.h" 5 #include "components/mus/public/cpp/lib/window_tree_client_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 return focused_window_; 544 return focused_window_;
545 } 545 }
546 546
547 void WindowTreeClientImpl::ClearFocus() { 547 void WindowTreeClientImpl::ClearFocus() {
548 if (!focused_window_) 548 if (!focused_window_)
549 return; 549 return;
550 550
551 SetFocus(nullptr); 551 SetFocus(nullptr);
552 } 552 }
553 553
554 void WindowTreeClientImpl::SetEventObserver(mojom::EventMatcherPtr matcher) {
555 if (matcher.is_null()) {
556 has_event_observer_ = false;
557 tree_->SetEventObserver(nullptr, 0u);
558 } else {
559 has_event_observer_ = true;
560 event_observer_id_++;
561 tree_->SetEventObserver(std::move(matcher), event_observer_id_);
562 }
563 }
564
554 Window* WindowTreeClientImpl::NewWindow( 565 Window* WindowTreeClientImpl::NewWindow(
555 const Window::SharedProperties* properties) { 566 const Window::SharedProperties* properties) {
556 return NewWindowImpl(NewWindowType::CHILD, properties); 567 return NewWindowImpl(NewWindowType::CHILD, properties);
557 } 568 }
558 569
559 Window* WindowTreeClientImpl::NewTopLevelWindow( 570 Window* WindowTreeClientImpl::NewTopLevelWindow(
560 const Window::SharedProperties* properties) { 571 const Window::SharedProperties* properties) {
561 Window* window = NewWindowImpl(NewWindowType::TOP_LEVEL, properties); 572 Window* window = NewWindowImpl(NewWindowType::TOP_LEVEL, properties);
562 // Assume newly created top level windows are drawn by default, otherwise 573 // Assume newly created top level windows are drawn by default, otherwise
563 // requests to focus will fail. We will get the real value in 574 // requests to focus will fail. We will get the real value in
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
860 if (ApplyServerChangeToExistingInFlightChange(new_change)) 871 if (ApplyServerChangeToExistingInFlightChange(new_change))
861 return; 872 return;
862 873
863 WindowPrivate(window).LocalSetSharedProperty(name, std::move(new_data)); 874 WindowPrivate(window).LocalSetSharedProperty(name, std::move(new_data));
864 } 875 }
865 876
866 void WindowTreeClientImpl::OnWindowInputEvent(uint32_t event_id, 877 void WindowTreeClientImpl::OnWindowInputEvent(uint32_t event_id,
867 Id window_id, 878 Id window_id,
868 mojom::EventPtr event, 879 mojom::EventPtr event,
869 uint32_t event_observer_id) { 880 uint32_t event_observer_id) {
870 // TODO(jamescook): If event_observer_id is non-zero, also route the event to 881 std::unique_ptr<ui::Event> ui_event = event.To<std::unique_ptr<ui::Event>>();
871 // PointerWatchers. 882
883 // Non-zero event_observer_id means it matched an event observer on the
884 // server.
885 if (event_observer_id != 0 && has_event_observer_ &&
886 event_observer_id == event_observer_id_)
887 delegate_->OnEventObserved(*ui_event);
872 888
873 Window* window = GetWindowByServerId(window_id); 889 Window* window = GetWindowByServerId(window_id);
874 if (!window || !window->input_event_handler_) { 890 if (!window || !window->input_event_handler_) {
875 tree_->OnWindowInputEventAck(event_id, mojom::EventResult::UNHANDLED); 891 tree_->OnWindowInputEventAck(event_id, mojom::EventResult::UNHANDLED);
876 return; 892 return;
877 } 893 }
878 894
879 std::unique_ptr<base::Callback<void(mojom::EventResult)>> ack_callback( 895 std::unique_ptr<base::Callback<void(mojom::EventResult)>> ack_callback(
880 new base::Callback<void(mojom::EventResult)>( 896 new base::Callback<void(mojom::EventResult)>(
881 base::Bind(&mojom::WindowTree::OnWindowInputEventAck, 897 base::Bind(&mojom::WindowTree::OnWindowInputEventAck,
882 base::Unretained(tree_), event_id))); 898 base::Unretained(tree_), event_id)));
883 window->input_event_handler_->OnWindowInputEvent( 899 window->input_event_handler_->OnWindowInputEvent(
884 window, *event.To<std::unique_ptr<ui::Event>>().get(), &ack_callback); 900 window, *event.To<std::unique_ptr<ui::Event>>().get(), &ack_callback);
885 901
886 // The handler did not take ownership of the callback, so we send the ack, 902 // The handler did not take ownership of the callback, so we send the ack,
887 // marking the event as not consumed. 903 // marking the event as not consumed.
888 if (ack_callback) 904 if (ack_callback)
889 ack_callback->Run(mojom::EventResult::UNHANDLED); 905 ack_callback->Run(mojom::EventResult::UNHANDLED);
890 } 906 }
891 907
892 void WindowTreeClientImpl::OnEventObserved(mojom::EventPtr event_in, 908 void WindowTreeClientImpl::OnEventObserved(mojom::EventPtr event,
893 uint32_t event_observer_id) { 909 uint32_t event_observer_id) {
894 // TODO(jamescook): Route the observed event to PointerWatchers. 910 if (has_event_observer_ && event_observer_id == event_observer_id_) {
911 std::unique_ptr<ui::Event> ui_event =
912 event.To<std::unique_ptr<ui::Event>>();
913 delegate_->OnEventObserved(*ui_event);
914 }
895 } 915 }
896 916
897 void WindowTreeClientImpl::OnWindowFocused(Id focused_window_id) { 917 void WindowTreeClientImpl::OnWindowFocused(Id focused_window_id) {
898 Window* focused_window = GetWindowByServerId(focused_window_id); 918 Window* focused_window = GetWindowByServerId(focused_window_id);
899 InFlightFocusChange new_change(this, focused_window); 919 InFlightFocusChange new_change(this, focused_window);
900 if (ApplyServerChangeToExistingInFlightChange(new_change)) 920 if (ApplyServerChangeToExistingInFlightChange(new_change))
901 return; 921 return;
902 922
903 LocalSetFocus(focused_window); 923 LocalSetFocus(focused_window);
904 } 924 }
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1041 1061
1042 void WindowTreeClientImpl::SetUnderlaySurfaceOffsetAndExtendedHitArea( 1062 void WindowTreeClientImpl::SetUnderlaySurfaceOffsetAndExtendedHitArea(
1043 Window* window, 1063 Window* window,
1044 const gfx::Vector2d& offset, 1064 const gfx::Vector2d& offset,
1045 const gfx::Insets& hit_area) { 1065 const gfx::Insets& hit_area) {
1046 window_manager_internal_client_->SetUnderlaySurfaceOffsetAndExtendedHitArea( 1066 window_manager_internal_client_->SetUnderlaySurfaceOffsetAndExtendedHitArea(
1047 server_id(window), offset.x(), offset.y(), mojo::Insets::From(hit_area)); 1067 server_id(window), offset.x(), offset.y(), mojo::Insets::From(hit_area));
1048 } 1068 }
1049 1069
1050 } // namespace mus 1070 } // namespace mus
OLDNEW
« 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