Index: chrome/browser/chromeos/preferences.cc |
diff --git a/chrome/browser/chromeos/preferences.cc b/chrome/browser/chromeos/preferences.cc |
index 1103be60c673945fd161be38d3f3a0915598699e..04c0cd8c6a8bcdb0e4b0b1776f32211d89fcf755 100644 |
--- a/chrome/browser/chromeos/preferences.cc |
+++ b/chrome/browser/chromeos/preferences.cc |
@@ -57,8 +57,21 @@ |
namespace chromeos { |
+namespace { |
+ |
static const char kFallbackInputMethodLocale[] = "en-US"; |
+// The keyboard preferences that determine how we remap modifier keys. These |
+// preferences will be saved in global user preferences dictionary so that they |
+// can be used on signin screen. |
+const char* const kLanguageRemapPrefs[] = { |
+ prefs::kLanguageRemapSearchKeyTo, prefs::kLanguageRemapControlKeyTo, |
+ prefs::kLanguageRemapAltKeyTo, prefs::kLanguageRemapCapsLockKeyTo, |
+ prefs::kLanguageRemapEscapeKeyTo, prefs::kLanguageRemapBackspaceKeyTo, |
+ prefs::kLanguageRemapDiamondKeyTo}; |
+ |
+} // namespace |
+ |
Preferences::Preferences() |
: prefs_(NULL), |
input_method_manager_(input_method::InputMethodManager::Get()), |
@@ -397,6 +410,8 @@ void Preferences::InitUserPrefs(sync_preferences::PrefServiceSyncable* prefs) { |
pref_change_registrar_.Init(prefs); |
pref_change_registrar_.Add(prefs::kResolveTimezoneByGeolocation, callback); |
pref_change_registrar_.Add(prefs::kUse24HourClock, callback); |
+ for (auto remap_pref : kLanguageRemapPrefs) |
+ pref_change_registrar_.Add(remap_pref, callback); |
} |
void Preferences::Init(Profile* profile, const user_manager::User* user) { |
@@ -712,6 +727,14 @@ void Preferences::ApplyPreferences(ApplyReason reason, |
prefs::kUse24HourClock, value); |
} |
+ for (auto remap_pref : kLanguageRemapPrefs) { |
+ if (pref_name == remap_pref || reason != REASON_ACTIVE_USER_CHANGED) { |
+ const int value = prefs_->GetInteger(remap_pref); |
+ user_manager::known_user::SetIntegerPref(user_->GetAccountId(), |
+ remap_pref, value); |
+ } |
+ } |
+ |
system::InputDeviceSettings::Get()->UpdateTouchDevicesStatusFromPrefs(); |
} |