124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Copyright (c) 2012 The Chromium Authors. All rights reserved.
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Use of this source code is governed by a BSD-style license that can be
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// found in the LICENSE file.
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef ASH_SHELL_WINDOW_WATCHER_H_
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define ASH_SHELL_WINDOW_WATCHER_H_
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <map>
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "ash/shelf/shelf_item_types.h"
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "base/compiler_specific.h"
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "base/logging.h"
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "base/memory/scoped_ptr.h"
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "ui/aura/window_observer.h"
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "ui/gfx/display_observer.h"
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace aura {
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Window;
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace ash {
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace shell {
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// TODO(sky): fix this class, its a bit broke with workspace2.
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// WindowWatcher is responsible for listening for newly created windows and
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// creating items on the Shelf for them.
280e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Claytonclass WindowWatcher : public aura::WindowObserver,
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                      public gfx::DisplayObserver {
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public:
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  WindowWatcher();
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  virtual ~WindowWatcher();
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  aura::Window* GetWindowByID(ash::ShelfID id);
35188091899842b140313b54e097f16efbe165c998Greg Clayton
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  // aura::WindowObserver overrides:
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  virtual void OnWindowAdded(aura::Window* new_window) OVERRIDE;
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  virtual void OnWillRemoveWindow(aura::Window* window) OVERRIDE;
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
403508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton  // gfx::DisplayObserver overrides:
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  virtual void OnDisplayAdded(const gfx::Display& new_display) OVERRIDE;
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  virtual void OnDisplayRemoved(const gfx::Display& old_display) OVERRIDE;
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  virtual void OnDisplayMetricsChanged(const gfx::Display& display,
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                       uint32_t metrics) OVERRIDE;
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner private:
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  class WorkspaceWindowWatcher;
480e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  typedef std::map<ash::ShelfID, aura::Window*> IDToWindow;
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  // Maps from window to the id we gave it.
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  IDToWindow id_to_window_;
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  scoped_ptr<WorkspaceWindowWatcher> workspace_window_watcher_;
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  DISALLOW_COPY_AND_ASSIGN(WindowWatcher);
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
59}  // namespace shell
60}  // namespace ash
61
62#endif  // ASH_SHELL_WINDOW_WATCHER_H_
63