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..da1fd869a3f9941867ff49692c2f45d49e7660fb 100644 |
--- a/chrome/browser/chromeos/events/event_rewriter.cc |
+++ b/chrome/browser/chromeos/events/event_rewriter.cc |
@@ -20,9 +20,12 @@ |
#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" |
+#include "components/user_manager/known_user.h" |
#include "components/user_manager/user_manager.h" |
#include "ui/base/ime/chromeos/ime_keyboard.h" |
#include "ui/base/ime/chromeos/input_method_manager.h" |
@@ -132,14 +135,32 @@ 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()) { |
+ const AccountId focused_account_id = LoginDisplayHost::default_host() |
+ ->GetOobeUI() |
+ ->signin_screen_handler() |
+ ->focused_pod_account_id(); |
+ if (!focused_account_id.empty()) { |
xiyuan
2017/02/22 17:40:18
nit: empty() -> is_valid()
|
+ user_manager::known_user::GetIntegerPref(focused_account_id, pref_name, |
+ &value); |
Alexander Alekseev
2017/02/22 10:51:50
I am not an owner of this file, but it seems to me
xdai1
2017/02/22 18:36:16
Done.
|
+ } |
+ } |
+ |
+ if (value == -1) { |
+ if (pref_service.FindPreference(pref_name)) |
+ value = pref_service.GetInteger(pref_name); |
+ else |
+ return nullptr; |
+ } |
+ |
for (size_t i = 0; i < arraysize(kModifierRemappings); ++i) { |
if (value == kModifierRemappings[i].remap_to) |
return &kModifierRemappings[i]; |
} |
- return NULL; |
+ return nullptr; |
} |
bool HasDiamondKey() { |