| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/ui/ash/caps_lock_delegate_chromeos.h" |
| |
| #include "base/command_line.h" |
| #include "base/logging.h" |
| #include "base/sys_info.h" |
| #include "chrome/common/chrome_switches.h" |
| #include "chromeos/ime/xkeyboard.h" |
| #include "content/public/browser/browser_thread.h" |
| |
| CapsLockDelegate::CapsLockDelegate(chromeos::input_method::XKeyboard* xkeyboard) |
| : xkeyboard_(xkeyboard), |
| is_running_on_chromeos_(base::SysInfo::IsRunningOnChromeOS()), |
| caps_lock_is_on_(xkeyboard_->CapsLockIsEnabled()) { |
| chromeos::SystemKeyEventListener* system_event_listener = |
| chromeos::SystemKeyEventListener::GetInstance(); |
| // SystemKeyEventListener should be instantiated when we're running production |
| // code on Chrome OS. |
| DCHECK(!is_running_on_chromeos_ || system_event_listener || |
| CommandLine::ForCurrentProcess()->HasSwitch(switches::kTestType)); |
| if (system_event_listener) |
| system_event_listener->AddCapsLockObserver(this); |
| } |
| |
| CapsLockDelegate::~CapsLockDelegate() { |
| chromeos::SystemKeyEventListener* system_event_listener = |
| chromeos::SystemKeyEventListener::GetInstance(); |
| if (system_event_listener) |
| system_event_listener->RemoveCapsLockObserver(this); |
| } |
| |
| bool CapsLockDelegate::IsCapsLockEnabled() const { |
| return caps_lock_is_on_; |
| } |
| |
| void CapsLockDelegate::SetCapsLockEnabled(bool enabled) { |
| DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| if (is_running_on_chromeos_) { |
| xkeyboard_->SetCapsLockEnabled(enabled); |
| return; |
| } |
| } |
| |
| void CapsLockDelegate::ToggleCapsLock() { |
| DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| if (is_running_on_chromeos_) { |
| xkeyboard_->SetCapsLockEnabled(!caps_lock_is_on_); |
| return; |
| } |
| } |
| |
| void CapsLockDelegate::OnCapsLockChange(bool enabled) { |
| caps_lock_is_on_ = enabled; |
| } |