Index: chrome/browser/chromeos/events/event_rewriter.cc |
diff --git a/chrome/browser/chromeos/events/event_rewriter.cc b/chrome/browser/chromeos/events/event_rewriter.cc |
index d532a8b375defbef81cbecf8646c09b35647033d..5a68721e218eae08058ef9c1c5d5a96fa078ed47 100644 |
--- a/chrome/browser/chromeos/events/event_rewriter.cc |
+++ b/chrome/browser/chromeos/events/event_rewriter.cc |
@@ -20,6 +20,8 @@ |
#include "chrome/browser/chromeos/login/ui/login_display_host.h" |
#include "chrome/browser/extensions/extension_commands_global_registry.h" |
#include "chrome/browser/profiles/profile_manager.h" |
+#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" |
+#include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" |
#include "chrome/common/pref_names.h" |
#include "chromeos/chromeos_switches.h" |
#include "components/prefs/pref_service.h" |
@@ -132,14 +134,24 @@ const ModifierRemapping* kModifierRemappingNeoMod3 = &kModifierRemappings[1]; |
// prefs::kLanguageRemapSearchKeyTo. |
const ModifierRemapping* GetRemappedKey(const std::string& pref_name, |
const PrefService& pref_service) { |
- if (!pref_service.FindPreference(pref_name.c_str())) |
- return NULL; // The |pref_name| hasn't been registered. On login screen? |
- const int value = pref_service.GetInteger(pref_name.c_str()); |
+ int value = -1; |
+ // If we're at the login screen, try to get the pref from the global prefs |
+ // dictionary. |
+ if (!LoginDisplayHost::default_host() || |
+ !LoginDisplayHost::default_host() |
+ ->GetOobeUI() |
+ ->signin_screen_handler() |
+ ->GetKeyboardRemappedPrefValue(pref_name, &value)) { |
+ if (!pref_service.FindPreference(pref_name)) |
+ return nullptr; |
+ value = pref_service.GetInteger(pref_name); |
+ } |
+ |
for (size_t i = 0; i < arraysize(kModifierRemappings); ++i) { |
if (value == kModifierRemappings[i].remap_to) |
return &kModifierRemappings[i]; |
} |
- return NULL; |
+ return nullptr; |
} |
bool HasDiamondKey() { |