Index: chrome/browser/chromeos/accessibility/accessibility_manager.cc |
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager.cc b/chrome/browser/chromeos/accessibility/accessibility_manager.cc |
index 61e13b4cab078c0246aa57cfb540f8213b28ead0..ad45e90e26e85af0875e8df713e9e9901228bda6 100644 |
--- a/chrome/browser/chromeos/accessibility/accessibility_manager.cc |
+++ b/chrome/browser/chromeos/accessibility/accessibility_manager.cc |
@@ -324,6 +324,8 @@ AccessibilityManager::AccessibilityManager() |
chrome::NOTIFICATION_SCREEN_LOCK_STATE_CHANGED, |
content::NotificationService::AllSources()); |
+ input_method::InputMethodManager::Get()->AddObserver(this); |
+ |
ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
media::SoundsManager* manager = media::SoundsManager::Get(); |
manager->Initialize(SOUND_SHUTDOWN, |
@@ -343,6 +345,7 @@ AccessibilityManager::~AccessibilityManager() { |
false, |
ash::A11Y_NOTIFICATION_NONE); |
NotifyAccessibilityStatusChanged(details); |
+ input_method::InputMethodManager::Get()->RemoveObserver(this); |
} |
bool AccessibilityManager::ShouldShowAccessibilityMenu() { |
@@ -761,6 +764,17 @@ void AccessibilityManager::ReceiveBrailleDisplayState( |
OnDisplayStateChanged(*state); |
} |
+// Overridden from InputMethodManager::Observer. |
+void AccessibilityManager::InputMethodChanged( |
+ input_method::InputMethodManager* manager, |
+ bool show_message) { |
+#if defined(USE_ASH) |
+ // Sticky keys is implemented only in ash. |
+ ash::Shell::GetInstance()->sticky_keys_controller()->SetModifiersEnabled( |
+ manager->IsISOLevel5ShiftUsedByCurrentInputMethod(), |
+ manager->IsAltGrUsedByCurrentInputMethod()); |
+#endif |
+} |
void AccessibilityManager::SetProfile(Profile* profile) { |
pref_change_registrar_.reset(); |