Chromium Code Reviews| Index: ash/shelf/shelf_window_watcher.h |
| diff --git a/ash/shelf/shelf_window_watcher.h b/ash/shelf/shelf_window_watcher.h |
| index cf11ba5cb6b7d1dd3e0ebbca2f4c7205de7ba849..365d7db7788a552cc95e08c693f3b964f6a0516f 100644 |
| --- a/ash/shelf/shelf_window_watcher.h |
| +++ b/ash/shelf/shelf_window_watcher.h |
| @@ -5,115 +5,92 @@ |
| #ifndef ASH_SHELF_SHELF_WINDOW_WATCHER_H_ |
| #define ASH_SHELF_SHELF_WINDOW_WATCHER_H_ |
| -#include <stdint.h> |
| - |
| +#include "ash/common/wm_activation_observer.h" |
| +#include "ash/common/wm_window_observer.h" |
| #include "base/macros.h" |
| #include "base/scoped_observer.h" |
| -#include "ui/aura/window_observer.h" |
| #include "ui/display/display_observer.h" |
| -#include "ui/wm/public/activation_change_observer.h" |
| - |
| -namespace aura { |
| - |
| -class Window; |
| - |
| -namespace client { |
| -class ActivationClient; |
| -} |
| - |
| -} // namespace aura |
| namespace ash { |
| class ShelfModel; |
| class WmWindow; |
| -// ShelfWindowWatcher creates and handles a ShelfItem for windows that have |
| -// a ShelfItemDetails property in the default container. |
| -class ShelfWindowWatcher : public aura::client::ActivationChangeObserver, |
| - public aura::WindowObserver, |
| +// ShelfWindowWatcher creates and handles a ShelfItem for windows in the default |
| +// container that have a ShelfItemDetails property (e.g. the task manager |
| +// dialog or the OS settings window). It adds the ShelfItem when the window is |
| +// added to the default container and maintains it until the window is closed, |
| +// even if the window is transiently reparented (e.g. during a drag). |
| +class ShelfWindowWatcher : public WmActivationObserver, |
| public display::DisplayObserver { |
| public: |
| explicit ShelfWindowWatcher(ShelfModel* model); |
| ~ShelfWindowWatcher() override; |
| private: |
| - class RootWindowObserver : public aura::WindowObserver { |
| + // Observes for windows being added to a root window's default container. |
| + class ContainerWindowObserver : public WmWindowObserver { |
| public: |
| - explicit RootWindowObserver(ShelfWindowWatcher* window_watcher); |
| - ~RootWindowObserver() override; |
| + explicit ContainerWindowObserver(ShelfWindowWatcher* window_watcher); |
| + ~ContainerWindowObserver() override; |
| private: |
| - // aura::WindowObserver overrides: |
| - void OnWindowDestroying(aura::Window* window) override; |
| + // WmWindowObserver: |
| + void OnWindowTreeChanged(WmWindow* window, |
| + const TreeChangeParams& params) override; |
| + void OnWindowDestroying(WmWindow* window) override; |
| - // Owned by Shell. |
| ShelfWindowWatcher* window_watcher_; |
| - DISALLOW_COPY_AND_ASSIGN(RootWindowObserver); |
| + DISALLOW_COPY_AND_ASSIGN(ContainerWindowObserver); |
| }; |
| - // Used to track windows that are removed. See description of |
| - // ShelfWindowWatcher::StartObservingRemovedWindow() for more details. |
| - class RemovedWindowObserver : public aura::WindowObserver { |
| + // Observes individual user windows to detect when they are closed or when |
| + // they have ShelfItemDetails changed. |
| + class UserWindowObserver : public WmWindowObserver { |
| public: |
| - explicit RemovedWindowObserver(ShelfWindowWatcher* window_watcher); |
| - ~RemovedWindowObserver() override; |
| + explicit UserWindowObserver(ShelfWindowWatcher* window_watcher); |
| + ~UserWindowObserver() override; |
| private: |
| - // aura::WindowObserver overrides: |
| - void OnWindowParentChanged(aura::Window* window, |
| - aura::Window* parent) override; |
| - void OnWindowDestroyed(aura::Window* window) override; |
| + // WmWindowObserver: |
| + void OnWindowPropertyChanged(WmWindow* window, |
| + WmWindowProperty property) override; |
| + void OnWindowDestroying(WmWindow* window) override; |
| - // Owned by Shell. |
| ShelfWindowWatcher* window_watcher_; |
| - DISALLOW_COPY_AND_ASSIGN(RemovedWindowObserver); |
| + DISALLOW_COPY_AND_ASSIGN(UserWindowObserver); |
| }; |
| // Creates a ShelfItem for |window| that has ShelfItemDetails. |
| - void AddShelfItem(aura::Window* window); |
| + void AddShelfItem(WmWindow* window); |
| // Removes a ShelfItem for |window|. |
| - void RemoveShelfItem(aura::Window* window); |
| - |
| - // Adds observer to default container and ActivationClient of |
| - // |root_window_wm|. |
| - void OnRootWindowAdded(WmWindow* root_window_wm); |
| - |
| - // Removes observer from ActivationClient of |root_window|. |
| - void OnRootWindowRemoved(aura::Window* root_window); |
| + void RemoveShelfItem(WmWindow* window); |
| // Updates the status of ShelfItem for |window|. |
| - void UpdateShelfItemStatus(aura::Window* window, bool is_active); |
| + void UpdateShelfItemStatus(WmWindow* window, bool is_active); |
| // Returns the index of ShelfItem associated with |window|. |
| - int GetShelfItemIndexForWindow(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: |
| - void OnWindowActivated( |
| - aura::client::ActivationChangeObserver::ActivationReason reason, |
| - aura::Window* gained_active, |
| - aura::Window* lost_active) override; |
| - |
| - // aura::WindowObserver overrides: |
| - void OnWindowAdded(aura::Window* window) override; |
| - void OnWillRemoveWindow(aura::Window* window) override; |
| - void OnWindowDestroying(aura::Window* window) override; |
| - void OnWindowPropertyChanged(aura::Window* window, |
| - const void* key, |
| - intptr_t old) override; |
| + int GetShelfItemIndexForWindow(WmWindow* window) const; |
| + |
| + // Cleans up observers on |container|. |
| + void OnContainerWindowDestroying(WmWindow* container); |
| + |
| + // Adds a shelf item for new windows with a ShelfItemDetails property that |
|
msw
2016/07/27 18:36:10
nit: "Adds a shelf item for new windows added to t
James Cook
2016/07/27 20:14:06
Done.
|
| + // are added to the default container. |
| + void OnUserWindowAdded(WmWindow* window); |
| + |
| + // Adds, updates or removes the shelf item based on a property change. |
| + void OnUserWindowShelfItemDetailsChanged(WmWindow* window); |
| + |
| + // Removes the shelf item when a window closes. |
| + void OnUserWindowDestroying(WmWindow* window); |
| + |
| + // WmActivationObserver: |
| + void OnWindowActivated(WmWindow* gained_active, |
| + WmWindow* lost_active) override; |
| // display::DisplayObserver overrides: |
| void OnDisplayAdded(const display::Display& display) override; |
| @@ -121,21 +98,13 @@ class ShelfWindowWatcher : public aura::client::ActivationChangeObserver, |
| void OnDisplayMetricsChanged(const display::Display& display, |
| uint32_t metrics) override; |
| - // Owned by Shell. |
| ShelfModel* model_; |
| - 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_; |
| + ContainerWindowObserver container_window_observer_; |
| + UserWindowObserver user_window_observer_; |
| - // Holds removed windows that has an item from default container. |
| - ScopedObserver<aura::Window, aura::WindowObserver> observed_removed_windows_; |
| + ScopedObserver<WmWindow, ContainerWindowObserver> observed_container_windows_; |
| + ScopedObserver<WmWindow, UserWindowObserver> observed_user_windows_; |
| DISALLOW_COPY_AND_ASSIGN(ShelfWindowWatcher); |
| }; |