Chromium Code Reviews| Index: chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc |
| diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc |
| index 3624e4028278f4a459a0d966d87ddfb9edbde56c..5fc0e64462cbc8b8571935e8b5f21828277586e3 100644 |
| --- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc |
| +++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc |
| @@ -20,6 +20,7 @@ |
| #include "base/strings/string_util.h" |
| #include "base/strings/stringprintf.h" |
| #include "base/strings/utf_string_conversions.h" |
| +#include "base/sys_info.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/browser_process_platform_part_chromeos.h" |
| #include "chrome/browser/browser_shutdown.h" |
| @@ -312,7 +313,9 @@ SigninScreenHandler::SigninScreenHandler( |
| offline_login_active_(false), |
| last_network_state_(NetworkStateInformer::UNKNOWN), |
| has_pending_auth_ui_(false), |
| - caps_lock_enabled_(false), |
| + caps_lock_enabled_(chromeos::input_method::InputMethodManager::Get() |
| + ->GetImeKeyboard() |
| + ->CapsLockIsEnabled()), |
| gaia_screen_handler_(gaia_screen_handler) { |
| DCHECK(network_state_informer_.get()); |
| DCHECK(error_screen_actor_); |
| @@ -338,10 +341,26 @@ SigninScreenHandler::SigninScreenHandler( |
| registrar_.Add(this, |
| chrome::NOTIFICATION_AUTH_CANCELLED, |
| content::NotificationService::AllSources()); |
| + |
| + // Since keyboard handling differs between ChromeOS and Linux we need to |
| + // use different observers depending on the two platforms. |
| + if (base::SysInfo::IsRunningOnChromeOS()) { |
| + chromeos::input_method::ImeKeyboard* keyboard = |
| + chromeos::input_method::InputMethodManager::Get()->GetImeKeyboard(); |
| + keyboard->AddObserver(this); |
| + } else { |
| + ash::Shell::GetInstance()->PrependPreTargetHandler(this); |
| + } |
| } |
| SigninScreenHandler::~SigninScreenHandler() { |
| - ash::Shell::GetInstance()->RemovePreTargetHandler(this); |
| + if (base::SysInfo::IsRunningOnChromeOS()) { |
| + chromeos::input_method::ImeKeyboard* keyboard = |
| + chromeos::input_method::InputMethodManager::Get()->GetImeKeyboard(); |
| + keyboard->RemoveObserver(this); |
| + } else { |
| + ash::Shell::GetInstance()->RemovePreTargetHandler(this); |
| + } |
| weak_factory_.InvalidateWeakPtrs(); |
| if (delegate_) |
| delegate_->SetWebUIHandler(NULL); |
| @@ -726,9 +745,6 @@ void SigninScreenHandler::Initialize() { |
| if (!delegate_) |
| return; |
| - // Make sure the event is processed by this before the IME. |
| - ash::Shell::GetInstance()->PrependPreTargetHandler(this); |
| - |
| if (show_on_init_) { |
| show_on_init_ = false; |
| ShowImpl(); |
| @@ -973,12 +989,8 @@ void SigninScreenHandler::OnCookiesCleared(base::Closure on_clear_callback) { |
| } |
| void SigninScreenHandler::OnKeyEvent(ui::KeyEvent* key) { |
| - if (key->type() == ui::ET_KEY_PRESSED && |
| - key->key_code() == ui::VKEY_CAPITAL) { |
| - caps_lock_enabled_ = !caps_lock_enabled_; |
| - if (page_is_ready()) |
| - CallJS("login.AccountPickerScreen.setCapsLockState", caps_lock_enabled_); |
| - } |
| + if (key->type() == ui::ET_KEY_PRESSED && key->key_code() == ui::VKEY_CAPITAL) |
| + OnCapsLockChanged(!caps_lock_enabled_); |
| } |
| void SigninScreenHandler::Observe(int type, |
| @@ -1791,4 +1803,10 @@ net::Error SigninScreenHandler::FrameError() const { |
| return gaia_screen_handler_->frame_error(); |
| } |
| +void SigninScreenHandler::OnCapsLockChanged(bool enabled) { |
| + caps_lock_enabled_ = enabled; |
| + if (page_is_ready()) |
| + CallJS("login.AccountPickerScreen.setCapsLockState", caps_lock_enabled_); |
|
ygorshenin1
2014/05/20 16:37:57
nit: could you please add to the Initialize() meth
dzhioev (left Google)
2014/05/20 16:53:11
We reset Caps Lock state in ShowImpl.
|
| +} |
| + |
| } // namespace chromeos |