| // Copyright 2014 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 ATHENA_WM_WINDOW_MANAGER_IMPL_H_ |
| #define ATHENA_WM_WINDOW_MANAGER_IMPL_H_ |
| |
| #include "athena/athena_export.h" |
| #include "athena/input/public/accelerator_manager.h" |
| #include "athena/wm/public/window_list_provider_observer.h" |
| #include "athena/wm/public/window_manager.h" |
| #include "athena/wm/title_drag_controller.h" |
| #include "athena/wm/window_overview_mode.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/observer_list.h" |
| #include "ui/aura/window_observer.h" |
| |
| namespace wm { |
| class ShadowController; |
| class WMState; |
| } |
| |
| namespace athena { |
| |
| namespace test { |
| class WindowManagerImplTestApi; |
| } |
| |
| class SplitViewController; |
| class WindowListProviderImpl; |
| class WindowManagerObserver; |
| |
| class ATHENA_EXPORT WindowManagerImpl : public WindowManager, |
| public WindowOverviewModeDelegate, |
| public WindowListProviderObserver, |
| public aura::WindowObserver, |
| public AcceleratorHandler, |
| public TitleDragControllerDelegate { |
| public: |
| WindowManagerImpl(); |
| ~WindowManagerImpl() override; |
| |
| void ToggleSplitView(); |
| |
| // WindowManager: |
| void EnterOverview() override; |
| // Exits overview and activates the previously active activity |
| void ExitOverview() override; |
| bool IsOverviewModeActive() override; |
| |
| private: |
| friend class test::WindowManagerImplTestApi; |
| friend class AthenaContainerLayoutManager; |
| |
| enum Command { |
| CMD_EXIT_OVERVIEW, |
| CMD_TOGGLE_OVERVIEW, |
| CMD_TOGGLE_SPLIT_VIEW, |
| }; |
| |
| const AcceleratorData kEscAcceleratorData = {TRIGGER_ON_PRESS, |
| ui::VKEY_ESCAPE, |
| ui::EF_NONE, |
| CMD_EXIT_OVERVIEW, |
| AF_NONE}; |
| |
| // Exits overview mode without changing activation. The caller should |
| // ensure that a window is active after exiting overview mode. |
| void ExitOverviewNoActivate(); |
| |
| void InstallAccelerators(); |
| |
| // WindowManager: |
| void AddObserver(WindowManagerObserver* observer) override; |
| void RemoveObserver(WindowManagerObserver* observer) override; |
| void ToggleSplitViewForTest() override; |
| WindowListProvider* GetWindowListProvider() override; |
| |
| // WindowOverviewModeDelegate: |
| void OnSelectWindow(aura::Window* window) override; |
| void OnSelectSplitViewWindow(aura::Window* left, |
| aura::Window* right, |
| aura::Window* to_activate) override; |
| |
| // WindowListProviderObserver: |
| void OnWindowStackingChangedInList() override; |
| void OnWindowAddedToList(aura::Window* window) override; |
| void OnWindowRemovedFromList(aura::Window* removed_window, |
| int index) override; |
| |
| // aura::WindowObserver: |
| void OnWindowDestroying(aura::Window* window) override; |
| |
| // AcceleratorHandler: |
| bool IsCommandEnabled(int command_id) const override; |
| bool OnAcceleratorFired(int command_id, |
| const ui::Accelerator& accelerator) override; |
| |
| // TitleDragControllerDelegate: |
| aura::Window* GetWindowBehind(aura::Window* window) override; |
| void OnTitleDragStarted(aura::Window* window) override; |
| void OnTitleDragCompleted(aura::Window* window) override; |
| void OnTitleDragCanceled(aura::Window* window) override; |
| |
| scoped_ptr<aura::Window> container_; |
| scoped_ptr<WindowListProviderImpl> window_list_provider_; |
| scoped_ptr<WindowOverviewMode> overview_; |
| scoped_ptr<SplitViewController> split_view_controller_; |
| scoped_ptr<wm::WMState> wm_state_; |
| scoped_ptr<TitleDragController> title_drag_controller_; |
| scoped_ptr<wm::ShadowController> shadow_controller_; |
| ObserverList<WindowManagerObserver> observers_; |
| |
| DISALLOW_COPY_AND_ASSIGN(WindowManagerImpl); |
| }; |
| |
| } // namespace athena |
| |
| #endif // ATHENA_WM_WINDOW_MANAGER_IMPL_H_ |