OLD | NEW |
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 #ifndef UI_AURA_MUS_WINDOW_TREE_CLIENT_H_ | 5 #ifndef UI_AURA_MUS_WINDOW_TREE_CLIENT_H_ |
6 #define UI_AURA_MUS_WINDOW_TREE_CLIENT_H_ | 6 #define UI_AURA_MUS_WINDOW_TREE_CLIENT_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <map> | 10 #include <map> |
11 #include <memory> | 11 #include <memory> |
12 #include <set> | 12 #include <set> |
13 #include <string> | 13 #include <string> |
14 #include <vector> | 14 #include <vector> |
15 | 15 |
16 #include "base/atomicops.h" | 16 #include "base/atomicops.h" |
17 #include "base/compiler_specific.h" | 17 #include "base/compiler_specific.h" |
18 #include "base/macros.h" | 18 #include "base/macros.h" |
19 #include "base/memory/weak_ptr.h" | 19 #include "base/memory/weak_ptr.h" |
20 #include "base/observer_list.h" | 20 #include "base/observer_list.h" |
21 #include "mojo/public/cpp/bindings/associated_binding.h" | 21 #include "mojo/public/cpp/bindings/associated_binding.h" |
22 #include "mojo/public/cpp/bindings/strong_binding.h" | 22 #include "mojo/public/cpp/bindings/strong_binding.h" |
23 #include "services/ui/public/interfaces/window_tree.mojom.h" | 23 #include "services/ui/public/interfaces/window_tree.mojom.h" |
24 #include "ui/aura/aura_export.h" | 24 #include "ui/aura/aura_export.h" |
| 25 #include "ui/aura/client/focus_change_observer.h" |
25 #include "ui/aura/client/transient_window_client_observer.h" | 26 #include "ui/aura/client/transient_window_client_observer.h" |
26 #include "ui/aura/mus/capture_synchronizer_delegate.h" | 27 #include "ui/aura/mus/capture_synchronizer_delegate.h" |
27 #include "ui/aura/mus/drag_drop_controller_host.h" | 28 #include "ui/aura/mus/drag_drop_controller_host.h" |
28 #include "ui/aura/mus/focus_synchronizer_delegate.h" | |
29 #include "ui/aura/mus/mus_types.h" | 29 #include "ui/aura/mus/mus_types.h" |
30 #include "ui/aura/mus/window_manager_delegate.h" | 30 #include "ui/aura/mus/window_manager_delegate.h" |
31 #include "ui/aura/mus/window_tree_host_mus_delegate.h" | 31 #include "ui/aura/mus/window_tree_host_mus_delegate.h" |
32 | 32 |
33 namespace display { | 33 namespace display { |
34 class Display; | 34 class Display; |
35 } | 35 } |
36 | 36 |
37 namespace gfx { | 37 namespace gfx { |
38 class Insets; | 38 class Insets; |
39 } | 39 } |
40 | 40 |
41 namespace service_manager { | 41 namespace service_manager { |
42 class Connector; | 42 class Connector; |
43 } | 43 } |
44 | 44 |
45 namespace aura { | 45 namespace aura { |
46 class CaptureSynchronizer; | 46 class CaptureSynchronizer; |
47 class DragDropControllerMus; | 47 class DragDropControllerMus; |
48 class FocusSynchronizer; | |
49 class InFlightBoundsChange; | 48 class InFlightBoundsChange; |
50 class InFlightChange; | 49 class InFlightChange; |
51 class InFlightFocusChange; | 50 class InFlightFocusChange; |
52 class InFlightPropertyChange; | 51 class InFlightPropertyChange; |
53 class InFlightVisibleChange; | 52 class InFlightVisibleChange; |
54 class WindowMus; | 53 class WindowMus; |
55 class WindowPortMus; | 54 class WindowPortMus; |
56 struct WindowPortInitData; | 55 struct WindowPortInitData; |
57 struct WindowPortPropertyData; | 56 struct WindowPortPropertyData; |
58 class WindowTreeClientDelegate; | 57 class WindowTreeClientDelegate; |
(...skipping 13 matching lines...) Expand all Loading... |
72 // WindowTreeClient is owned by the creator. Generally when the delegate gets | 71 // WindowTreeClient is owned by the creator. Generally when the delegate gets |
73 // one of OnEmbedRootDestroyed() or OnLostConnection() it should delete the | 72 // one of OnEmbedRootDestroyed() or OnLostConnection() it should delete the |
74 // WindowTreeClient. | 73 // WindowTreeClient. |
75 // | 74 // |
76 // When WindowTreeClient is deleted all windows are deleted (and observers | 75 // When WindowTreeClient is deleted all windows are deleted (and observers |
77 // notified). | 76 // notified). |
78 class AURA_EXPORT WindowTreeClient | 77 class AURA_EXPORT WindowTreeClient |
79 : NON_EXPORTED_BASE(public ui::mojom::WindowTreeClient), | 78 : NON_EXPORTED_BASE(public ui::mojom::WindowTreeClient), |
80 NON_EXPORTED_BASE(public ui::mojom::WindowManager), | 79 NON_EXPORTED_BASE(public ui::mojom::WindowManager), |
81 public CaptureSynchronizerDelegate, | 80 public CaptureSynchronizerDelegate, |
82 public FocusSynchronizerDelegate, | |
83 public DragDropControllerHost, | 81 public DragDropControllerHost, |
84 public WindowManagerClient, | 82 public WindowManagerClient, |
85 public WindowTreeHostMusDelegate, | 83 public WindowTreeHostMusDelegate, |
| 84 public client::FocusChangeObserver, |
86 public client::TransientWindowClientObserver { | 85 public client::TransientWindowClientObserver { |
87 public: | 86 public: |
88 explicit WindowTreeClient( | 87 explicit WindowTreeClient( |
89 WindowTreeClientDelegate* delegate, | 88 WindowTreeClientDelegate* delegate, |
90 WindowManagerDelegate* window_manager_delegate = nullptr, | 89 WindowManagerDelegate* window_manager_delegate = nullptr, |
91 ui::mojom::WindowTreeClientRequest request = nullptr); | 90 ui::mojom::WindowTreeClientRequest request = nullptr); |
92 ~WindowTreeClient() override; | 91 ~WindowTreeClient() override; |
93 | 92 |
94 // Establishes the connection by way of the WindowTreeFactory. | 93 // Establishes the connection by way of the WindowTreeFactory. |
95 void ConnectViaWindowTreeFactory(service_manager::Connector* connector); | 94 void ConnectViaWindowTreeFactory(service_manager::Connector* connector); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 Id window_id, | 129 Id window_id, |
131 ui::mojom::CompositorFrameSinkType type, | 130 ui::mojom::CompositorFrameSinkType type, |
132 cc::mojom::MojoCompositorFrameSinkRequest compositor_frame_sink, | 131 cc::mojom::MojoCompositorFrameSinkRequest compositor_frame_sink, |
133 cc::mojom::MojoCompositorFrameSinkClientPtr client); | 132 cc::mojom::MojoCompositorFrameSinkClientPtr client); |
134 | 133 |
135 bool IsRoot(WindowMus* window) const { return roots_.count(window) > 0; } | 134 bool IsRoot(WindowMus* window) const { return roots_.count(window) > 0; } |
136 | 135 |
137 // Returns the root of this connection. | 136 // Returns the root of this connection. |
138 std::set<Window*> GetRoots(); | 137 std::set<Window*> GetRoots(); |
139 | 138 |
| 139 // Returns the focused window; null if focus is not yet known or another app |
| 140 // is focused. |
| 141 Window* GetFocusedWindow(); |
| 142 |
140 // Returns the current location of the mouse on screen. Note: this method may | 143 // Returns the current location of the mouse on screen. Note: this method may |
141 // race the asynchronous initialization; but in that case we return (0, 0). | 144 // race the asynchronous initialization; but in that case we return (0, 0). |
142 gfx::Point GetCursorScreenPoint(); | 145 gfx::Point GetCursorScreenPoint(); |
143 | 146 |
144 // See description in window_tree.mojom. When an existing pointer watcher is | 147 // See description in window_tree.mojom. When an existing pointer watcher is |
145 // updated or cleared then any future events from the server for that watcher | 148 // updated or cleared then any future events from the server for that watcher |
146 // will be ignored. | 149 // will be ignored. |
147 void StartPointerWatcher(bool want_moves); | 150 void StartPointerWatcher(bool want_moves); |
148 void StopPointerWatcher(); | 151 void StopPointerWatcher(); |
149 | 152 |
(...skipping 24 matching lines...) Expand all Loading... |
174 // TODO(sky): this assumes change_ids never wrap, which is a bad assumption. | 177 // TODO(sky): this assumes change_ids never wrap, which is a bad assumption. |
175 using InFlightMap = std::map<uint32_t, std::unique_ptr<InFlightChange>>; | 178 using InFlightMap = std::map<uint32_t, std::unique_ptr<InFlightChange>>; |
176 | 179 |
177 void RegisterWindowMus(WindowMus* window); | 180 void RegisterWindowMus(WindowMus* window); |
178 | 181 |
179 WindowMus* GetWindowByServerId(Id id); | 182 WindowMus* GetWindowByServerId(Id id); |
180 | 183 |
181 // Returns true if the specified window was created by this client. | 184 // Returns true if the specified window was created by this client. |
182 bool WasCreatedByThisClient(const WindowMus* window) const; | 185 bool WasCreatedByThisClient(const WindowMus* window) const; |
183 | 186 |
| 187 void SetFocusFromServer(WindowMus* window); |
| 188 void SetFocusFromServerImpl(client::FocusClient* focus_client, |
| 189 WindowMus* window); |
| 190 |
184 // Returns the oldest InFlightChange that matches |change|. | 191 // Returns the oldest InFlightChange that matches |change|. |
185 InFlightChange* GetOldestInFlightChangeMatching(const InFlightChange& change); | 192 InFlightChange* GetOldestInFlightChangeMatching(const InFlightChange& change); |
186 | 193 |
187 // See InFlightChange for details on how InFlightChanges are used. | 194 // See InFlightChange for details on how InFlightChanges are used. |
188 uint32_t ScheduleInFlightChange(std::unique_ptr<InFlightChange> change); | 195 uint32_t ScheduleInFlightChange(std::unique_ptr<InFlightChange> change); |
189 | 196 |
190 // Returns true if there is an InFlightChange that matches |change|. If there | 197 // Returns true if there is an InFlightChange that matches |change|. If there |
191 // is an existing change SetRevertValueFrom() is invoked on it. Returns false | 198 // is an existing change SetRevertValueFrom() is invoked on it. Returns false |
192 // if there is no InFlightChange matching |change|. | 199 // if there is no InFlightChange matching |change|. |
193 // See InFlightChange for details on how InFlightChanges are used. | 200 // See InFlightChange for details on how InFlightChanges are used. |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
404 const base::Callback<void(bool)>& callback) override; | 411 const base::Callback<void(bool)>& callback) override; |
405 void RemoveAccelerator(uint32_t id) override; | 412 void RemoveAccelerator(uint32_t id) override; |
406 void AddActivationParent(Window* window) override; | 413 void AddActivationParent(Window* window) override; |
407 void RemoveActivationParent(Window* window) override; | 414 void RemoveActivationParent(Window* window) override; |
408 void ActivateNextWindow() override; | 415 void ActivateNextWindow() override; |
409 void SetUnderlaySurfaceOffsetAndExtendedHitArea( | 416 void SetUnderlaySurfaceOffsetAndExtendedHitArea( |
410 Window* window, | 417 Window* window, |
411 const gfx::Vector2d& offset, | 418 const gfx::Vector2d& offset, |
412 const gfx::Insets& hit_area) override; | 419 const gfx::Insets& hit_area) override; |
413 | 420 |
| 421 // Overriden from client::FocusChangeObserver: |
| 422 void OnWindowFocused(Window* gained_focus, Window* lost_focus) override; |
| 423 |
414 // Overriden from WindowTreeHostMusDelegate: | 424 // Overriden from WindowTreeHostMusDelegate: |
415 void OnWindowTreeHostBoundsWillChange(WindowTreeHostMus* window_tree_host, | 425 void OnWindowTreeHostBoundsWillChange(WindowTreeHostMus* window_tree_host, |
416 const gfx::Rect& bounds) override; | 426 const gfx::Rect& bounds) override; |
417 std::unique_ptr<WindowPortMus> CreateWindowPortForTopLevel() override; | 427 std::unique_ptr<WindowPortMus> CreateWindowPortForTopLevel() override; |
418 void OnWindowTreeHostCreated(WindowTreeHostMus* window_tree_host) override; | 428 void OnWindowTreeHostCreated(WindowTreeHostMus* window_tree_host) override; |
419 | 429 |
420 // Override from client::TransientWindowClientObserver: | 430 // Override from client::TransientWindowClientObserver: |
421 void OnTransientChildWindowAdded(Window* parent, | 431 void OnTransientChildWindowAdded(Window* parent, |
422 Window* transient_child) override; | 432 Window* transient_child) override; |
423 void OnTransientChildWindowRemoved(Window* parent, | 433 void OnTransientChildWindowRemoved(Window* parent, |
424 Window* transient_child) override; | 434 Window* transient_child) override; |
425 | 435 |
426 // Overriden from DragDropControllerHost: | 436 // Overriden from DragDropControllerHost: |
427 uint32_t CreateChangeIdForDrag(WindowMus* window) override; | 437 uint32_t CreateChangeIdForDrag(WindowMus* window) override; |
428 | 438 |
429 // Overrided from CaptureSynchronizerDelegate: | 439 // Overrided from CaptureSynchronizerDelegate: |
430 uint32_t CreateChangeIdForCapture(WindowMus* window) override; | 440 uint32_t CreateChangeIdForCapture(WindowMus* window) override; |
431 | 441 |
432 // Overrided from FocusSynchronizerDelegate: | |
433 uint32_t CreateChangeIdForFocus(WindowMus* window) override; | |
434 | |
435 // The one int in |cursor_location_mapping_|. When we read from this | 442 // The one int in |cursor_location_mapping_|. When we read from this |
436 // location, we must always read from it atomically. | 443 // location, we must always read from it atomically. |
437 base::subtle::Atomic32* cursor_location_memory() { | 444 base::subtle::Atomic32* cursor_location_memory() { |
438 return reinterpret_cast<base::subtle::Atomic32*>( | 445 return reinterpret_cast<base::subtle::Atomic32*>( |
439 cursor_location_mapping_.get()); | 446 cursor_location_mapping_.get()); |
440 } | 447 } |
441 | 448 |
442 // This is set once and only once when we get OnEmbed(). It gives the unique | 449 // This is set once and only once when we get OnEmbed(). It gives the unique |
443 // id for this client. | 450 // id for this client. |
444 ClientSpecificId client_id_; | 451 ClientSpecificId client_id_; |
445 | 452 |
446 // Id assigned to the next window created. | 453 // Id assigned to the next window created. |
447 ClientSpecificId next_window_id_; | 454 ClientSpecificId next_window_id_; |
448 | 455 |
449 // Id used for the next change id supplied to the server. | 456 // Id used for the next change id supplied to the server. |
450 uint32_t next_change_id_; | 457 uint32_t next_change_id_; |
451 InFlightMap in_flight_map_; | 458 InFlightMap in_flight_map_; |
452 | 459 |
453 WindowTreeClientDelegate* delegate_; | 460 WindowTreeClientDelegate* delegate_; |
454 | 461 |
455 WindowManagerDelegate* window_manager_delegate_; | 462 WindowManagerDelegate* window_manager_delegate_; |
456 | 463 |
457 std::set<WindowMus*> roots_; | 464 std::set<WindowMus*> roots_; |
458 | 465 |
459 IdToWindowMap windows_; | 466 IdToWindowMap windows_; |
460 std::map<ClientSpecificId, std::set<Window*>> embedded_windows_; | 467 std::map<ClientSpecificId, std::set<Window*>> embedded_windows_; |
461 | 468 |
462 std::unique_ptr<CaptureSynchronizer> capture_synchronizer_; | 469 std::unique_ptr<CaptureSynchronizer> capture_synchronizer_; |
463 | 470 |
464 std::unique_ptr<FocusSynchronizer> focus_synchronizer_; | 471 bool setting_focus_ = false; |
| 472 WindowMus* window_setting_focus_to_ = nullptr; |
| 473 WindowMus* focused_window_ = nullptr; |
465 | 474 |
466 mojo::Binding<ui::mojom::WindowTreeClient> binding_; | 475 mojo::Binding<ui::mojom::WindowTreeClient> binding_; |
467 ui::mojom::WindowTreePtr tree_ptr_; | 476 ui::mojom::WindowTreePtr tree_ptr_; |
468 // Typically this is the value contained in |tree_ptr_|, but tests may | 477 // Typically this is the value contained in |tree_ptr_|, but tests may |
469 // directly set this. | 478 // directly set this. |
470 ui::mojom::WindowTree* tree_; | 479 ui::mojom::WindowTree* tree_; |
471 | 480 |
472 // Set to true if OnEmbed() was received. | 481 // Set to true if OnEmbed() was received. |
473 bool is_from_embed_ = false; | 482 bool is_from_embed_ = false; |
474 | 483 |
(...skipping 25 matching lines...) Expand all Loading... |
500 std::unique_ptr<DragDropControllerMus> drag_drop_controller_; | 509 std::unique_ptr<DragDropControllerMus> drag_drop_controller_; |
501 | 510 |
502 base::WeakPtrFactory<WindowTreeClient> weak_factory_; | 511 base::WeakPtrFactory<WindowTreeClient> weak_factory_; |
503 | 512 |
504 DISALLOW_COPY_AND_ASSIGN(WindowTreeClient); | 513 DISALLOW_COPY_AND_ASSIGN(WindowTreeClient); |
505 }; | 514 }; |
506 | 515 |
507 } // namespace aura | 516 } // namespace aura |
508 | 517 |
509 #endif // UI_AURA_MUS_WINDOW_TREE_CLIENT_H_ | 518 #endif // UI_AURA_MUS_WINDOW_TREE_CLIENT_H_ |
OLD | NEW |