OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "ash/display/window_tree_host_manager.h" | 5 #include "ash/display/window_tree_host_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 #include <map> | 9 #include <map> |
10 #include <memory> | 10 #include <memory> |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 int64_t primary_id = display::Screen::GetScreen()->GetPrimaryDisplay().id(); | 266 int64_t primary_id = display::Screen::GetScreen()->GetPrimaryDisplay().id(); |
267 | 267 |
268 // Delete non primary root window controllers first, then | 268 // Delete non primary root window controllers first, then |
269 // delete the primary root window controller. | 269 // delete the primary root window controller. |
270 aura::Window::Windows root_windows = | 270 aura::Window::Windows root_windows = |
271 WindowTreeHostManager::GetAllRootWindows(); | 271 WindowTreeHostManager::GetAllRootWindows(); |
272 std::vector<RootWindowController*> to_delete; | 272 std::vector<RootWindowController*> to_delete; |
273 RootWindowController* primary_rwc = nullptr; | 273 RootWindowController* primary_rwc = nullptr; |
274 for (aura::Window::Windows::iterator iter = root_windows.begin(); | 274 for (aura::Window::Windows::iterator iter = root_windows.begin(); |
275 iter != root_windows.end(); ++iter) { | 275 iter != root_windows.end(); ++iter) { |
276 RootWindowController* rwc = GetRootWindowController(*iter); | 276 RootWindowController* rwc = RootWindowController::ForWindow(*iter); |
277 if (GetRootWindowSettings(*iter)->display_id == primary_id) | 277 if (GetRootWindowSettings(*iter)->display_id == primary_id) |
278 primary_rwc = rwc; | 278 primary_rwc = rwc; |
279 else | 279 else |
280 to_delete.push_back(rwc); | 280 to_delete.push_back(rwc); |
281 } | 281 } |
282 CHECK(primary_rwc); | 282 CHECK(primary_rwc); |
283 | 283 |
284 for (auto* rwc : to_delete) | 284 for (auto* rwc : to_delete) |
285 delete rwc; | 285 delete rwc; |
286 delete primary_rwc; | 286 delete primary_rwc; |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
343 int64_t display_id) { | 343 int64_t display_id) { |
344 const auto host = window_tree_hosts_.find(display_id); | 344 const auto host = window_tree_hosts_.find(display_id); |
345 return host == window_tree_hosts_.end() ? nullptr : host->second; | 345 return host == window_tree_hosts_.end() ? nullptr : host->second; |
346 } | 346 } |
347 | 347 |
348 aura::Window::Windows WindowTreeHostManager::GetAllRootWindows() { | 348 aura::Window::Windows WindowTreeHostManager::GetAllRootWindows() { |
349 aura::Window::Windows windows; | 349 aura::Window::Windows windows; |
350 for (WindowTreeHostMap::const_iterator it = window_tree_hosts_.begin(); | 350 for (WindowTreeHostMap::const_iterator it = window_tree_hosts_.begin(); |
351 it != window_tree_hosts_.end(); ++it) { | 351 it != window_tree_hosts_.end(); ++it) { |
352 DCHECK(it->second); | 352 DCHECK(it->second); |
353 if (GetRootWindowController(GetWindow(it->second))) | 353 if (RootWindowController::ForWindow(GetWindow(it->second))) |
354 windows.push_back(GetWindow(it->second)); | 354 windows.push_back(GetWindow(it->second)); |
355 } | 355 } |
356 return windows; | 356 return windows; |
357 } | 357 } |
358 | 358 |
359 gfx::Insets WindowTreeHostManager::GetOverscanInsets(int64_t display_id) const { | 359 gfx::Insets WindowTreeHostManager::GetOverscanInsets(int64_t display_id) const { |
360 return GetDisplayManager()->GetOverscanInsets(display_id); | 360 return GetDisplayManager()->GetOverscanInsets(display_id); |
361 } | 361 } |
362 | 362 |
363 void WindowTreeHostManager::SetOverscanInsets( | 363 void WindowTreeHostManager::SetOverscanInsets( |
364 int64_t display_id, | 364 int64_t display_id, |
365 const gfx::Insets& insets_in_dip) { | 365 const gfx::Insets& insets_in_dip) { |
366 GetDisplayManager()->SetOverscanInsets(display_id, insets_in_dip); | 366 GetDisplayManager()->SetOverscanInsets(display_id, insets_in_dip); |
367 } | 367 } |
368 | 368 |
369 std::vector<RootWindowController*> | 369 std::vector<RootWindowController*> |
370 WindowTreeHostManager::GetAllRootWindowControllers() { | 370 WindowTreeHostManager::GetAllRootWindowControllers() { |
371 std::vector<RootWindowController*> controllers; | 371 std::vector<RootWindowController*> controllers; |
372 for (WindowTreeHostMap::const_iterator it = window_tree_hosts_.begin(); | 372 for (WindowTreeHostMap::const_iterator it = window_tree_hosts_.begin(); |
373 it != window_tree_hosts_.end(); ++it) { | 373 it != window_tree_hosts_.end(); ++it) { |
374 RootWindowController* controller = | 374 RootWindowController* controller = |
375 GetRootWindowController(GetWindow(it->second)); | 375 RootWindowController::ForWindow(GetWindow(it->second)); |
376 if (controller) | 376 if (controller) |
377 controllers.push_back(controller); | 377 controllers.push_back(controller); |
378 } | 378 } |
379 return controllers; | 379 return controllers; |
380 } | 380 } |
381 | 381 |
382 void WindowTreeHostManager::SetPrimaryDisplayId(int64_t id) { | 382 void WindowTreeHostManager::SetPrimaryDisplayId(int64_t id) { |
383 // TODO(oshima): Move primary display management to DisplayManager. | 383 // TODO(oshima): Move primary display management to DisplayManager. |
384 DCHECK_NE(display::kInvalidDisplayId, id); | 384 DCHECK_NE(display::kInvalidDisplayId, id); |
385 if (id == display::kInvalidDisplayId || primary_display_id == id || | 385 if (id == display::kInvalidDisplayId || primary_display_id == id || |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
576 ->partial_magnification_controller() | 576 ->partial_magnification_controller() |
577 ->SwitchTargetRootWindowIfNeeded( | 577 ->SwitchTargetRootWindowIfNeeded( |
578 ash_host->AsWindowTreeHost()->window()); | 578 ash_host->AsWindowTreeHost()->window()); |
579 | 579 |
580 AshWindowTreeHost* to_delete = primary_tree_host_for_replace_; | 580 AshWindowTreeHost* to_delete = primary_tree_host_for_replace_; |
581 primary_tree_host_for_replace_ = nullptr; | 581 primary_tree_host_for_replace_ = nullptr; |
582 | 582 |
583 // Show the shelf if the original WTH had a visible system | 583 // Show the shelf if the original WTH had a visible system |
584 // tray. It may or may not be visible depending on OOBE state. | 584 // tray. It may or may not be visible depending on OOBE state. |
585 ash::SystemTray* old_tray = | 585 ash::SystemTray* old_tray = |
586 GetRootWindowController(to_delete->AsWindowTreeHost()->window()) | 586 RootWindowController::ForWindow(to_delete->AsWindowTreeHost()->window()) |
587 ->GetSystemTray(); | 587 ->GetSystemTray(); |
588 ash::SystemTray* new_tray = ash::Shell::Get()->GetPrimarySystemTray(); | 588 ash::SystemTray* new_tray = ash::Shell::Get()->GetPrimarySystemTray(); |
589 if (old_tray->GetWidget()->IsVisible()) { | 589 if (old_tray->GetWidget()->IsVisible()) { |
590 new_tray->SetVisible(true); | 590 new_tray->SetVisible(true); |
591 new_tray->GetWidget()->Show(); | 591 new_tray->GetWidget()->Show(); |
592 } | 592 } |
593 | 593 |
594 DeleteHost(to_delete); | 594 DeleteHost(to_delete); |
595 #ifndef NDEBUG | 595 #ifndef NDEBUG |
596 auto iter = std::find_if( | 596 auto iter = std::find_if( |
(...skipping 26 matching lines...) Expand all Loading... |
623 DCHECK(!window_tree_hosts_.empty()); | 623 DCHECK(!window_tree_hosts_.empty()); |
624 AshWindowTreeHost* ash_host = | 624 AshWindowTreeHost* ash_host = |
625 AddWindowTreeHostForDisplay(display, AshWindowTreeHostInitParams()); | 625 AddWindowTreeHostForDisplay(display, AshWindowTreeHostInitParams()); |
626 RootWindowController::CreateForSecondaryDisplay(ash_host); | 626 RootWindowController::CreateForSecondaryDisplay(ash_host); |
627 } | 627 } |
628 } | 628 } |
629 | 629 |
630 void WindowTreeHostManager::DeleteHost(AshWindowTreeHost* host_to_delete) { | 630 void WindowTreeHostManager::DeleteHost(AshWindowTreeHost* host_to_delete) { |
631 ClearDisplayPropertiesOnHost(host_to_delete); | 631 ClearDisplayPropertiesOnHost(host_to_delete); |
632 RootWindowController* controller = | 632 RootWindowController* controller = |
633 GetRootWindowController(GetWindow(host_to_delete)); | 633 RootWindowController::ForWindow(GetWindow(host_to_delete)); |
634 DCHECK(controller); | 634 DCHECK(controller); |
635 controller->MoveWindowsTo(GetPrimaryRootWindow()); | 635 controller->MoveWindowsTo(GetPrimaryRootWindow()); |
636 // Delete most of root window related objects, but don't delete | 636 // Delete most of root window related objects, but don't delete |
637 // root window itself yet because the stack may be using it. | 637 // root window itself yet because the stack may be using it. |
638 controller->Shutdown(); | 638 controller->Shutdown(); |
639 if (primary_tree_host_for_replace_ == host_to_delete) | 639 if (primary_tree_host_for_replace_ == host_to_delete) |
640 primary_tree_host_for_replace_ = nullptr; | 640 primary_tree_host_for_replace_ = nullptr; |
641 base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, controller); | 641 base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, controller); |
642 } | 642 } |
643 | 643 |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
857 | 857 |
858 window_tree_hosts_[display.id()] = ash_host; | 858 window_tree_hosts_[display.id()] = ash_host; |
859 SetDisplayPropertiesOnHost(ash_host, display); | 859 SetDisplayPropertiesOnHost(ash_host, display); |
860 | 860 |
861 if (switches::ConstrainPointerToRoot()) | 861 if (switches::ConstrainPointerToRoot()) |
862 ash_host->ConfineCursorToRootWindow(); | 862 ash_host->ConfineCursorToRootWindow(); |
863 return ash_host; | 863 return ash_host; |
864 } | 864 } |
865 | 865 |
866 } // namespace ash | 866 } // namespace ash |
OLD | NEW |