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); |
}; |