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/shell.h" | 5 #include "ash/shell.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "ash/common/gpu_support.h" | 21 #include "ash/common/gpu_support.h" |
22 #include "ash/common/keyboard/keyboard_ui.h" | 22 #include "ash/common/keyboard/keyboard_ui.h" |
23 #include "ash/common/login_status.h" | 23 #include "ash/common/login_status.h" |
24 #include "ash/common/session/session_state_delegate.h" | 24 #include "ash/common/session/session_state_delegate.h" |
25 #include "ash/common/shelf/app_list_shelf_item_delegate.h" | 25 #include "ash/common/shelf/app_list_shelf_item_delegate.h" |
26 #include "ash/common/shelf/shelf_delegate.h" | 26 #include "ash/common/shelf/shelf_delegate.h" |
27 #include "ash/common/shelf/shelf_item_delegate.h" | 27 #include "ash/common/shelf/shelf_item_delegate.h" |
28 #include "ash/common/shelf/shelf_model.h" | 28 #include "ash/common/shelf/shelf_model.h" |
29 #include "ash/common/shelf/wm_shelf.h" | 29 #include "ash/common/shelf/wm_shelf.h" |
30 #include "ash/common/shell_delegate.h" | 30 #include "ash/common/shell_delegate.h" |
| 31 #include "ash/common/shell_observer.h" |
31 #include "ash/common/system/chromeos/bluetooth/bluetooth_notification_controller
.h" | 32 #include "ash/common/system/chromeos/bluetooth/bluetooth_notification_controller
.h" |
32 #include "ash/common/system/chromeos/network/sms_observer.h" | 33 #include "ash/common/system/chromeos/network/sms_observer.h" |
33 #include "ash/common/system/chromeos/power/power_status.h" | 34 #include "ash/common/system/chromeos/power/power_status.h" |
34 #include "ash/common/system/status_area_widget.h" | 35 #include "ash/common/system/status_area_widget.h" |
35 #include "ash/common/system/tray/system_tray_delegate.h" | 36 #include "ash/common/system/tray/system_tray_delegate.h" |
36 #include "ash/common/wallpaper/wallpaper_delegate.h" | 37 #include "ash/common/wallpaper/wallpaper_delegate.h" |
37 #include "ash/common/wm/container_finder.h" | 38 #include "ash/common/wm/container_finder.h" |
38 #include "ash/common/wm/maximize_mode/maximize_mode_controller.h" | 39 #include "ash/common/wm/maximize_mode/maximize_mode_controller.h" |
39 #include "ash/common/wm/maximize_mode/maximize_mode_window_manager.h" | 40 #include "ash/common/wm/maximize_mode/maximize_mode_window_manager.h" |
40 #include "ash/common/wm/mru_window_tracker.h" | 41 #include "ash/common/wm/mru_window_tracker.h" |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 // Use translucent-style window frames for dialogs. | 284 // Use translucent-style window frames for dialogs. |
284 return new CustomFrameViewAsh(widget); | 285 return new CustomFrameViewAsh(widget); |
285 } | 286 } |
286 | 287 |
287 void Shell::SetDisplayWorkAreaInsets(Window* contains, | 288 void Shell::SetDisplayWorkAreaInsets(Window* contains, |
288 const gfx::Insets& insets) { | 289 const gfx::Insets& insets) { |
289 wm_shell_->SetDisplayWorkAreaInsets(WmWindow::Get(contains), insets); | 290 wm_shell_->SetDisplayWorkAreaInsets(WmWindow::Get(contains), insets); |
290 } | 291 } |
291 | 292 |
292 void Shell::OnLoginStateChanged(LoginStatus status) { | 293 void Shell::OnLoginStateChanged(LoginStatus status) { |
293 for (auto& observer : *wm_shell_->shell_observers()) | 294 for (auto& observer : shell_observers_) |
294 observer.OnLoginStateChanged(status); | 295 observer.OnLoginStateChanged(status); |
295 } | 296 } |
296 | 297 |
297 void Shell::OnAppTerminating() { | 298 void Shell::OnAppTerminating() { |
298 for (auto& observer : *wm_shell_->shell_observers()) | 299 for (auto& observer : shell_observers_) |
299 observer.OnAppTerminating(); | 300 observer.OnAppTerminating(); |
300 } | 301 } |
301 | 302 |
302 void Shell::OnLockStateChanged(bool locked) { | 303 void Shell::OnLockStateChanged(bool locked) { |
303 for (auto& observer : *wm_shell_->shell_observers()) | 304 for (auto& observer : shell_observers_) |
304 observer.OnLockStateChanged(locked); | 305 observer.OnLockStateChanged(locked); |
305 #ifndef NDEBUG | 306 #ifndef NDEBUG |
306 // Make sure that there is no system modal in Lock layer when unlocked. | 307 // Make sure that there is no system modal in Lock layer when unlocked. |
307 if (!locked) { | 308 if (!locked) { |
308 std::vector<WmWindow*> containers = wm::GetContainersFromAllRootWindows( | 309 std::vector<WmWindow*> containers = wm::GetContainersFromAllRootWindows( |
309 kShellWindowId_LockSystemModalContainer, | 310 kShellWindowId_LockSystemModalContainer, |
310 WmWindow::Get(GetPrimaryRootWindow())); | 311 WmWindow::Get(GetPrimaryRootWindow())); |
311 for (WmWindow* container : containers) | 312 for (WmWindow* container : containers) |
312 DCHECK(container->GetChildren().empty()); | 313 DCHECK(container->GetChildren().empty()); |
313 } | 314 } |
314 #endif | 315 #endif |
315 } | 316 } |
316 | 317 |
317 void Shell::OnCastingSessionStartedOrStopped(bool started) { | 318 void Shell::OnCastingSessionStartedOrStopped(bool started) { |
318 for (auto& observer : *wm_shell_->shell_observers()) | 319 for (auto& observer : shell_observers_) |
319 observer.OnCastingSessionStartedOrStopped(started); | 320 observer.OnCastingSessionStartedOrStopped(started); |
320 } | 321 } |
321 | 322 |
322 void Shell::OnRootWindowAdded(WmWindow* root_window) { | 323 void Shell::OnRootWindowAdded(WmWindow* root_window) { |
323 for (auto& observer : *wm_shell_->shell_observers()) | 324 for (auto& observer : shell_observers_) |
324 observer.OnRootWindowAdded(root_window); | 325 observer.OnRootWindowAdded(root_window); |
325 } | 326 } |
326 | 327 |
327 void Shell::CreateKeyboard() { | 328 void Shell::CreateKeyboard() { |
328 InitKeyboard(); | 329 InitKeyboard(); |
329 GetPrimaryRootWindowController()->ActivateKeyboard( | 330 GetPrimaryRootWindowController()->ActivateKeyboard( |
330 keyboard::KeyboardController::GetInstance()); | 331 keyboard::KeyboardController::GetInstance()); |
331 } | 332 } |
332 | 333 |
333 void Shell::DeactivateKeyboard() { | 334 void Shell::DeactivateKeyboard() { |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
371 | 372 |
372 SystemTray* Shell::GetPrimarySystemTray() { | 373 SystemTray* Shell::GetPrimarySystemTray() { |
373 return GetPrimaryRootWindowController()->GetSystemTray(); | 374 return GetPrimaryRootWindowController()->GetSystemTray(); |
374 } | 375 } |
375 | 376 |
376 void Shell::SetTouchHudProjectionEnabled(bool enabled) { | 377 void Shell::SetTouchHudProjectionEnabled(bool enabled) { |
377 if (is_touch_hud_projection_enabled_ == enabled) | 378 if (is_touch_hud_projection_enabled_ == enabled) |
378 return; | 379 return; |
379 | 380 |
380 is_touch_hud_projection_enabled_ = enabled; | 381 is_touch_hud_projection_enabled_ = enabled; |
381 for (auto& observer : *wm_shell_->shell_observers()) | 382 for (auto& observer : shell_observers_) |
382 observer.OnTouchHudProjectionToggled(enabled); | 383 observer.OnTouchHudProjectionToggled(enabled); |
383 } | 384 } |
384 | 385 |
385 FirstRunHelper* Shell::CreateFirstRunHelper() { | 386 FirstRunHelper* Shell::CreateFirstRunHelper() { |
386 return new FirstRunHelperImpl; | 387 return new FirstRunHelperImpl; |
387 } | 388 } |
388 | 389 |
389 void Shell::SetLargeCursorSizeInDip(int large_cursor_size_in_dip) { | 390 void Shell::SetLargeCursorSizeInDip(int large_cursor_size_in_dip) { |
390 window_tree_host_manager_->cursor_window_controller() | 391 window_tree_host_manager_->cursor_window_controller() |
391 ->SetLargeCursorSizeInDip(large_cursor_size_in_dip); | 392 ->SetLargeCursorSizeInDip(large_cursor_size_in_dip); |
392 } | 393 } |
393 | 394 |
394 void Shell::SetCursorCompositingEnabled(bool enabled) { | 395 void Shell::SetCursorCompositingEnabled(bool enabled) { |
395 window_tree_host_manager_->cursor_window_controller() | 396 window_tree_host_manager_->cursor_window_controller() |
396 ->SetCursorCompositingEnabled(enabled); | 397 ->SetCursorCompositingEnabled(enabled); |
397 native_cursor_manager_->SetNativeCursorEnabled(!enabled); | 398 native_cursor_manager_->SetNativeCursorEnabled(!enabled); |
398 } | 399 } |
399 | 400 |
400 void Shell::DoInitialWorkspaceAnimation() { | 401 void Shell::DoInitialWorkspaceAnimation() { |
401 return GetPrimaryRootWindowController() | 402 return GetPrimaryRootWindowController() |
402 ->workspace_controller() | 403 ->workspace_controller() |
403 ->DoInitialAnimation(); | 404 ->DoInitialAnimation(); |
404 } | 405 } |
405 | 406 |
| 407 void Shell::AddShellObserver(ShellObserver* observer) { |
| 408 shell_observers_.AddObserver(observer); |
| 409 } |
| 410 |
| 411 void Shell::RemoveShellObserver(ShellObserver* observer) { |
| 412 shell_observers_.RemoveObserver(observer); |
| 413 } |
| 414 |
| 415 void Shell::NotifyMaximizeModeStarted() { |
| 416 for (auto& observer : shell_observers_) |
| 417 observer.OnMaximizeModeStarted(); |
| 418 } |
| 419 |
| 420 void Shell::NotifyMaximizeModeEnding() { |
| 421 for (auto& observer : shell_observers_) |
| 422 observer.OnMaximizeModeEnding(); |
| 423 } |
| 424 |
| 425 void Shell::NotifyMaximizeModeEnded() { |
| 426 for (auto& observer : shell_observers_) |
| 427 observer.OnMaximizeModeEnded(); |
| 428 } |
| 429 |
| 430 void Shell::NotifyOverviewModeStarting() { |
| 431 for (auto& observer : shell_observers_) |
| 432 observer.OnOverviewModeStarting(); |
| 433 } |
| 434 |
| 435 void Shell::NotifyOverviewModeEnded() { |
| 436 for (auto& observer : shell_observers_) |
| 437 observer.OnOverviewModeEnded(); |
| 438 } |
| 439 |
| 440 void Shell::NotifyFullscreenStateChanged(bool is_fullscreen, |
| 441 WmWindow* root_window) { |
| 442 for (auto& observer : shell_observers_) |
| 443 observer.OnFullscreenStateChanged(is_fullscreen, root_window); |
| 444 } |
| 445 |
| 446 void Shell::NotifyPinnedStateChanged(WmWindow* pinned_window) { |
| 447 for (auto& observer : shell_observers_) |
| 448 observer.OnPinnedStateChanged(pinned_window); |
| 449 } |
| 450 |
| 451 void Shell::NotifyVirtualKeyboardActivated(bool activated) { |
| 452 for (auto& observer : shell_observers_) |
| 453 observer.OnVirtualKeyboardStateChanged(activated); |
| 454 } |
| 455 |
| 456 void Shell::NotifyShelfCreatedForRootWindow(WmWindow* root_window) { |
| 457 for (auto& observer : shell_observers_) |
| 458 observer.OnShelfCreatedForRootWindow(root_window); |
| 459 } |
| 460 |
| 461 void Shell::NotifyShelfAlignmentChanged(WmWindow* root_window) { |
| 462 for (auto& observer : shell_observers_) |
| 463 observer.OnShelfAlignmentChanged(root_window); |
| 464 } |
| 465 |
| 466 void Shell::NotifyShelfAutoHideBehaviorChanged(WmWindow* root_window) { |
| 467 for (auto& observer : shell_observers_) |
| 468 observer.OnShelfAutoHideBehaviorChanged(root_window); |
| 469 } |
| 470 |
406 //////////////////////////////////////////////////////////////////////////////// | 471 //////////////////////////////////////////////////////////////////////////////// |
407 // Shell, private: | 472 // Shell, private: |
408 | 473 |
409 Shell::Shell(std::unique_ptr<WmShell> wm_shell) | 474 Shell::Shell(std::unique_ptr<WmShell> wm_shell) |
410 : wm_shell_(std::move(wm_shell)), | 475 : wm_shell_(std::move(wm_shell)), |
411 link_handler_model_factory_(nullptr), | 476 link_handler_model_factory_(nullptr), |
412 display_configurator_(new display::DisplayConfigurator()), | 477 display_configurator_(new display::DisplayConfigurator()), |
413 native_cursor_manager_(nullptr), | 478 native_cursor_manager_(nullptr), |
414 simulate_modal_window_open_for_testing_(false), | 479 simulate_modal_window_open_for_testing_(false), |
415 is_touch_hud_projection_enabled_(false) { | 480 is_touch_hud_projection_enabled_(false) { |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
564 | 629 |
565 keyboard::KeyboardController::ResetInstance(nullptr); | 630 keyboard::KeyboardController::ResetInstance(nullptr); |
566 | 631 |
567 display_color_manager_.reset(); | 632 display_color_manager_.reset(); |
568 if (display_change_observer_) | 633 if (display_change_observer_) |
569 display_configurator_->RemoveObserver(display_change_observer_.get()); | 634 display_configurator_->RemoveObserver(display_change_observer_.get()); |
570 if (display_error_observer_) | 635 if (display_error_observer_) |
571 display_configurator_->RemoveObserver(display_error_observer_.get()); | 636 display_configurator_->RemoveObserver(display_error_observer_.get()); |
572 if (projecting_observer_) { | 637 if (projecting_observer_) { |
573 display_configurator_->RemoveObserver(projecting_observer_.get()); | 638 display_configurator_->RemoveObserver(projecting_observer_.get()); |
574 wm_shell_->RemoveShellObserver(projecting_observer_.get()); | 639 RemoveShellObserver(projecting_observer_.get()); |
575 } | 640 } |
576 display_change_observer_.reset(); | 641 display_change_observer_.reset(); |
577 shutdown_observer_.reset(); | 642 shutdown_observer_.reset(); |
578 | 643 |
579 PowerStatus::Shutdown(); | 644 PowerStatus::Shutdown(); |
580 | 645 |
581 // Ensure that DBusThreadManager outlives this Shell. | 646 // Ensure that DBusThreadManager outlives this Shell. |
582 DCHECK(chromeos::DBusThreadManager::IsInitialized()); | 647 DCHECK(chromeos::DBusThreadManager::IsInitialized()); |
583 | 648 |
584 // Needs to happen right before |instance_| is reset. | 649 // Needs to happen right before |instance_| is reset. |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
628 !gpu_support_->IsPanelFittingDisabled()); | 693 !gpu_support_->IsPanelFittingDisabled()); |
629 #endif | 694 #endif |
630 } | 695 } |
631 | 696 |
632 // The DBusThreadManager must outlive this Shell. See the DCHECK in ~Shell. | 697 // The DBusThreadManager must outlive this Shell. See the DCHECK in ~Shell. |
633 chromeos::DBusThreadManager* dbus_thread_manager = | 698 chromeos::DBusThreadManager* dbus_thread_manager = |
634 chromeos::DBusThreadManager::Get(); | 699 chromeos::DBusThreadManager::Get(); |
635 projecting_observer_.reset( | 700 projecting_observer_.reset( |
636 new ProjectingObserver(dbus_thread_manager->GetPowerManagerClient())); | 701 new ProjectingObserver(dbus_thread_manager->GetPowerManagerClient())); |
637 display_configurator_->AddObserver(projecting_observer_.get()); | 702 display_configurator_->AddObserver(projecting_observer_.get()); |
638 wm_shell_->AddShellObserver(projecting_observer_.get()); | 703 AddShellObserver(projecting_observer_.get()); |
639 | 704 |
640 if (!display_initialized && chromeos::IsRunningAsSystemCompositor()) { | 705 if (!display_initialized && chromeos::IsRunningAsSystemCompositor()) { |
641 display_change_observer_ = base::MakeUnique<display::DisplayChangeObserver>( | 706 display_change_observer_ = base::MakeUnique<display::DisplayChangeObserver>( |
642 display_configurator_.get(), display_manager_.get()); | 707 display_configurator_.get(), display_manager_.get()); |
643 | 708 |
644 shutdown_observer_ = | 709 shutdown_observer_ = |
645 base::MakeUnique<ShutdownObserver>(display_configurator_.get()); | 710 base::MakeUnique<ShutdownObserver>(display_configurator_.get()); |
646 | 711 |
647 // Register |display_change_observer_| first so that the rest of | 712 // Register |display_change_observer_| first so that the rest of |
648 // observer gets invoked after the root windows are configured. | 713 // observer gets invoked after the root windows are configured. |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
720 AddPreTargetHandler(speech_feedback_handler_.get()); | 785 AddPreTargetHandler(speech_feedback_handler_.get()); |
721 | 786 |
722 // The order in which event filters are added is significant. | 787 // The order in which event filters are added is significant. |
723 | 788 |
724 // ui::UserActivityDetector passes events to observers, so let them get | 789 // ui::UserActivityDetector passes events to observers, so let them get |
725 // rewritten first. | 790 // rewritten first. |
726 user_activity_detector_.reset(new ui::UserActivityDetector); | 791 user_activity_detector_.reset(new ui::UserActivityDetector); |
727 | 792 |
728 overlay_filter_.reset(new OverlayEventFilter); | 793 overlay_filter_.reset(new OverlayEventFilter); |
729 AddPreTargetHandler(overlay_filter_.get()); | 794 AddPreTargetHandler(overlay_filter_.get()); |
730 wm_shell_->AddShellObserver(overlay_filter_.get()); | 795 AddShellObserver(overlay_filter_.get()); |
731 | 796 |
732 accelerator_filter_.reset(new ::wm::AcceleratorFilter( | 797 accelerator_filter_.reset(new ::wm::AcceleratorFilter( |
733 std::unique_ptr<::wm::AcceleratorDelegate>(new AcceleratorDelegate), | 798 std::unique_ptr<::wm::AcceleratorDelegate>(new AcceleratorDelegate), |
734 wm_shell_->accelerator_controller()->accelerator_history())); | 799 wm_shell_->accelerator_controller()->accelerator_history())); |
735 AddPreTargetHandler(accelerator_filter_.get()); | 800 AddPreTargetHandler(accelerator_filter_.get()); |
736 | 801 |
737 event_transformation_handler_.reset(new EventTransformationHandler); | 802 event_transformation_handler_.reset(new EventTransformationHandler); |
738 AddPreTargetHandler(event_transformation_handler_.get()); | 803 AddPreTargetHandler(event_transformation_handler_.get()); |
739 | 804 |
740 toplevel_window_event_handler_.reset( | 805 toplevel_window_event_handler_.reset( |
(...skipping 11 matching lines...) Expand all Loading... |
752 } | 817 } |
753 | 818 |
754 lock_state_controller_ = | 819 lock_state_controller_ = |
755 base::MakeUnique<LockStateController>(wm_shell_->shutdown_controller()); | 820 base::MakeUnique<LockStateController>(wm_shell_->shutdown_controller()); |
756 power_button_controller_.reset( | 821 power_button_controller_.reset( |
757 new PowerButtonController(lock_state_controller_.get())); | 822 new PowerButtonController(lock_state_controller_.get())); |
758 // Pass the initial display state to PowerButtonController. | 823 // Pass the initial display state to PowerButtonController. |
759 power_button_controller_->OnDisplayModeChanged( | 824 power_button_controller_->OnDisplayModeChanged( |
760 display_configurator_->cached_displays()); | 825 display_configurator_->cached_displays()); |
761 | 826 |
762 wm_shell_->AddShellObserver(lock_state_controller_.get()); | 827 AddShellObserver(lock_state_controller_.get()); |
763 | 828 |
764 // The connector is unavailable in some tests. | 829 // The connector is unavailable in some tests. |
765 if (is_mash && wm_shell_->delegate()->GetShellConnector()) { | 830 if (is_mash && wm_shell_->delegate()->GetShellConnector()) { |
766 ui::mojom::UserActivityMonitorPtr user_activity_monitor; | 831 ui::mojom::UserActivityMonitorPtr user_activity_monitor; |
767 wm_shell_->delegate()->GetShellConnector()->BindInterface( | 832 wm_shell_->delegate()->GetShellConnector()->BindInterface( |
768 ui::mojom::kServiceName, &user_activity_monitor); | 833 ui::mojom::kServiceName, &user_activity_monitor); |
769 user_activity_forwarder_ = base::MakeUnique<aura::UserActivityForwarder>( | 834 user_activity_forwarder_ = base::MakeUnique<aura::UserActivityForwarder>( |
770 std::move(user_activity_monitor), user_activity_detector_.get()); | 835 std::move(user_activity_monitor), user_activity_detector_.get()); |
771 } | 836 } |
772 | 837 |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
861 screen_layout_observer_.reset(new ScreenLayoutObserver()); | 926 screen_layout_observer_.reset(new ScreenLayoutObserver()); |
862 } | 927 } |
863 sms_observer_.reset(new SmsObserver()); | 928 sms_observer_.reset(new SmsObserver()); |
864 | 929 |
865 // The compositor thread and main message loop have to be running in | 930 // The compositor thread and main message loop have to be running in |
866 // order to create mirror window. Run it after the main message loop | 931 // order to create mirror window. Run it after the main message loop |
867 // is started. | 932 // is started. |
868 if (!is_mash) | 933 if (!is_mash) |
869 display_manager_->CreateMirrorWindowAsyncIfAny(); | 934 display_manager_->CreateMirrorWindowAsyncIfAny(); |
870 | 935 |
871 for (auto& observer : *wm_shell_->shell_observers()) | 936 for (auto& observer : shell_observers_) |
872 observer.OnShellInitialized(); | 937 observer.OnShellInitialized(); |
873 | 938 |
874 if (!is_mash) | 939 if (!is_mash) |
875 user_metrics_recorder_->OnShellInitialized(); | 940 user_metrics_recorder_->OnShellInitialized(); |
876 } | 941 } |
877 | 942 |
878 void Shell::InitKeyboard() { | 943 void Shell::InitKeyboard() { |
879 if (keyboard::IsKeyboardEnabled()) { | 944 if (keyboard::IsKeyboardEnabled()) { |
880 if (keyboard::KeyboardController::GetInstance()) { | 945 if (keyboard::KeyboardController::GetInstance()) { |
881 RootWindowControllerList controllers = GetAllRootWindowControllers(); | 946 RootWindowControllerList controllers = GetAllRootWindowControllers(); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
961 void Shell::OnWindowActivated( | 1026 void Shell::OnWindowActivated( |
962 aura::client::ActivationChangeObserver::ActivationReason reason, | 1027 aura::client::ActivationChangeObserver::ActivationReason reason, |
963 aura::Window* gained_active, | 1028 aura::Window* gained_active, |
964 aura::Window* lost_active) { | 1029 aura::Window* lost_active) { |
965 WmWindow* gained_active_wm = WmWindow::Get(gained_active); | 1030 WmWindow* gained_active_wm = WmWindow::Get(gained_active); |
966 if (gained_active_wm) | 1031 if (gained_active_wm) |
967 root_window_for_new_windows_ = gained_active_wm->GetRootWindow(); | 1032 root_window_for_new_windows_ = gained_active_wm->GetRootWindow(); |
968 } | 1033 } |
969 | 1034 |
970 } // namespace ash | 1035 } // namespace ash |
OLD | NEW |