Chromium Code Reviews| Index: ash/mus/window_manager.cc |
| diff --git a/ash/mus/window_manager.cc b/ash/mus/window_manager.cc |
| index a2cfe7bc506b5b793da965bf13fa1a4eed222bc6..1295ca50553fba17fb225fd0a578d5c3206b9be9 100644 |
| --- a/ash/mus/window_manager.cc |
| +++ b/ash/mus/window_manager.cc |
| @@ -485,7 +485,26 @@ void WindowManager::OnWmDisplayRemoved( |
| } |
| void WindowManager::OnWmDisplayModified(const display::Display& display) { |
| - screen_->display_list().UpdateDisplay(display); |
| + // Ash relies on the Display being updated, then the WindowTreeHost's window, |
| + // and finally DisplayObservers. |
| + std::unique_ptr<display::DisplayListObserverLock> display_lock = |
| + screen_->display_list().SuspendObserverUpdates(); |
| + const bool is_primary = |
| + screen_->display_list().FindDisplayById(display.id()) == |
| + screen_->display_list().GetPrimaryDisplayIterator(); |
| + uint32_t display_changed_values = screen_->display_list().UpdateDisplay( |
| + display, is_primary ? display::DisplayList::Type::PRIMARY |
| + : display::DisplayList::Type::NOT_PRIMARY); |
| + RootWindowController* root_window_controller = |
| + WmShellMus::Get()->GetRootWindowControllerWithDisplayId(display.id()); |
| + DCHECK(root_window_controller); |
| + root_window_controller->GetRootWindow()->GetHost()->SetBoundsInPixels( |
| + display.bounds()); |
| + display_lock.reset(); |
| + for (display::DisplayObserver& observer : |
| + *(screen_->display_list().observers())) { |
| + observer.OnDisplayMetricsChanged(display, display_changed_values); |
| + } |
|
James Cook
2017/03/30 15:34:34
optional: line wrapping in this function might be
sky
2017/03/30 19:04:24
I went with making a local for screen_->display_li
|
| } |
| void WindowManager::OnWmPerformMoveLoop( |