Chromium Code Reviews| Index: ash/display/display_controller.cc |
| diff --git a/ash/display/display_controller.cc b/ash/display/display_controller.cc |
| index 4fb77b8f7cf314f6006101954daf39a30e45b4bb..173b2b7f9cf769ec529bb233e6b85a4ec3885638 100644 |
| --- a/ash/display/display_controller.cc |
| +++ b/ash/display/display_controller.cc |
| @@ -25,6 +25,7 @@ |
| #include "ash/shell_delegate.h" |
| #include "ash/wm/coordinate_conversion.h" |
| #include "base/command_line.h" |
| +#include "base/stl_util.h" |
| #include "base/strings/stringprintf.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "ui/aura/client/capture_client.h" |
| @@ -266,17 +267,27 @@ void DisplayController::Shutdown() { |
| virtual_keyboard_window_controller_.reset(); |
| Shell::GetScreen()->RemoveObserver(this); |
| - // Delete all root window controllers, which deletes root window |
| - // from the last so that the primary root window gets deleted last. |
|
oshima
2014/08/30 00:50:36
This comment was wrong, although deleting primary
|
| - for (WindowTreeHostMap::const_reverse_iterator it = |
| - window_tree_hosts_.rbegin(); |
| - it != window_tree_hosts_.rend(); |
| - ++it) { |
| - RootWindowController* controller = |
| - GetRootWindowController(GetWindow(it->second)); |
| - DCHECK(controller); |
| - delete controller; |
| + |
| + int64 primary_id = Shell::GetScreen()->GetPrimaryDisplay().id(); |
| + |
| + // Delete non primary root window controllers first, then |
| + // delete the primary root window controller. |
| + aura::Window::Windows root_windows = DisplayController::GetAllRootWindows(); |
| + std::vector<RootWindowController*> to_delete; |
| + RootWindowController* primary_rwc = NULL; |
| + for (aura::Window::Windows::iterator iter = root_windows.begin(); |
| + iter != root_windows.end(); |
| + ++iter) { |
| + RootWindowController* rwc = GetRootWindowController(*iter); |
| + if (GetRootWindowSettings(*iter)->display_id == primary_id) |
| + primary_rwc = rwc; |
| + else |
| + to_delete.push_back(rwc); |
| } |
| + CHECK(primary_rwc); |
| + |
| + STLDeleteElements(&to_delete); |
| + delete primary_rwc; |
| } |
| void DisplayController::CreatePrimaryHost( |
| @@ -325,7 +336,7 @@ aura::Window* DisplayController::GetPrimaryRootWindow() { |
| } |
| aura::Window* DisplayController::GetRootWindowForDisplayId(int64 id) { |
| - DCHECK_EQ(1u, window_tree_hosts_.count(id)); |
| + CHECK_EQ(1u, window_tree_hosts_.count(id)); |
|
oshima
2014/08/30 00:50:36
I changed to CHECK to catch the error early in rel
|
| AshWindowTreeHost* host = window_tree_hosts_[id]; |
| CHECK(host); |
| return GetWindow(host); |