Index: chromeos/ime/xkeyboard.cc |
diff --git a/chromeos/ime/xkeyboard.cc b/chromeos/ime/xkeyboard.cc |
index b2f55f14443e77a403ce47d27889b11c3a7fc658..4d8df51d79a2cf262e3478c83a68d39d8f0eec25 100644 |
--- a/chromeos/ime/xkeyboard.cc |
+++ b/chromeos/ime/xkeyboard.cc |
@@ -117,6 +117,10 @@ class XKeyboardImpl : public XKeyboard { |
XKeyboardImpl(); |
virtual ~XKeyboardImpl() {} |
+ // Adds/removes observer. |
+ virtual void AddObserver(Observer* observer) OVERRIDE; |
+ virtual void RemoveObserver(Observer* observer) OVERRIDE; |
+ |
// Overridden from XKeyboard: |
virtual bool SetCurrentKeyboardLayoutByName( |
const std::string& layout_name) OVERRIDE; |
@@ -169,6 +173,8 @@ class XKeyboardImpl : public XKeyboard { |
base::WeakPtrFactory<XKeyboardImpl> weak_factory_; |
+ ObserverList<Observer> observers_; |
+ |
DISALLOW_COPY_AND_ASSIGN(XKeyboardImpl); |
}; |
@@ -193,6 +199,14 @@ XKeyboardImpl::XKeyboardImpl() |
current_caps_lock_status_ = CapsLockIsEnabled(); |
} |
+void XKeyboardImpl::AddObserver(XKeyboard::Observer* observer) { |
+ observers_.AddObserver(observer); |
+} |
+ |
+void XKeyboardImpl::RemoveObserver(XKeyboard::Observer* observer) { |
+ observers_.RemoveObserver(observer); |
+} |
+ |
unsigned int XKeyboardImpl::GetNumLockMask() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
static const unsigned int kBadMask = 0; |
@@ -379,6 +393,10 @@ bool XKeyboardImpl::SetAutoRepeatRate(const AutoRepeatRate& rate) { |
void XKeyboardImpl::SetCapsLockEnabled(bool enable_caps_lock) { |
SetLockedModifiers(enable_caps_lock); |
+ if (current_caps_lock_status_ != enable_caps_lock) { |
sadrul
2014/04/10 01:16:45
Calling SetLockedModifiers() will have changed cur
Mr4D (OOO till 08-26)
2014/04/10 14:16:02
Good catch. In deed. I wonder why my test on the d
|
+ FOR_EACH_OBSERVER(XKeyboard::Observer, observers_, |
+ OnCapsLockChanged(enable_caps_lock)); |
+ } |
} |
bool XKeyboardImpl::SetCurrentKeyboardLayoutByName( |