Index: ash/root_window_controller.cc |
diff --git a/ash/root_window_controller.cc b/ash/root_window_controller.cc |
index ba38e14a8db5b5697712a03377f0032dde2cc1ca..9b807e005476ca998e999171d0b199e13392b556 100644 |
--- a/ash/root_window_controller.cc |
+++ b/ash/root_window_controller.cc |
@@ -28,6 +28,7 @@ |
#include "ash/switchable_windows.h" |
#include "ash/system/status_area_widget.h" |
#include "ash/system/tray/system_tray_delegate.h" |
+#include "ash/system/tray/system_tray_notifier.h" |
#include "ash/touch/touch_hud_debug.h" |
#include "ash/touch/touch_hud_projection.h" |
#include "ash/touch/touch_observer_hud.h" |
@@ -75,6 +76,7 @@ |
#if defined(OS_CHROMEOS) |
#include "ash/wm/boot_splash_screen_chromeos.h" |
+#include "ui/chromeos/touch_exploration_controller.h" |
#endif |
namespace ash { |
@@ -339,7 +341,17 @@ void RootWindowController::SetAnimatingWallpaperController( |
} |
void RootWindowController::Shutdown() { |
- Shell::GetInstance()->RemoveShellObserver(this); |
+ Shell* shell = Shell::GetInstance(); |
+ shell->RemoveShellObserver(this); |
+ |
+#if defined(OS_CHROMEOS) |
+ if (!CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kAshDisableTouchExplorationMode)) { |
+ if (shell->system_tray_notifier()) |
+ shell->system_tray_notifier()->RemoveAccessibilityObserver(this); |
+ touch_exploration_controller_.reset(); |
+ } |
+#endif |
if (animating_wallpaper_controller_.get()) |
animating_wallpaper_controller_->StopAnimating(); |
@@ -351,7 +363,7 @@ void RootWindowController::Shutdown() { |
// window list adding windows from the target root window's containers which |
// may have already gone away. |
if (Shell::GetTargetRootWindow() == root_window) { |
- Shell::GetInstance()->set_target_root_window( |
+ shell->set_target_root_window( |
Shell::GetPrimaryRootWindow() == root_window |
? NULL |
: Shell::GetPrimaryRootWindow()); |
@@ -736,6 +748,15 @@ void RootWindowController::Init(RootWindowType root_window_type, |
// Notify shell observers about new root window. |
shell->OnRootWindowAdded(root_window); |
} |
+ |
+#if defined(OS_CHROMEOS) |
+ if (!CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kAshDisableTouchExplorationMode)) { |
+ Shell::GetInstance()->system_tray_notifier()-> |
+ AddAccessibilityObserver(this); |
+ UpdateTouchExplorationState(); |
+ } |
+#endif |
} |
void RootWindowController::InitLayoutManagers() { |
@@ -1008,6 +1029,21 @@ void RootWindowController::CreateContainersInRootWindow( |
"PowerButtonAnimationContainer", root_window); |
} |
+#if defined(OS_CHROMEOS) |
+void RootWindowController::UpdateTouchExplorationState() { |
+ AccessibilityDelegate* delegate = |
+ Shell::GetInstance()->accessibility_delegate(); |
+ bool enabled = delegate->IsSpokenFeedbackEnabled(); |
+ |
+ if (enabled && !touch_exploration_controller_.get()) { |
+ touch_exploration_controller_.reset( |
+ new ui::TouchExplorationController(GetRootWindow())); |
+ } else if (!enabled && touch_exploration_controller_.get()) { |
+ touch_exploration_controller_.reset(); |
+ } |
+} |
+#endif |
+ |
void RootWindowController::EnableTouchHudProjection() { |
if (touch_hud_projection_) |
return; |
@@ -1031,6 +1067,16 @@ void RootWindowController::OnTouchHudProjectionToggled(bool enabled) { |
DisableTouchHudProjection(); |
} |
+#if defined(OS_CHROMEOS) |
+void RootWindowController::OnAccessibilityModeChanged( |
+ AccessibilityNotificationVisibility notify) { |
+ if (!CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kAshDisableTouchExplorationMode)) { |
+ UpdateTouchExplorationState(); |
+ } |
+} |
+#endif |
+ |
RootWindowController* GetRootWindowController( |
const aura::Window* root_window) { |
return root_window ? GetRootWindowSettings(root_window)->controller : NULL; |