summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryusukes@chromium.org <yusukes@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-21 04:36:05 +0000
committeryusukes@chromium.org <yusukes@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-21 04:36:05 +0000
commit7610cede2a571dcf71b5012c8f77b7cc7f8124e5 (patch)
tree9130ab14e56f8986e8683220fec486b08d66455a
parent9e4a816cc5baa3d28cedbba355b9521f2e1c88e5 (diff)
downloadchromium_src-7610cede2a571dcf71b5012c8f77b7cc7f8124e5.zip
chromium_src-7610cede2a571dcf71b5012c8f77b7cc7f8124e5.tar.gz
chromium_src-7610cede2a571dcf71b5012c8f77b7cc7f8124e5.tar.bz2
Toggle Caps Lock on pressing both Shift keys even if Num Lock is enabled.
BUG=chromium-os:21842 TEST=Connect an external USB keyboard, turn on Num Lock, press both Shift keys, confirm that Caps Lock is toggled. Press Num Lock again to turn it off, then do the same test again. Review URL: http://codereview.chromium.org/8344075 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@106676 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/system_key_event_listener.cc15
1 files changed, 11 insertions, 4 deletions
diff --git a/chrome/browser/chromeos/system_key_event_listener.cc b/chrome/browser/chromeos/system_key_event_listener.cc
index df24857..0ee46b5 100644
--- a/chrome/browser/chromeos/system_key_event_listener.cc
+++ b/chrome/browser/chromeos/system_key_event_listener.cc
@@ -39,6 +39,12 @@ const double kStepPercentage = 4.0;
// http://crosbug.com/13618.
const double kVolumePercentOnVolumeUpWhileMuted = 25.0;
+// In ProcessedXEvent(), we should check only Alt, Shift, Control, and Caps Lock
+// modifiers, and should ignore Num Lock, Super, Hyper etc. See
+// http://crosbug.com/21842.
+const unsigned int kSupportedModifiers =
+ Mod1Mask | ShiftMask | ControlMask | LockMask;
+
static SystemKeyEventListener* g_system_key_event_listener = NULL;
} // namespace
@@ -292,17 +298,18 @@ bool SystemKeyEventListener::ProcessedXEvent(XEvent* xevent) {
} else if (xevent->type == KeyPress) {
const int32 keycode = xevent->xkey.keycode;
if (keycode) {
+ const unsigned int state = (xevent->xkey.state & kSupportedModifiers);
+
// Toggle Caps Lock if both Shift keys are pressed simultaneously.
if (keycode == key_left_shift_ || keycode == key_right_shift_) {
- const bool other_shift_is_held = (xevent->xkey.state & ShiftMask);
- const bool other_mods_are_held =
- (xevent->xkey.state & ~(ShiftMask | LockMask));
+ const bool other_shift_is_held = (state & ShiftMask);
+ const bool other_mods_are_held = (state & ~(ShiftMask | LockMask));
if (other_shift_is_held && !other_mods_are_held)
input_method::XKeyboard::SetCapsLockEnabled(!caps_lock_is_on_);
}
// Only doing non-Alt/Shift/Ctrl modified keys
- if (!(xevent->xkey.state & (Mod1Mask | ShiftMask | ControlMask))) {
+ if (!(state & (Mod1Mask | ShiftMask | ControlMask))) {
if (keycode == key_f6_ || keycode == key_brightness_down_) {
if (keycode == key_f6_)
UserMetrics::RecordAction(