Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "athena/wm/public/window_manager.h" | 5 #include "athena/wm/public/window_manager.h" |
| 6 | 6 |
| 7 #include "athena/input/public/accelerator_manager.h" | 7 #include "athena/input/public/accelerator_manager.h" |
| 8 #include "athena/screen/public/screen_manager.h" | 8 #include "athena/screen/public/screen_manager.h" |
| 9 #include "athena/wm/public/window_manager_observer.h" | 9 #include "athena/wm/public/window_manager_observer.h" |
| 10 #include "athena/wm/window_overview_mode.h" | 10 #include "athena/wm/window_overview_mode.h" |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 21 public WindowOverviewModeDelegate, | 21 public WindowOverviewModeDelegate, |
| 22 public aura::WindowObserver, | 22 public aura::WindowObserver, |
| 23 public AcceleratorHandler { | 23 public AcceleratorHandler { |
| 24 public: | 24 public: |
| 25 WindowManagerImpl(); | 25 WindowManagerImpl(); |
| 26 virtual ~WindowManagerImpl(); | 26 virtual ~WindowManagerImpl(); |
| 27 | 27 |
| 28 void Layout(); | 28 void Layout(); |
| 29 | 29 |
| 30 // WindowManager: | 30 // WindowManager: |
| 31 virtual void ToggleOverview() OVERRIDE { | 31 virtual void ToggleOverview() OVERRIDE; |
| 32 if (overview_) { | |
| 33 overview_.reset(); | |
| 34 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, | |
| 35 OnOverviewModeExit()); | |
| 36 } else { | |
| 37 overview_ = WindowOverviewMode::Create(container_.get(), this); | |
| 38 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, | |
| 39 OnOverviewModeEnter()); | |
| 40 } | |
| 41 } | |
| 42 | 32 |
| 43 private: | 33 private: |
| 44 enum Command { | 34 enum Command { |
| 45 COMMAND_TOGGLE_OVERVIEW, | 35 COMMAND_TOGGLE_OVERVIEW, |
| 46 }; | 36 }; |
| 47 | 37 |
| 48 void InstallAccelerators() { | 38 void InstallAccelerators(); |
| 49 const AcceleratorData accelerator_data[] = { | |
| 50 {TRIGGER_ON_PRESS, ui::VKEY_F6, ui::EF_NONE, COMMAND_TOGGLE_OVERVIEW, | |
| 51 AF_NONE}, | |
| 52 }; | |
| 53 AcceleratorManager::Get()->RegisterAccelerators( | |
| 54 accelerator_data, arraysize(accelerator_data), this); | |
| 55 } | |
| 56 | 39 |
| 57 // WindowManager: | 40 // WindowManager: |
| 58 virtual void AddObserver(WindowManagerObserver* observer) OVERRIDE { | 41 virtual void AddObserver(WindowManagerObserver* observer) OVERRIDE; |
| 59 observers_.AddObserver(observer); | 42 virtual void RemoveObserver(WindowManagerObserver* observer) OVERRIDE; |
| 60 } | |
| 61 | |
| 62 virtual void RemoveObserver(WindowManagerObserver* observer) OVERRIDE { | |
| 63 observers_.RemoveObserver(observer); | |
| 64 } | |
| 65 | 43 |
| 66 // WindowOverviewModeDelegate: | 44 // WindowOverviewModeDelegate: |
| 67 virtual void OnSelectWindow(aura::Window* window) OVERRIDE { | 45 virtual void OnSelectWindow(aura::Window* window) OVERRIDE; |
| 68 CHECK_EQ(container_.get(), window->parent()); | |
| 69 container_->StackChildAtTop(window); | |
| 70 overview_.reset(); | |
| 71 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, | |
| 72 OnOverviewModeExit()); | |
| 73 } | |
| 74 | 46 |
| 75 // aura::WindowObserver | 47 // aura::WindowObserver |
| 76 virtual void OnWindowDestroying(aura::Window* window) OVERRIDE { | 48 virtual void OnWindowDestroying(aura::Window* window) OVERRIDE; |
| 77 if (window == container_) | |
| 78 container_.reset(); | |
| 79 } | |
| 80 | 49 |
| 81 // AcceleratorHandler: | 50 // AcceleratorHandler: |
| 82 virtual bool IsCommandEnabled(int command_id) const OVERRIDE { return true; } | 51 virtual bool IsCommandEnabled(int command_id) const OVERRIDE; |
| 83 virtual bool OnAcceleratorFired(int command_id, | 52 virtual bool OnAcceleratorFired(int command_id, |
| 84 const ui::Accelerator& accelerator) OVERRIDE { | 53 const ui::Accelerator& accelerator) OVERRIDE; |
| 85 switch (command_id) { | |
| 86 case COMMAND_TOGGLE_OVERVIEW: | |
| 87 ToggleOverview(); | |
| 88 break; | |
| 89 } | |
| 90 return true; | |
| 91 } | |
| 92 | 54 |
| 93 scoped_ptr<aura::Window> container_; | 55 scoped_ptr<aura::Window> container_; |
| 94 scoped_ptr<WindowOverviewMode> overview_; | 56 scoped_ptr<WindowOverviewMode> overview_; |
| 95 ObserverList<WindowManagerObserver> observers_; | 57 ObserverList<WindowManagerObserver> observers_; |
| 96 | 58 |
| 97 DISALLOW_COPY_AND_ASSIGN(WindowManagerImpl); | 59 DISALLOW_COPY_AND_ASSIGN(WindowManagerImpl); |
| 98 }; | 60 }; |
| 99 | 61 |
| 100 class WindowManagerImpl* instance = NULL; | 62 class WindowManagerImpl* instance = NULL; |
| 101 | 63 |
| 102 class AthenaContainerLayoutManager : public aura::LayoutManager { | 64 class AthenaContainerLayoutManager : public aura::LayoutManager { |
|
flackr
2014/07/23 02:34:19
Can you move this class so the implementation imme
pkotwicz
2014/07/23 04:25:36
WindowManagerImpl uses AthenaContainerLayoutManage
| |
| 103 public: | 65 public: |
| 104 AthenaContainerLayoutManager() {} | 66 AthenaContainerLayoutManager() {} |
| 105 virtual ~AthenaContainerLayoutManager() {} | 67 virtual ~AthenaContainerLayoutManager() {} |
| 106 | 68 |
| 107 private: | 69 private: |
| 108 // aura::LayoutManager: | 70 // aura::LayoutManager: |
| 109 virtual void OnWindowResized() OVERRIDE { instance->Layout(); } | 71 virtual void OnWindowResized() OVERRIDE { instance->Layout(); } |
| 110 virtual void OnWindowAddedToLayout(aura::Window* child) OVERRIDE { | 72 virtual void OnWindowAddedToLayout(aura::Window* child) OVERRIDE { |
| 111 instance->Layout(); | 73 instance->Layout(); |
| 112 } | 74 } |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 151 const aura::Window::Windows& children = container_->children(); | 113 const aura::Window::Windows& children = container_->children(); |
| 152 for (aura::Window::Windows::const_iterator iter = children.begin(); | 114 for (aura::Window::Windows::const_iterator iter = children.begin(); |
| 153 iter != children.end(); | 115 iter != children.end(); |
| 154 ++iter) { | 116 ++iter) { |
| 155 if ((*iter)->type() == ui::wm::WINDOW_TYPE_NORMAL || | 117 if ((*iter)->type() == ui::wm::WINDOW_TYPE_NORMAL || |
| 156 (*iter)->type() == ui::wm::WINDOW_TYPE_POPUP) | 118 (*iter)->type() == ui::wm::WINDOW_TYPE_POPUP) |
| 157 (*iter)->SetBounds(bounds); | 119 (*iter)->SetBounds(bounds); |
| 158 } | 120 } |
| 159 } | 121 } |
| 160 | 122 |
| 123 void WindowManagerImpl::ToggleOverview() { | |
| 124 if (overview_) { | |
| 125 overview_.reset(); | |
| 126 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, | |
| 127 OnOverviewModeExit()); | |
| 128 } else { | |
| 129 overview_ = WindowOverviewMode::Create(container_.get(), this); | |
| 130 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, | |
| 131 OnOverviewModeEnter()); | |
| 132 } | |
| 133 } | |
| 134 | |
| 135 void WindowManagerImpl::InstallAccelerators() { | |
| 136 const AcceleratorData accelerator_data[] = { | |
| 137 {TRIGGER_ON_PRESS, ui::VKEY_F6, ui::EF_NONE, COMMAND_TOGGLE_OVERVIEW, | |
| 138 AF_NONE}, | |
| 139 }; | |
| 140 AcceleratorManager::Get()->RegisterAccelerators( | |
| 141 accelerator_data, arraysize(accelerator_data), this); | |
| 142 } | |
| 143 | |
| 144 void WindowManagerImpl::AddObserver(WindowManagerObserver* observer) { | |
| 145 observers_.AddObserver(observer); | |
| 146 } | |
| 147 | |
| 148 void WindowManagerImpl::RemoveObserver(WindowManagerObserver* observer) { | |
| 149 observers_.RemoveObserver(observer); | |
| 150 } | |
| 151 | |
| 152 void WindowManagerImpl::OnSelectWindow(aura::Window* window) { | |
| 153 CHECK_EQ(container_.get(), window->parent()); | |
| 154 container_->StackChildAtTop(window); | |
| 155 overview_.reset(); | |
| 156 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, | |
| 157 OnOverviewModeExit()); | |
| 158 } | |
| 159 | |
| 160 void WindowManagerImpl::OnWindowDestroying(aura::Window* window) { | |
| 161 if (window == container_) | |
| 162 container_.reset(); | |
| 163 } | |
| 164 | |
| 165 bool WindowManagerImpl::IsCommandEnabled(int command_id) const { | |
| 166 return true; | |
| 167 } | |
| 168 | |
| 169 bool WindowManagerImpl::OnAcceleratorFired(int command_id, | |
| 170 const ui::Accelerator& accelerator) { | |
| 171 switch (command_id) { | |
| 172 case COMMAND_TOGGLE_OVERVIEW: | |
| 173 ToggleOverview(); | |
| 174 break; | |
| 175 } | |
| 176 return true; | |
| 177 } | |
| 178 | |
| 161 } // namespace | 179 } // namespace |
| 162 | 180 |
| 163 // static | 181 // static |
| 164 WindowManager* WindowManager::Create() { | 182 WindowManager* WindowManager::Create() { |
| 165 DCHECK(!instance); | 183 DCHECK(!instance); |
| 166 new WindowManagerImpl; | 184 new WindowManagerImpl; |
| 167 DCHECK(instance); | 185 DCHECK(instance); |
| 168 return instance; | 186 return instance; |
| 169 } | 187 } |
| 170 | 188 |
| 171 // static | 189 // static |
| 172 void WindowManager::Shutdown() { | 190 void WindowManager::Shutdown() { |
| 173 DCHECK(instance); | 191 DCHECK(instance); |
| 174 delete instance; | 192 delete instance; |
| 175 DCHECK(!instance); | 193 DCHECK(!instance); |
| 176 } | 194 } |
| 177 | 195 |
| 178 // static | 196 // static |
| 179 WindowManager* WindowManager::GetInstance() { | 197 WindowManager* WindowManager::GetInstance() { |
| 180 DCHECK(instance); | 198 DCHECK(instance); |
| 181 return instance; | 199 return instance; |
| 182 } | 200 } |
| 183 | 201 |
| 184 } // namespace athena | 202 } // namespace athena |
| OLD | NEW |