Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(91)

Unified Diff: chromeos/ime/xkeyboard.cc

Issue 189663009: cros: Simplify chromeos::input_method::XKeyboard interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chromeos/ime/xkeyboard.h ('k') | chromeos/ime/xkeyboard_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chromeos/ime/xkeyboard.cc
diff --git a/chromeos/ime/xkeyboard.cc b/chromeos/ime/xkeyboard.cc
index a34413862bfa3ae535251437fb69ff9df42ee4dc..bbcb0a34d55118d5b5244a10b6054e2ed174577c 100644
--- a/chromeos/ime/xkeyboard.cc
+++ b/chromeos/ime/xkeyboard.cc
@@ -74,20 +74,16 @@ class XKeyboardImpl : public XKeyboard {
const std::string& layout_name) OVERRIDE;
virtual bool ReapplyCurrentKeyboardLayout() OVERRIDE;
virtual void ReapplyCurrentModifierLockStatus() OVERRIDE;
- virtual void SetLockedModifiers(
- ModifierLockStatus new_caps_lock_status,
- ModifierLockStatus new_num_lock_status) OVERRIDE;
- virtual void SetNumLockEnabled(bool enable_num_lock) OVERRIDE;
+ virtual void DisableNumLock() OVERRIDE;
virtual void SetCapsLockEnabled(bool enable_caps_lock) OVERRIDE;
- virtual bool NumLockIsEnabled() OVERRIDE;
virtual bool CapsLockIsEnabled() OVERRIDE;
- virtual unsigned int GetNumLockMask() OVERRIDE;
- virtual void GetLockedModifiers(bool* out_caps_lock_enabled,
- bool* out_num_lock_enabled) OVERRIDE;
virtual bool SetAutoRepeatEnabled(bool enabled) OVERRIDE;
virtual bool SetAutoRepeatRate(const AutoRepeatRate& rate) OVERRIDE;
private:
+ unsigned int GetNumLockMask();
Daniel Erat 2014/03/09 04:17:55 nit: add a comment documenting what this returns (
sadrul 2014/03/09 04:52:26 Done.
+ void SetLockedModifiers(bool caps_lock_enabled);
Daniel Erat 2014/03/09 04:17:55 nit: blank line between the previous method and th
sadrul 2014/03/09 04:52:26 Done.
+
// This function is used by SetLayout() and RemapModifierKeys(). Calls
// setxkbmap command if needed, and updates the last_full_layout_name_ cache.
bool SetLayoutInternal(const std::string& layout_name, bool force);
@@ -106,9 +102,9 @@ class XKeyboardImpl : public XKeyboard {
const bool is_running_on_chrome_os_;
unsigned int num_lock_mask_;
- // The current Num Lock and Caps Lock status. If true, enabled.
- bool current_num_lock_status_;
+ // The current Caps Lock status. If true, enabled.
bool current_caps_lock_status_;
+
// The XKB layout name which we set last time like "us" and "us(dvorak)".
std::string current_layout_name_;
@@ -139,7 +135,59 @@ XKeyboardImpl::XKeyboardImpl()
LOG_IF(ERROR, num_lock_mask_ != Mod2Mask)
<< "NumLock is not assigned to Mod2Mask. : " << num_lock_mask_;
}
- GetLockedModifiers(&current_caps_lock_status_, &current_num_lock_status_);
+
+ current_caps_lock_status_ = CapsLockIsEnabled();
+}
+
+unsigned int XKeyboardImpl::GetNumLockMask() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ static const unsigned int kBadMask = 0;
+
+ unsigned int real_mask = kBadMask;
+ XkbDescPtr xkb_desc =
+ XkbGetKeyboard(GetXDisplay(), XkbAllComponentsMask, XkbUseCoreKbd);
+ if (!xkb_desc)
+ return kBadMask;
+
+ if (xkb_desc->dpy && xkb_desc->names && xkb_desc->names->vmods) {
+ const std::string string_to_find(kNumLockVirtualModifierString);
+ for (size_t i = 0; i < XkbNumVirtualMods; ++i) {
+ const unsigned int virtual_mod_mask = 1U << i;
+ char* virtual_mod_str_raw_ptr =
+ XGetAtomName(xkb_desc->dpy, xkb_desc->names->vmods[i]);
+ if (!virtual_mod_str_raw_ptr)
+ continue;
+ const std::string virtual_mod_str = virtual_mod_str_raw_ptr;
+ XFree(virtual_mod_str_raw_ptr);
+
+ if (string_to_find == virtual_mod_str) {
+ if (!XkbVirtualModsToReal(xkb_desc, virtual_mod_mask, &real_mask)) {
+ DVLOG(1) << "XkbVirtualModsToReal failed";
+ real_mask = kBadMask; // reset the return value, just in case.
+ }
+ break;
+ }
+ }
+ }
+ XkbFreeKeyboard(xkb_desc, 0, True /* free all components */);
+ return real_mask;
+}
+
+void XKeyboardImpl::SetLockedModifiers(bool caps_lock_enabled) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
+ unsigned int affect_mask = 0;
+ unsigned int value_mask = 0;
+ if (caps_lock_enabled != current_caps_lock_status_) {
+ affect_mask |= LockMask;
+ value_mask |= (caps_lock_enabled ? LockMask : 0);
+ current_caps_lock_status_ = caps_lock_enabled;
+ }
+
+ // Always turn off num lock.
+ affect_mask |= num_lock_mask_;
+
+ XkbLockModifiers(GetXDisplay(), XkbUseCoreKbd, affect_mask, value_mask);
}
bool XKeyboardImpl::SetLayoutInternal(const std::string& layout_name,
@@ -232,71 +280,11 @@ void XKeyboardImpl::PollUntilChildFinish(const base::ProcessHandle handle) {
}
}
-bool XKeyboardImpl::NumLockIsEnabled() {
- bool num_lock_enabled = false;
- GetLockedModifiers(NULL /* Caps Lock */, &num_lock_enabled);
- return num_lock_enabled;
-}
-
bool XKeyboardImpl::CapsLockIsEnabled() {
- bool caps_lock_enabled = false;
- GetLockedModifiers(&caps_lock_enabled, NULL /* Num Lock */);
- return caps_lock_enabled;
-}
-
-unsigned int XKeyboardImpl::GetNumLockMask() {
DCHECK(thread_checker_.CalledOnValidThread());
- static const unsigned int kBadMask = 0;
-
- unsigned int real_mask = kBadMask;
- XkbDescPtr xkb_desc =
- XkbGetKeyboard(GetXDisplay(), XkbAllComponentsMask, XkbUseCoreKbd);
- if (!xkb_desc)
- return kBadMask;
-
- if (xkb_desc->dpy && xkb_desc->names && xkb_desc->names->vmods) {
- const std::string string_to_find(kNumLockVirtualModifierString);
- for (size_t i = 0; i < XkbNumVirtualMods; ++i) {
- const unsigned int virtual_mod_mask = 1U << i;
- char* virtual_mod_str_raw_ptr =
- XGetAtomName(xkb_desc->dpy, xkb_desc->names->vmods[i]);
- if (!virtual_mod_str_raw_ptr)
- continue;
- const std::string virtual_mod_str = virtual_mod_str_raw_ptr;
- XFree(virtual_mod_str_raw_ptr);
-
- if (string_to_find == virtual_mod_str) {
- if (!XkbVirtualModsToReal(xkb_desc, virtual_mod_mask, &real_mask)) {
- DVLOG(1) << "XkbVirtualModsToReal failed";
- real_mask = kBadMask; // reset the return value, just in case.
- }
- break;
- }
- }
- }
- XkbFreeKeyboard(xkb_desc, 0, True /* free all components */);
- return real_mask;
-}
-
-void XKeyboardImpl::GetLockedModifiers(bool* out_caps_lock_enabled,
- bool* out_num_lock_enabled) {
- DCHECK(thread_checker_.CalledOnValidThread());
-
- if (out_num_lock_enabled && !num_lock_mask_) {
- DVLOG(1) << "Cannot get locked modifiers. Num Lock mask unknown.";
- if (out_caps_lock_enabled)
- *out_caps_lock_enabled = false;
- if (out_num_lock_enabled)
- *out_num_lock_enabled = false;
- return;
- }
-
XkbStateRec status;
XkbGetState(GetXDisplay(), XkbUseCoreKbd, &status);
- if (out_caps_lock_enabled)
- *out_caps_lock_enabled = status.locked_mods & LockMask;
- if (out_num_lock_enabled)
- *out_num_lock_enabled = status.locked_mods & num_lock_mask_;
+ return (status.locked_mods & LockMask);
}
bool XKeyboardImpl::SetAutoRepeatEnabled(bool enabled) {
@@ -321,39 +309,8 @@ bool XKeyboardImpl::SetAutoRepeatRate(const AutoRepeatRate& rate) {
return true;
}
-void XKeyboardImpl::SetLockedModifiers(ModifierLockStatus new_caps_lock_status,
- ModifierLockStatus new_num_lock_status) {
- DCHECK(thread_checker_.CalledOnValidThread());
- if (!num_lock_mask_) {
- DVLOG(1) << "Cannot set locked modifiers. Num Lock mask unknown.";
- return;
- }
-
- unsigned int affect_mask = 0;
- unsigned int value_mask = 0;
- if (new_caps_lock_status != kDontChange) {
- affect_mask |= LockMask;
- value_mask |= ((new_caps_lock_status == kEnableLock) ? LockMask : 0);
- current_caps_lock_status_ = (new_caps_lock_status == kEnableLock);
- }
- if (new_num_lock_status != kDontChange) {
- affect_mask |= num_lock_mask_;
- value_mask |= ((new_num_lock_status == kEnableLock) ? num_lock_mask_ : 0);
- current_num_lock_status_ = (new_num_lock_status == kEnableLock);
- }
-
- if (affect_mask)
- XkbLockModifiers(GetXDisplay(), XkbUseCoreKbd, affect_mask, value_mask);
-}
-
-void XKeyboardImpl::SetNumLockEnabled(bool enable_num_lock) {
- SetLockedModifiers(
- kDontChange, enable_num_lock ? kEnableLock : kDisableLock);
-}
-
void XKeyboardImpl::SetCapsLockEnabled(bool enable_caps_lock) {
- SetLockedModifiers(
- enable_caps_lock ? kEnableLock : kDisableLock, kDontChange);
+ SetLockedModifiers(enable_caps_lock);
}
bool XKeyboardImpl::SetCurrentKeyboardLayoutByName(
@@ -374,8 +331,11 @@ bool XKeyboardImpl::ReapplyCurrentKeyboardLayout() {
}
void XKeyboardImpl::ReapplyCurrentModifierLockStatus() {
- SetLockedModifiers(current_caps_lock_status_ ? kEnableLock : kDisableLock,
- current_num_lock_status_ ? kEnableLock : kDisableLock);
+ SetLockedModifiers(current_caps_lock_status_);
+}
+
+void XKeyboardImpl::DisableNumLock() {
+ SetCapsLockEnabled(current_caps_lock_status_);
}
void XKeyboardImpl::OnSetLayoutFinish() {
« no previous file with comments | « chromeos/ime/xkeyboard.h ('k') | chromeos/ime/xkeyboard_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698