| Index: chromecast/graphics/cast_window_manager_aura.h
|
| diff --git a/chromecast/graphics/cast_window_manager_aura.h b/chromecast/graphics/cast_window_manager_aura.h
|
| index 8ce021d61ab986347357cd8b2287d570db256874..dc3f3271958ae4dba2a3cfc3d05c4c2aa78c4e96 100644
|
| --- a/chromecast/graphics/cast_window_manager_aura.h
|
| +++ b/chromecast/graphics/cast_window_manager_aura.h
|
| @@ -6,11 +6,14 @@
|
| #define CHROMECAST_GRAPHICS_CAST_WINDOW_MANAGER_AURA_H_
|
|
|
| #include <memory>
|
| +#include <vector>
|
|
|
| #include "base/macros.h"
|
| #include "base/observer_list.h"
|
| #include "chromecast/graphics/cast_vsync_settings.h"
|
| #include "chromecast/graphics/cast_window_manager.h"
|
| +#include "ui/aura/client/focus_client.h"
|
| +#include "ui/aura/window_observer.h"
|
|
|
| namespace aura {
|
| class Window;
|
| @@ -24,7 +27,9 @@ namespace chromecast {
|
| class CastWindowTreeHost;
|
|
|
| class CastWindowManagerAura : public CastWindowManager,
|
| - private CastVSyncSettings::Observer {
|
| + private CastVSyncSettings::Observer,
|
| + private aura::WindowObserver,
|
| + private aura::client::FocusClient {
|
| public:
|
| ~CastWindowManagerAura() override;
|
|
|
| @@ -32,6 +37,13 @@ class CastWindowManagerAura : public CastWindowManager,
|
| void TearDown() override;
|
| void AddWindow(gfx::NativeView window) override;
|
|
|
| + // aura::client::FocusClient implementation:
|
| + void AddObserver(aura::client::FocusChangeObserver* observer) override;
|
| + void RemoveObserver(aura::client::FocusChangeObserver* observer) override;
|
| + void FocusWindow(aura::Window* window) override;
|
| + void ResetFocusWithinActiveWindow(aura::Window* window) override;
|
| + aura::Window* GetFocusedWindow() override;
|
| +
|
| private:
|
| friend class CastWindowManager;
|
|
|
| @@ -41,12 +53,34 @@ class CastWindowManagerAura : public CastWindowManager,
|
| // CastVSyncSettings::Observer implementation:
|
| void OnVSyncIntervalChanged(base::TimeDelta interval) override;
|
|
|
| + // aura::WindowObserver implementation:
|
| + void OnWindowVisibilityChanged(aura::Window* window, bool visible) override;
|
| + void OnWindowDestroying(aura::Window* window) override;
|
| + void OnWindowHierarchyChanging(const HierarchyChangeParams& params) override;
|
| +
|
| void Setup();
|
|
|
| const bool enable_input_;
|
| std::unique_ptr<CastWindowTreeHost> window_tree_host_;
|
| + base::ObserverList<aura::client::FocusChangeObserver> focus_observers_;
|
| std::unique_ptr<aura::client::DefaultCaptureClient> capture_client_;
|
|
|
| + // Track the currently focused window, which isn't necessarily a top-level
|
| + // window.
|
| + aura::Window* focused_window_;
|
| + // Track the windows that we've focused in the past, so that we can restore
|
| + // focus to them. We assume that this is a small list so that we can perform
|
| + // linear ops on it.
|
| + std::vector<aura::Window*> focusable_windows_;
|
| +
|
| + // Change the focused window and notify focus observers.
|
| + void UpdateWindowFocus(aura::Window* skip);
|
| + // Get the window that should be focused.
|
| + aura::Window* GetWindowToFocus(aura::Window* skip);
|
| +
|
| + // Return the top-level window for |window|.
|
| + aura::Window* GetTopLevelWindow(aura::Window* window);
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(CastWindowManagerAura);
|
| };
|
|
|
|
|