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 |