OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 #ifndef COMPONENTS_MUS_WS_EVENT_DISPATCHER_H_ | 5 #ifndef COMPONENTS_MUS_WS_EVENT_DISPATCHER_H_ |
6 #define COMPONENTS_MUS_WS_EVENT_DISPATCHER_H_ | 6 #define COMPONENTS_MUS_WS_EVENT_DISPATCHER_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 | 9 |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 15 matching lines...) Expand all Loading... |
26 // Handles dispatching events to the right location as well as updating focus. | 26 // Handles dispatching events to the right location as well as updating focus. |
27 class EventDispatcher : public ServerWindowObserver { | 27 class EventDispatcher : public ServerWindowObserver { |
28 public: | 28 public: |
29 explicit EventDispatcher(EventDispatcherDelegate* delegate); | 29 explicit EventDispatcher(EventDispatcherDelegate* delegate); |
30 ~EventDispatcher() override; | 30 ~EventDispatcher() override; |
31 | 31 |
32 void set_root(ServerWindow* root) { root_ = root; } | 32 void set_root(ServerWindow* root) { root_ = root; } |
33 | 33 |
34 void set_surface_id(cc::SurfaceId surface_id) { surface_id_ = surface_id; } | 34 void set_surface_id(cc::SurfaceId surface_id) { surface_id_ = surface_id; } |
35 | 35 |
| 36 ServerWindow* capture_window() { return capture_window_; } |
| 37 const ServerWindow* capture_window() const { return capture_window_; } |
| 38 void SetCaptureWindow(ServerWindow* capture_window); |
| 39 |
36 void AddAccelerator(uint32_t id, mojom::EventMatcherPtr event_matcher); | 40 void AddAccelerator(uint32_t id, mojom::EventMatcherPtr event_matcher); |
37 void RemoveAccelerator(uint32_t id); | 41 void RemoveAccelerator(uint32_t id); |
38 | 42 |
39 void OnEvent(mojom::EventPtr event); | 43 void OnEvent(mojom::EventPtr event); |
40 | 44 |
41 private: | 45 private: |
42 // Keeps track of state associated with a pointer down until the | 46 // Keeps track of state associated with a pointer down until the |
43 // corresponding up/cancel. | 47 // corresponding up/cancel. |
44 struct PointerTarget { | 48 struct PointerTarget { |
45 PointerTarget() : window(nullptr), in_nonclient_area(false) {} | 49 PointerTarget() : window(nullptr), in_nonclient_area(false) {} |
(...skipping 14 matching lines...) Expand all Loading... |
60 // . move (not drag) events go to the deepest window. | 64 // . move (not drag) events go to the deepest window. |
61 // . when a pointer goes down all events until the corresponding up or | 65 // . when a pointer goes down all events until the corresponding up or |
62 // cancel go to the deepest target. For mouse events the up only occurs | 66 // cancel go to the deepest target. For mouse events the up only occurs |
63 // when no buttons on the mouse are down. | 67 // when no buttons on the mouse are down. |
64 void ProcessPointerEvent(mojom::EventPtr event); | 68 void ProcessPointerEvent(mojom::EventPtr event); |
65 | 69 |
66 // If |target->window| is valid, then passes the event to the delegate. | 70 // If |target->window| is valid, then passes the event to the delegate. |
67 void DispatchToPointerTarget(const PointerTarget& target, | 71 void DispatchToPointerTarget(const PointerTarget& target, |
68 mojom::EventPtr event); | 72 mojom::EventPtr event); |
69 | 73 |
| 74 // Cancels all implicit capture. This is called when the explicit capture |
| 75 // state changes. |
| 76 void CancelAllPointerEvents(); |
| 77 |
70 // Stops sending pointer events to |window|. This does not remove the entry | 78 // Stops sending pointer events to |window|. This does not remove the entry |
71 // for |window| from |pointer_targets_|, rather it nulls out the window. This | 79 // for |window| from |pointer_targets_|, rather it nulls out the window. This |
72 // way we continue to eat events until the up/cancel is received. | 80 // way we continue to eat events until the up/cancel is received. |
73 void CancelPointerEventsToTarget(ServerWindow* window); | 81 void CancelPointerEventsToTarget(ServerWindow* window); |
74 | 82 |
75 // Returns true if we're currently an observer for |window|. We are an | 83 // Returns true if we're currently an observer for |window|. We are an |
76 // observer for a window if any pointer events are targeting it. | 84 // observer for a window if any pointer events are targeting it. |
77 bool IsObservingWindow(ServerWindow* window); | 85 bool IsObservingWindow(ServerWindow* window); |
78 | 86 |
79 // Looks to see if there is an accelerator bound to the specified code/flags. | 87 // Looks to see if there is an accelerator bound to the specified code/flags. |
80 // If there is one, sets |accelerator_id| to the id of the accelerator invoked | 88 // If there is one, sets |accelerator_id| to the id of the accelerator invoked |
81 // and returns true. If there is none, returns false so normal key event | 89 // and returns true. If there is none, returns false so normal key event |
82 // processing can continue. | 90 // processing can continue. |
83 bool FindAccelerator(const mojom::Event& event, uint32_t* accelerator_id); | 91 bool FindAccelerator(const mojom::Event& event, uint32_t* accelerator_id); |
84 | 92 |
85 // ServerWindowObserver: | 93 // ServerWindowObserver: |
86 void OnWillChangeWindowHierarchy(ServerWindow* window, | 94 void OnWillChangeWindowHierarchy(ServerWindow* window, |
87 ServerWindow* new_parent, | 95 ServerWindow* new_parent, |
88 ServerWindow* old_parent) override; | 96 ServerWindow* old_parent) override; |
89 void OnWindowVisibilityChanged(ServerWindow* window) override; | 97 void OnWindowVisibilityChanged(ServerWindow* window) override; |
90 void OnWindowDestroyed(ServerWindow* window) override; | 98 void OnWindowDestroyed(ServerWindow* window) override; |
91 | 99 |
92 EventDispatcherDelegate* delegate_; | 100 EventDispatcherDelegate* delegate_; |
93 ServerWindow* root_; | 101 ServerWindow* root_; |
| 102 ServerWindow* capture_window_; |
94 | 103 |
95 cc::SurfaceId surface_id_; | 104 cc::SurfaceId surface_id_; |
96 | 105 |
97 using Entry = std::pair<uint32_t, EventMatcher>; | 106 using Entry = std::pair<uint32_t, EventMatcher>; |
98 std::map<uint32_t, EventMatcher> accelerators_; | 107 std::map<uint32_t, EventMatcher> accelerators_; |
99 | 108 |
100 using PointerIdToTargetMap = std::map<int32_t, PointerTarget>; | 109 using PointerIdToTargetMap = std::map<int32_t, PointerTarget>; |
101 PointerIdToTargetMap pointer_targets_; | 110 PointerIdToTargetMap pointer_targets_; |
102 | 111 |
103 DISALLOW_COPY_AND_ASSIGN(EventDispatcher); | 112 DISALLOW_COPY_AND_ASSIGN(EventDispatcher); |
104 }; | 113 }; |
105 | 114 |
106 } // namespace ws | 115 } // namespace ws |
107 } // namespace mus | 116 } // namespace mus |
108 | 117 |
109 #endif // COMPONENTS_MUS_WS_EVENT_DISPATCHER_H_ | 118 #endif // COMPONENTS_MUS_WS_EVENT_DISPATCHER_H_ |
OLD | NEW |