// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UI_AURA_SHELL_SHELL_H_ #define UI_AURA_SHELL_SHELL_H_ #pragma once #include #include #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" #include "base/task.h" #include "base/compiler_specific.h" #include "base/memory/weak_ptr.h" #include "ui/aura/client/stacking_client.h" #include "ui/aura_shell/aura_shell_export.h" namespace aura { class Window; } namespace gfx { class Rect; } namespace aura_shell { class Launcher; class ShellDelegate; namespace internal { class ShelfLayoutController; class WorkspaceController; } // Shell is a singleton object that presents the Shell API and implements the // Desktop's delegate interface. class AURA_SHELL_EXPORT Shell : public aura::StackingClient { public: // Upon creation, the Shell sets itself as the Desktop's delegate, which takes // ownership of the Shell. Shell(); virtual ~Shell(); static Shell* GetInstance(); void Init(); // Sets the delegate. Shell owns its delegate. void SetDelegate(ShellDelegate* delegate); ShellDelegate* delegate() { return delegate_.get(); } aura::Window* GetContainer(int container_id); const aura::Window* GetContainer(int container_id) const; // Toggles between overview mode and normal mode. void ToggleOverview(); Launcher* launcher() { return launcher_.get(); } private: typedef std::pair WindowAndBoundsPair; // Enables WorkspaceManager. void EnableWorkspaceManager(); // Overridden from aura::StackingClient: virtual void AddChildToDefaultParent(aura::Window* window) OVERRIDE; virtual aura::Window* GetTopmostWindowToActivate( aura::Window* ignore) const OVERRIDE; static Shell* instance_; std::vector to_restore_; base::WeakPtrFactory method_factory_; scoped_ptr delegate_; scoped_ptr launcher_; scoped_ptr workspace_controller_; scoped_ptr shelf_layout_controller_; DISALLOW_COPY_AND_ASSIGN(Shell); }; } // namespace aura_shell #endif // UI_AURA_SHELL_SHELL_H_