| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/mirror_window_controller.h" | 5 #include "ash/display/mirror_window_controller.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #if defined(USE_X11) | 9 #if defined(USE_X11) |
| 10 #include <X11/extensions/XInput2.h> | 10 #include <X11/extensions/XInput2.h> |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 ++iter; | 265 ++iter; |
| 266 } | 266 } |
| 267 } | 267 } |
| 268 } | 268 } |
| 269 } | 269 } |
| 270 | 270 |
| 271 void MirrorWindowController::UpdateWindow() { | 271 void MirrorWindowController::UpdateWindow() { |
| 272 if (mirroring_host_info_map_.empty()) | 272 if (mirroring_host_info_map_.empty()) |
| 273 return; | 273 return; |
| 274 display::DisplayManager* display_manager = Shell::Get()->display_manager(); | 274 display::DisplayManager* display_manager = Shell::Get()->display_manager(); |
| 275 display::Screen* screen = display::Screen::GetScreen(); |
| 276 |
| 275 std::vector<display::ManagedDisplayInfo> display_info_list; | 277 std::vector<display::ManagedDisplayInfo> display_info_list; |
| 276 for (auto& pair : mirroring_host_info_map_) | 278 // Prune the window on the removed displays. |
| 277 display_info_list.push_back(display_manager->GetDisplayInfo(pair.first)); | 279 for (auto& pair : mirroring_host_info_map_) { |
| 280 MirroringHostInfo* info = pair.second; |
| 281 if (screen |
| 282 ->GetDisplayNearestWindow( |
| 283 info->ash_host->AsWindowTreeHost()->window()) |
| 284 .is_valid()) { |
| 285 display_info_list.push_back(display_manager->GetDisplayInfo(pair.first)); |
| 286 } |
| 287 } |
| 278 UpdateWindow(display_info_list); | 288 UpdateWindow(display_info_list); |
| 279 } | 289 } |
| 280 | 290 |
| 281 void MirrorWindowController::CloseIfNotNecessary() { | 291 void MirrorWindowController::CloseIfNotNecessary() { |
| 282 display::DisplayManager::MultiDisplayMode new_mode = | 292 display::DisplayManager::MultiDisplayMode new_mode = |
| 283 GetCurrentMultiDisplayMode(); | 293 GetCurrentMultiDisplayMode(); |
| 284 if (multi_display_mode_ != new_mode) | 294 if (multi_display_mode_ != new_mode) { |
| 285 Close(true); | 295 Close(true); |
| 286 multi_display_mode_ = new_mode; | 296 multi_display_mode_ = new_mode; |
| 297 } else { |
| 298 UpdateWindow(); |
| 299 } |
| 287 } | 300 } |
| 288 | 301 |
| 289 void MirrorWindowController::Close(bool delay_host_deletion) { | 302 void MirrorWindowController::Close(bool delay_host_deletion) { |
| 290 for (auto& info : mirroring_host_info_map_) | 303 for (auto& info : mirroring_host_info_map_) |
| 291 CloseAndDeleteHost(info.second, delay_host_deletion); | 304 CloseAndDeleteHost(info.second, delay_host_deletion); |
| 292 | 305 |
| 293 mirroring_host_info_map_.clear(); | 306 mirroring_host_info_map_.clear(); |
| 294 if (reflector_) { | 307 if (reflector_) { |
| 295 aura::Env::GetInstance()->context_factory_private()->RemoveReflector( | 308 aura::Env::GetInstance()->context_factory_private()->RemoveReflector( |
| 296 reflector_.get()); | 309 reflector_.get()); |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 384 // EventProcessor may be accessed after this call if the mirroring window | 397 // EventProcessor may be accessed after this call if the mirroring window |
| 385 // was deleted as a result of input event (e.g. shortcut), so don't delete | 398 // was deleted as a result of input event (e.g. shortcut), so don't delete |
| 386 // now. | 399 // now. |
| 387 if (delay_host_deletion) | 400 if (delay_host_deletion) |
| 388 base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, host_info); | 401 base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, host_info); |
| 389 else | 402 else |
| 390 delete host_info; | 403 delete host_info; |
| 391 } | 404 } |
| 392 | 405 |
| 393 } // namespace ash | 406 } // namespace ash |
| OLD | NEW |