diff options
author | yusukes@chromium.org <yusukes@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-21 04:36:05 +0000 |
---|---|---|
committer | yusukes@chromium.org <yusukes@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-21 04:36:05 +0000 |
commit | 7610cede2a571dcf71b5012c8f77b7cc7f8124e5 (patch) | |
tree | 9130ab14e56f8986e8683220fec486b08d66455a | |
parent | 9e4a816cc5baa3d28cedbba355b9521f2e1c88e5 (diff) | |
download | chromium_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.cc | 15 |
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( |