Chromium Code Reviews| 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/root_window_controller.h" | 5 #include "ash/root_window_controller.h" |
| 6 | 6 |
| 7 #include <queue> | 7 #include <queue> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "ash/ash_constants.h" | 10 #include "ash/ash_constants.h" |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 21 #include "ash/shelf/shelf_layout_manager.h" | 21 #include "ash/shelf/shelf_layout_manager.h" |
| 22 #include "ash/shelf/shelf_types.h" | 22 #include "ash/shelf/shelf_types.h" |
| 23 #include "ash/shelf/shelf_widget.h" | 23 #include "ash/shelf/shelf_widget.h" |
| 24 #include "ash/shell.h" | 24 #include "ash/shell.h" |
| 25 #include "ash/shell_delegate.h" | 25 #include "ash/shell_delegate.h" |
| 26 #include "ash/shell_factory.h" | 26 #include "ash/shell_factory.h" |
| 27 #include "ash/shell_window_ids.h" | 27 #include "ash/shell_window_ids.h" |
| 28 #include "ash/switchable_windows.h" | 28 #include "ash/switchable_windows.h" |
| 29 #include "ash/system/status_area_widget.h" | 29 #include "ash/system/status_area_widget.h" |
| 30 #include "ash/system/tray/system_tray_delegate.h" | 30 #include "ash/system/tray/system_tray_delegate.h" |
| 31 #include "ash/system/tray/system_tray_notifier.h" | |
| 31 #include "ash/touch/touch_hud_debug.h" | 32 #include "ash/touch/touch_hud_debug.h" |
| 32 #include "ash/touch/touch_hud_projection.h" | 33 #include "ash/touch/touch_hud_projection.h" |
| 33 #include "ash/touch/touch_observer_hud.h" | 34 #include "ash/touch/touch_observer_hud.h" |
| 34 #include "ash/wm/always_on_top_controller.h" | 35 #include "ash/wm/always_on_top_controller.h" |
| 35 #include "ash/wm/dock/docked_window_layout_manager.h" | 36 #include "ash/wm/dock/docked_window_layout_manager.h" |
| 36 #include "ash/wm/panels/attached_panel_window_targeter.h" | 37 #include "ash/wm/panels/attached_panel_window_targeter.h" |
| 37 #include "ash/wm/panels/panel_layout_manager.h" | 38 #include "ash/wm/panels/panel_layout_manager.h" |
| 38 #include "ash/wm/panels/panel_window_event_handler.h" | 39 #include "ash/wm/panels/panel_window_event_handler.h" |
| 39 #include "ash/wm/root_window_layout_manager.h" | 40 #include "ash/wm/root_window_layout_manager.h" |
| 40 #include "ash/wm/screen_dimmer.h" | 41 #include "ash/wm/screen_dimmer.h" |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 68 #include "ui/wm/core/capture_controller.h" | 69 #include "ui/wm/core/capture_controller.h" |
| 69 #include "ui/wm/core/easy_resize_window_targeter.h" | 70 #include "ui/wm/core/easy_resize_window_targeter.h" |
| 70 #include "ui/wm/core/visibility_controller.h" | 71 #include "ui/wm/core/visibility_controller.h" |
| 71 #include "ui/wm/core/window_util.h" | 72 #include "ui/wm/core/window_util.h" |
| 72 #include "ui/wm/public/drag_drop_client.h" | 73 #include "ui/wm/public/drag_drop_client.h" |
| 73 #include "ui/wm/public/tooltip_client.h" | 74 #include "ui/wm/public/tooltip_client.h" |
| 74 #include "ui/wm/public/window_types.h" | 75 #include "ui/wm/public/window_types.h" |
| 75 | 76 |
| 76 #if defined(OS_CHROMEOS) | 77 #if defined(OS_CHROMEOS) |
| 77 #include "ash/wm/boot_splash_screen_chromeos.h" | 78 #include "ash/wm/boot_splash_screen_chromeos.h" |
| 79 #include "ui/chromeos/touch_exploration_controller.h" | |
| 78 #endif | 80 #endif |
| 79 | 81 |
| 80 namespace ash { | 82 namespace ash { |
| 81 namespace { | 83 namespace { |
| 82 | 84 |
| 83 #if defined(OS_CHROMEOS) | 85 #if defined(OS_CHROMEOS) |
| 84 // Duration for the animation that hides the boot splash screen, in | 86 // Duration for the animation that hides the boot splash screen, in |
| 85 // milliseconds. This should be short enough in relation to | 87 // milliseconds. This should be short enough in relation to |
| 86 // wm/window_animation.cc's brightness/grayscale fade animation that the login | 88 // wm/window_animation.cc's brightness/grayscale fade animation that the login |
| 87 // background image animation isn't hidden by the splash screen animation. | 89 // background image animation isn't hidden by the splash screen animation. |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 332 } | 334 } |
| 333 | 335 |
| 334 void RootWindowController::SetAnimatingWallpaperController( | 336 void RootWindowController::SetAnimatingWallpaperController( |
| 335 AnimatingDesktopController* controller) { | 337 AnimatingDesktopController* controller) { |
| 336 if (animating_wallpaper_controller_.get()) | 338 if (animating_wallpaper_controller_.get()) |
| 337 animating_wallpaper_controller_->StopAnimating(); | 339 animating_wallpaper_controller_->StopAnimating(); |
| 338 animating_wallpaper_controller_.reset(controller); | 340 animating_wallpaper_controller_.reset(controller); |
| 339 } | 341 } |
| 340 | 342 |
| 341 void RootWindowController::Shutdown() { | 343 void RootWindowController::Shutdown() { |
| 342 Shell::GetInstance()->RemoveShellObserver(this); | 344 Shell* shell = Shell::GetInstance(); |
| 345 shell->RemoveShellObserver(this); | |
| 346 | |
| 347 #if defined(OS_CHROMEOS) | |
| 348 if (!CommandLine::ForCurrentProcess()->HasSwitch( | |
| 349 switches::kAshDisableTouchExplorationMode)) { | |
|
sadrul
2014/04/30 18:51:15
We should land with the feature disabled-by-defaul
| |
| 350 if (shell->system_tray_notifier()) | |
| 351 shell->system_tray_notifier()->RemoveAccessibilityObserver(this); | |
| 352 touch_exploration_controller_.reset(); | |
| 353 } | |
| 354 #endif | |
| 343 | 355 |
| 344 if (animating_wallpaper_controller_.get()) | 356 if (animating_wallpaper_controller_.get()) |
| 345 animating_wallpaper_controller_->StopAnimating(); | 357 animating_wallpaper_controller_->StopAnimating(); |
| 346 wallpaper_controller_.reset(); | 358 wallpaper_controller_.reset(); |
| 347 animating_wallpaper_controller_.reset(); | 359 animating_wallpaper_controller_.reset(); |
| 348 aura::Window* root_window = GetRootWindow(); | 360 aura::Window* root_window = GetRootWindow(); |
| 349 // Change the target root window before closing child windows. If any child | 361 // Change the target root window before closing child windows. If any child |
| 350 // being removed triggers a relayout of the shelf it will try to build a | 362 // being removed triggers a relayout of the shelf it will try to build a |
| 351 // window list adding windows from the target root window's containers which | 363 // window list adding windows from the target root window's containers which |
| 352 // may have already gone away. | 364 // may have already gone away. |
| 353 if (Shell::GetTargetRootWindow() == root_window) { | 365 if (Shell::GetTargetRootWindow() == root_window) { |
| 354 Shell::GetInstance()->set_target_root_window( | 366 shell->set_target_root_window( |
| 355 Shell::GetPrimaryRootWindow() == root_window | 367 Shell::GetPrimaryRootWindow() == root_window |
| 356 ? NULL | 368 ? NULL |
| 357 : Shell::GetPrimaryRootWindow()); | 369 : Shell::GetPrimaryRootWindow()); |
| 358 } | 370 } |
| 359 | 371 |
| 360 CloseChildWindows(); | 372 CloseChildWindows(); |
| 361 GetRootWindowSettings(root_window)->controller = NULL; | 373 GetRootWindowSettings(root_window)->controller = NULL; |
| 362 screen_dimmer_.reset(); | 374 screen_dimmer_.reset(); |
| 363 workspace_controller_.reset(); | 375 workspace_controller_.reset(); |
| 364 // Forget with the display ID so that display lookup | 376 // Forget with the display ID so that display lookup |
| (...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 729 root_window_layout()->OnWindowResized(); | 741 root_window_layout()->OnWindowResized(); |
| 730 ash_host_->AsWindowTreeHost()->Show(); | 742 ash_host_->AsWindowTreeHost()->Show(); |
| 731 | 743 |
| 732 // Create a shelf if a user is already logged in. | 744 // Create a shelf if a user is already logged in. |
| 733 if (shell->session_state_delegate()->NumberOfLoggedInUsers()) | 745 if (shell->session_state_delegate()->NumberOfLoggedInUsers()) |
| 734 shelf()->CreateShelf(); | 746 shelf()->CreateShelf(); |
| 735 | 747 |
| 736 // Notify shell observers about new root window. | 748 // Notify shell observers about new root window. |
| 737 shell->OnRootWindowAdded(root_window); | 749 shell->OnRootWindowAdded(root_window); |
| 738 } | 750 } |
| 751 | |
| 752 #if defined(OS_CHROMEOS) | |
| 753 if (!CommandLine::ForCurrentProcess()->HasSwitch( | |
| 754 switches::kAshDisableTouchExplorationMode)) { | |
| 755 Shell::GetInstance()->system_tray_notifier()-> | |
| 756 AddAccessibilityObserver(this); | |
| 757 UpdateTouchExplorationState(); | |
| 758 } | |
| 759 #endif | |
| 739 } | 760 } |
| 740 | 761 |
| 741 void RootWindowController::InitLayoutManagers() { | 762 void RootWindowController::InitLayoutManagers() { |
| 742 aura::Window* root_window = GetRootWindow(); | 763 aura::Window* root_window = GetRootWindow(); |
| 743 root_window_layout_ = new RootWindowLayoutManager(root_window); | 764 root_window_layout_ = new RootWindowLayoutManager(root_window); |
| 744 root_window->SetLayoutManager(root_window_layout_); | 765 root_window->SetLayoutManager(root_window_layout_); |
| 745 | 766 |
| 746 aura::Window* default_container = | 767 aura::Window* default_container = |
| 747 GetContainer(kShellWindowId_DefaultContainer); | 768 GetContainer(kShellWindowId_DefaultContainer); |
| 748 // Workspace manager has its own layout managers. | 769 // Workspace manager has its own layout managers. |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1001 kShellWindowId_MouseCursorContainer, | 1022 kShellWindowId_MouseCursorContainer, |
| 1002 "MouseCursorContainer", | 1023 "MouseCursorContainer", |
| 1003 root_window); | 1024 root_window); |
| 1004 SetUsesScreenCoordinates(mouse_cursor_container); | 1025 SetUsesScreenCoordinates(mouse_cursor_container); |
| 1005 #endif | 1026 #endif |
| 1006 | 1027 |
| 1007 CreateContainer(kShellWindowId_PowerButtonAnimationContainer, | 1028 CreateContainer(kShellWindowId_PowerButtonAnimationContainer, |
| 1008 "PowerButtonAnimationContainer", root_window); | 1029 "PowerButtonAnimationContainer", root_window); |
| 1009 } | 1030 } |
| 1010 | 1031 |
| 1032 #if defined(OS_CHROMEOS) | |
| 1033 void RootWindowController::UpdateTouchExplorationState() { | |
| 1034 AccessibilityDelegate* delegate = | |
| 1035 Shell::GetInstance()->accessibility_delegate(); | |
| 1036 bool enabled = delegate->IsSpokenFeedbackEnabled(); | |
| 1037 | |
| 1038 if (enabled && !touch_exploration_controller_.get()) { | |
| 1039 touch_exploration_controller_.reset( | |
| 1040 new ui::TouchExplorationController(GetRootWindow())); | |
| 1041 } else if (!enabled && touch_exploration_controller_.get()) { | |
| 1042 touch_exploration_controller_.reset(); | |
| 1043 } | |
| 1044 } | |
| 1045 #endif | |
| 1046 | |
| 1011 void RootWindowController::EnableTouchHudProjection() { | 1047 void RootWindowController::EnableTouchHudProjection() { |
| 1012 if (touch_hud_projection_) | 1048 if (touch_hud_projection_) |
| 1013 return; | 1049 return; |
| 1014 set_touch_hud_projection(new TouchHudProjection(GetRootWindow())); | 1050 set_touch_hud_projection(new TouchHudProjection(GetRootWindow())); |
| 1015 } | 1051 } |
| 1016 | 1052 |
| 1017 void RootWindowController::DisableTouchHudProjection() { | 1053 void RootWindowController::DisableTouchHudProjection() { |
| 1018 if (!touch_hud_projection_) | 1054 if (!touch_hud_projection_) |
| 1019 return; | 1055 return; |
| 1020 touch_hud_projection_->Remove(); | 1056 touch_hud_projection_->Remove(); |
| 1021 } | 1057 } |
| 1022 | 1058 |
| 1023 void RootWindowController::OnLoginStateChanged(user::LoginStatus status) { | 1059 void RootWindowController::OnLoginStateChanged(user::LoginStatus status) { |
| 1024 shelf_->shelf_layout_manager()->UpdateVisibilityState(); | 1060 shelf_->shelf_layout_manager()->UpdateVisibilityState(); |
| 1025 } | 1061 } |
| 1026 | 1062 |
| 1027 void RootWindowController::OnTouchHudProjectionToggled(bool enabled) { | 1063 void RootWindowController::OnTouchHudProjectionToggled(bool enabled) { |
| 1028 if (enabled) | 1064 if (enabled) |
| 1029 EnableTouchHudProjection(); | 1065 EnableTouchHudProjection(); |
| 1030 else | 1066 else |
| 1031 DisableTouchHudProjection(); | 1067 DisableTouchHudProjection(); |
| 1032 } | 1068 } |
| 1033 | 1069 |
| 1070 #if defined(OS_CHROMEOS) | |
| 1071 void RootWindowController::OnAccessibilityModeChanged( | |
| 1072 AccessibilityNotificationVisibility notify) { | |
| 1073 if (!CommandLine::ForCurrentProcess()->HasSwitch( | |
| 1074 switches::kAshDisableTouchExplorationMode)) { | |
| 1075 UpdateTouchExplorationState(); | |
| 1076 } | |
| 1077 } | |
| 1078 #endif | |
| 1079 | |
| 1034 RootWindowController* GetRootWindowController( | 1080 RootWindowController* GetRootWindowController( |
| 1035 const aura::Window* root_window) { | 1081 const aura::Window* root_window) { |
| 1036 return root_window ? GetRootWindowSettings(root_window)->controller : NULL; | 1082 return root_window ? GetRootWindowSettings(root_window)->controller : NULL; |
| 1037 } | 1083 } |
| 1038 | 1084 |
| 1039 } // namespace ash | 1085 } // namespace ash |
| OLD | NEW |