diff options
Diffstat (limited to 'ash/shelf/shelf_window_watcher.h')
-rw-r--r-- | ash/shelf/shelf_window_watcher.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/ash/shelf/shelf_window_watcher.h b/ash/shelf/shelf_window_watcher.h index 43ac4f0..46c5668 100644 --- a/ash/shelf/shelf_window_watcher.h +++ b/ash/shelf/shelf_window_watcher.h @@ -56,6 +56,25 @@ class ShelfWindowWatcher : public aura::client::ActivationChangeObserver, DISALLOW_COPY_AND_ASSIGN(RootWindowObserver); }; + // Used to track windows that are removed. See description of + // ShelfWindowWatcher::StartObservingRemovedWindow() for more details. + class RemovedWindowObserver : public aura::WindowObserver { + public: + explicit RemovedWindowObserver(ShelfWindowWatcher* window_watcher); + virtual ~RemovedWindowObserver(); + + private: + // aura::WindowObserver overrides: + virtual void OnWindowParentChanged(aura::Window* window, + aura::Window* parent) OVERRIDE; + virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE; + + // Owned by Shell. + ShelfWindowWatcher* window_watcher_; + + DISALLOW_COPY_AND_ASSIGN(RemovedWindowObserver); + }; + // Creates a LauncherItem for |window| that has LauncherItemDetails. void AddLauncherItem(aura::Window* window); @@ -74,6 +93,16 @@ class ShelfWindowWatcher : public aura::client::ActivationChangeObserver, // Returns the index of LauncherItem associated with |window|. int GetLauncherItemIndexForWindow(aura::Window* window) const; + // Used when a window is removed. During the dragging a window may be removed + // and when the drag completes added back. When this happens we don't want to + // remove the shelf item. StartObservingRemovedWindow, if necessary, attaches + // an observer. When done, FinishObservingRemovedWindow() is invoked. + void StartObservingRemovedWindow(aura::Window* window); + + // Stop observing |window| by RemovedWindowObserver and remove an item + // associated with |window|. + void FinishObservingRemovedWindow(aura::Window* window); + // aura::client::ActivationChangeObserver overrides: virtual void OnWindowActivated(aura::Window* gained_active, aura::Window* lost_active) OVERRIDE; @@ -97,12 +126,17 @@ class ShelfWindowWatcher : public aura::client::ActivationChangeObserver, RootWindowObserver root_window_observer_; + RemovedWindowObserver removed_window_observer_; + // Holds all observed windows. ScopedObserver<aura::Window, aura::WindowObserver> observed_windows_; // Holds all observed root windows. ScopedObserver<aura::Window, aura::WindowObserver> observed_root_windows_; + // Holds removed windows that has an item from default container. + ScopedObserver<aura::Window, aura::WindowObserver> observed_removed_windows_; + // Holds all observed activation clients. ScopedObserverWithDuplicatedSources<aura::client::ActivationClient, aura::client::ActivationChangeObserver> observed_activation_clients_; |