| Index: ui/wm/core/capture_controller.h
|
| diff --git a/ui/wm/core/capture_controller.h b/ui/wm/core/capture_controller.h
|
| index bd9beb922a803de2935ffe0a096c759a56417d5d..cc32ae77b21b3a53ce185b1d2d980b0ba82beb31 100644
|
| --- a/ui/wm/core/capture_controller.h
|
| +++ b/ui/wm/core/capture_controller.h
|
| @@ -5,7 +5,7 @@
|
| #ifndef UI_WM_CORE_CAPTURE_CONTROLLER_H_
|
| #define UI_WM_CORE_CAPTURE_CONTROLLER_H_
|
|
|
| -#include <set>
|
| +#include <map>
|
|
|
| #include "base/basictypes.h"
|
| #include "base/compiler_specific.h"
|
| @@ -13,20 +13,26 @@
|
| #include "ui/aura/window_observer.h"
|
| #include "ui/wm/wm_export.h"
|
|
|
| +namespace aura {
|
| +namespace client {
|
| +class CaptureDelegate;
|
| +}
|
| +}
|
| +
|
| namespace wm {
|
|
|
| // Internal CaptureClient implementation. See ScopedCaptureClient for details.
|
| class WM_EXPORT CaptureController : public aura::client::CaptureClient {
|
| public:
|
| - // Adds |root| to the list of RootWindows notified when capture changes.
|
| + // Adds |root| to the list of root windows notified when capture changes.
|
| void Attach(aura::Window* root);
|
|
|
| - // Removes |root| from the list of RootWindows notified when capture changes.
|
| + // Removes |root| from the list of root windows notified when capture changes.
|
| void Detach(aura::Window* root);
|
|
|
| // Returns true if this CaptureController is installed on at least one
|
| - // RootWindow.
|
| - bool is_active() const { return !root_windows_.empty(); }
|
| + // root window.
|
| + bool is_active() const { return !delegates_.empty(); }
|
|
|
| // Overridden from aura::client::CaptureClient:
|
| void SetCapture(aura::Window* window) override;
|
| @@ -36,7 +42,6 @@ class WM_EXPORT CaptureController : public aura::client::CaptureClient {
|
|
|
| private:
|
| friend class ScopedCaptureClient;
|
| - typedef std::set<aura::Window*> RootWindows;
|
|
|
| CaptureController();
|
| ~CaptureController() override;
|
| @@ -44,8 +49,14 @@ class WM_EXPORT CaptureController : public aura::client::CaptureClient {
|
| // The current capture window. NULL if there is no capture window.
|
| aura::Window* capture_window_;
|
|
|
| - // Set of RootWindows notified when capture changes.
|
| - RootWindows root_windows_;
|
| + // The capture delegate for the root window with native capture. The root
|
| + // window with native capture may not contain |capture_window_|. This occurs
|
| + // if |capture_window_| is reparented to a different root window while it has
|
| + // capture.
|
| + aura::client::CaptureDelegate* capture_delegate_;
|
| +
|
| + // The delegates notified when capture changes.
|
| + std::map<aura::Window*, aura::client::CaptureDelegate*> delegates_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(CaptureController);
|
| };
|
| @@ -55,6 +66,21 @@ class WM_EXPORT CaptureController : public aura::client::CaptureClient {
|
| // among all ScopedCaptureClients and adds the RootWindow to it.
|
| class WM_EXPORT ScopedCaptureClient : public aura::WindowObserver {
|
| public:
|
| + class WM_EXPORT TestApi {
|
| + public:
|
| + explicit TestApi(ScopedCaptureClient* client) : client_(client) {}
|
| + ~TestApi() {}
|
| +
|
| + // Sets the delegate.
|
| + void SetDelegate(aura::client::CaptureDelegate* delegate);
|
| +
|
| + private:
|
| + // Not owned.
|
| + ScopedCaptureClient* client_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestApi);
|
| + };
|
| +
|
| explicit ScopedCaptureClient(aura::Window* root);
|
| ~ScopedCaptureClient() override;
|
|
|
|
|