| Index: ash/display/mirror_window_controller.cc
|
| diff --git a/ash/display/mirror_window_controller.cc b/ash/display/mirror_window_controller.cc
|
| index 914eb829b1d1d3b0882fa7a31b3af995a0a6f316..d0f3267722c42d34d9c6d9a261c945df9ea323b1 100644
|
| --- a/ash/display/mirror_window_controller.cc
|
| +++ b/ash/display/mirror_window_controller.cc
|
| @@ -272,18 +272,31 @@ void MirrorWindowController::UpdateWindow() {
|
| if (mirroring_host_info_map_.empty())
|
| return;
|
| display::DisplayManager* display_manager = Shell::Get()->display_manager();
|
| + display::Screen* screen = display::Screen::GetScreen();
|
| +
|
| std::vector<display::ManagedDisplayInfo> display_info_list;
|
| - for (auto& pair : mirroring_host_info_map_)
|
| - display_info_list.push_back(display_manager->GetDisplayInfo(pair.first));
|
| + // Prune the window on the removed displays.
|
| + for (auto& pair : mirroring_host_info_map_) {
|
| + MirroringHostInfo* info = pair.second;
|
| + if (screen
|
| + ->GetDisplayNearestWindow(
|
| + info->ash_host->AsWindowTreeHost()->window())
|
| + .is_valid()) {
|
| + display_info_list.push_back(display_manager->GetDisplayInfo(pair.first));
|
| + }
|
| + }
|
| UpdateWindow(display_info_list);
|
| }
|
|
|
| void MirrorWindowController::CloseIfNotNecessary() {
|
| display::DisplayManager::MultiDisplayMode new_mode =
|
| GetCurrentMultiDisplayMode();
|
| - if (multi_display_mode_ != new_mode)
|
| + if (multi_display_mode_ != new_mode) {
|
| Close(true);
|
| - multi_display_mode_ = new_mode;
|
| + multi_display_mode_ = new_mode;
|
| + } else {
|
| + UpdateWindow();
|
| + }
|
| }
|
|
|
| void MirrorWindowController::Close(bool delay_host_deletion) {
|
|
|