| 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/window_manager_impl.h" | 5 #include "athena/wm/window_manager_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "athena/common/container_priorities.h" | 9 #include "athena/common/container_priorities.h" |
| 10 #include "athena/screen/public/screen_manager.h" | 10 #include "athena/screen/public/screen_manager.h" |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 overview_.reset(); | 185 overview_.reset(); |
| 186 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, | 186 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, |
| 187 OnOverviewModeExit()); | 187 OnOverviewModeExit()); |
| 188 } | 188 } |
| 189 } | 189 } |
| 190 | 190 |
| 191 void WindowManagerImpl::InstallAccelerators() { | 191 void WindowManagerImpl::InstallAccelerators() { |
| 192 const AcceleratorData accelerator_data[] = { | 192 const AcceleratorData accelerator_data[] = { |
| 193 {TRIGGER_ON_PRESS, ui::VKEY_F6, ui::EF_NONE, CMD_TOGGLE_OVERVIEW, | 193 {TRIGGER_ON_PRESS, ui::VKEY_F6, ui::EF_NONE, CMD_TOGGLE_OVERVIEW, |
| 194 AF_NONE}, | 194 AF_NONE}, |
| 195 {TRIGGER_ON_PRESS, ui::VKEY_F6, ui::EF_CONTROL_DOWN, |
| 196 CMD_TOGGLE_SPLIT_VIEW, AF_NONE}, |
| 195 }; | 197 }; |
| 196 AcceleratorManager::Get()->RegisterAccelerators( | 198 AcceleratorManager::Get()->RegisterAccelerators( |
| 197 accelerator_data, arraysize(accelerator_data), this); | 199 accelerator_data, arraysize(accelerator_data), this); |
| 198 } | 200 } |
| 199 | 201 |
| 200 void WindowManagerImpl::AddObserver(WindowManagerObserver* observer) { | 202 void WindowManagerImpl::AddObserver(WindowManagerObserver* observer) { |
| 201 observers_.AddObserver(observer); | 203 observers_.AddObserver(observer); |
| 202 } | 204 } |
| 203 | 205 |
| 204 void WindowManagerImpl::RemoveObserver(WindowManagerObserver* observer) { | 206 void WindowManagerImpl::RemoveObserver(WindowManagerObserver* observer) { |
| 205 observers_.RemoveObserver(observer); | 207 observers_.RemoveObserver(observer); |
| 206 } | 208 } |
| 207 | 209 |
| 208 void WindowManagerImpl::OnSelectWindow(aura::Window* window) { | 210 void WindowManagerImpl::OnSelectWindow(aura::Window* window) { |
| 209 wm::ActivateWindow(window); | 211 wm::ActivateWindow(window); |
| 210 SetInOverview(false); | 212 SetInOverview(false); |
| 211 } | 213 } |
| 212 | 214 |
| 213 void WindowManagerImpl::OnSplitViewMode(aura::Window* left, | 215 void WindowManagerImpl::OnSplitViewMode(aura::Window* left, |
| 214 aura::Window* right) { | 216 aura::Window* right) { |
| 215 SetInOverview(false); | 217 SetInOverview(false); |
| 216 split_view_controller_->ActivateSplitMode(left, right); | 218 split_view_controller_->ActivateSplitMode(left, right); |
| 217 } | 219 } |
| 218 | 220 |
| 219 void WindowManagerImpl::OnWindowAdded(aura::Window* new_window) { | 221 void WindowManagerImpl::OnWindowAdded(aura::Window* new_window) { |
| 222 // TODO(oshima): Creating a new window should updates the ovewview mode |
| 223 // instead of exitting. |
| 220 if (new_window->type() == ui::wm::WINDOW_TYPE_NORMAL) | 224 if (new_window->type() == ui::wm::WINDOW_TYPE_NORMAL) |
| 221 SetInOverview(false); | 225 SetInOverview(false); |
| 222 } | 226 } |
| 223 | 227 |
| 224 void WindowManagerImpl::OnWindowDestroying(aura::Window* window) { | 228 void WindowManagerImpl::OnWindowDestroying(aura::Window* window) { |
| 225 if (window == container_) | 229 if (window == container_) |
| 226 container_.reset(); | 230 container_.reset(); |
| 227 } | 231 } |
| 228 | 232 |
| 229 bool WindowManagerImpl::IsCommandEnabled(int command_id) const { | 233 bool WindowManagerImpl::IsCommandEnabled(int command_id) const { |
| 230 return true; | 234 return true; |
| 231 } | 235 } |
| 232 | 236 |
| 233 bool WindowManagerImpl::OnAcceleratorFired(int command_id, | 237 bool WindowManagerImpl::OnAcceleratorFired(int command_id, |
| 234 const ui::Accelerator& accelerator) { | 238 const ui::Accelerator& accelerator) { |
| 235 switch (command_id) { | 239 switch (command_id) { |
| 236 case CMD_TOGGLE_OVERVIEW: | 240 case CMD_TOGGLE_OVERVIEW: |
| 237 ToggleOverview(); | 241 ToggleOverview(); |
| 238 break; | 242 break; |
| 243 case CMD_TOGGLE_SPLIT_VIEW: |
| 244 ToggleSplitview(); |
| 245 break; |
| 239 } | 246 } |
| 240 return true; | 247 return true; |
| 241 } | 248 } |
| 242 | 249 |
| 250 void WindowManagerImpl::ToggleSplitview() { |
| 251 // TODO(oshima): Figure out what to do. |
| 252 if (IsOverviewModeActive()) |
| 253 return; |
| 254 |
| 255 if (split_view_controller_->IsSplitViewModeActive()) { |
| 256 split_view_controller_->DeactivateSplitMode(); |
| 257 // Relayout so that windows are maximzied. |
| 258 container_->layout_manager()->OnWindowResized(); |
| 259 } else if (window_list_provider_->GetWindowList().size() > 1) { |
| 260 split_view_controller_->ActivateSplitMode(NULL, NULL); |
| 261 } |
| 262 } |
| 263 |
| 243 aura::Window* WindowManagerImpl::GetWindowBehind(aura::Window* window) { | 264 aura::Window* WindowManagerImpl::GetWindowBehind(aura::Window* window) { |
| 244 const aura::Window::Windows& windows = window_list_provider_->GetWindowList(); | 265 const aura::Window::Windows& windows = window_list_provider_->GetWindowList(); |
| 245 aura::Window::Windows::const_reverse_iterator iter = | 266 aura::Window::Windows::const_reverse_iterator iter = |
| 246 std::find(windows.rbegin(), windows.rend(), window); | 267 std::find(windows.rbegin(), windows.rend(), window); |
| 247 CHECK(iter != windows.rend()); | 268 CHECK(iter != windows.rend()); |
| 248 ++iter; | 269 ++iter; |
| 249 aura::Window* behind = NULL; | 270 aura::Window* behind = NULL; |
| 250 if (iter != windows.rend()) | 271 if (iter != windows.rend()) |
| 251 behind = *iter++; | 272 behind = *iter++; |
| 252 | 273 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 DCHECK(!instance); | 331 DCHECK(!instance); |
| 311 } | 332 } |
| 312 | 333 |
| 313 // static | 334 // static |
| 314 WindowManager* WindowManager::GetInstance() { | 335 WindowManager* WindowManager::GetInstance() { |
| 315 DCHECK(instance); | 336 DCHECK(instance); |
| 316 return instance; | 337 return instance; |
| 317 } | 338 } |
| 318 | 339 |
| 319 } // namespace athena | 340 } // namespace athena |
| OLD | NEW |