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

Unified Diff: chrome/browser/chromeos/system_key_event_listener.cc

Issue 8356040: Reapply Caps Lock and Num Lock to core keyboard whenever new X input device is added (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix unit_tests Created 9 years, 1 month 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
Index: chrome/browser/chromeos/system_key_event_listener.cc
diff --git a/chrome/browser/chromeos/system_key_event_listener.cc b/chrome/browser/chromeos/system_key_event_listener.cc
index 2965f4c06dd7c313ffbfdde9ca634c993a0daae1..2e8887ee205dfefb060bacd79fa6eb9ec3f8f5f0 100644
--- a/chrome/browser/chromeos/system_key_event_listener.cc
+++ b/chrome/browser/chromeos/system_key_event_listener.cc
@@ -74,6 +74,9 @@ SystemKeyEventListener* SystemKeyEventListener::GetInstance() {
SystemKeyEventListener::SystemKeyEventListener()
: stopped_(false),
caps_lock_is_on_(input_method::XKeyboard::CapsLockIsEnabled()),
+ num_lock_mask_(input_method::XKeyboard::GetNumLockMask()),
+ num_lock_is_on_(
+ input_method::XKeyboard::NumLockIsEnabled(num_lock_mask_)),
xkb_event_base_(0) {
Display* display = ui::GetXDisplay();
key_brightness_down_ = XKeysymToKeycode(display,
@@ -183,16 +186,15 @@ GdkFilterReturn SystemKeyEventListener::GdkEventFilter(GdkXEvent* gxevent,
#endif // defined(TOUCH_UI) || !defined(TOOLKIT_USES_GTK)
void SystemKeyEventListener::GrabKey(int32 key, uint32 mask) {
- uint32 num_lock_mask = Mod2Mask;
uint32 caps_lock_mask = LockMask;
Display* display = ui::GetXDisplay();
Window root = DefaultRootWindow(display);
XGrabKey(display, key, mask, root, True, GrabModeAsync, GrabModeAsync);
XGrabKey(display, key, mask | caps_lock_mask, root, True,
GrabModeAsync, GrabModeAsync);
- XGrabKey(display, key, mask | num_lock_mask, root, True,
+ XGrabKey(display, key, mask | num_lock_mask_, root, True,
GrabModeAsync, GrabModeAsync);
- XGrabKey(display, key, mask | caps_lock_mask | num_lock_mask, root,
+ XGrabKey(display, key, mask | caps_lock_mask | num_lock_mask_, root,
True, GrabModeAsync, GrabModeAsync);
}
@@ -275,11 +277,14 @@ void SystemKeyEventListener::ShowVolumeBubble() {
}
bool SystemKeyEventListener::ProcessedXEvent(XEvent* xevent) {
+ input_method::InputMethodManager* input_method_manager =
+ input_method::InputMethodManager::GetInstance();
+
if (xevent->type == KeyPress || xevent->type == KeyRelease) {
// Change the current keyboard layout (or input method) if xevent is one of
// the input method hotkeys.
input_method::HotkeyManager* hotkey_manager =
- input_method::InputMethodManager::GetInstance()->GetHotkeyManager();
+ input_method_manager->GetHotkeyManager();
if (hotkey_manager->FilterKeyEvent(*xevent)) {
return true;
}
@@ -288,11 +293,25 @@ bool SystemKeyEventListener::ProcessedXEvent(XEvent* xevent) {
if (xevent->type == xkb_event_base_) {
XkbEvent* xkey_event = reinterpret_cast<XkbEvent*>(xevent);
if (xkey_event->any.xkb_type == XkbStateNotify) {
- const bool new_lock_state = (xkey_event->state.locked_mods) & LockMask;
- if (caps_lock_is_on_ != new_lock_state) {
- caps_lock_is_on_ = new_lock_state;
+ const bool new_caps_lock_state =
Daniel Kurtz 2011/11/04 11:49:18 Do this in one pass: First extract the two states
Yusuke Sato 2011/11/07 04:31:28 Done.
+ (xkey_event->state.locked_mods) & LockMask;
+ if (caps_lock_is_on_ != new_caps_lock_state) {
+ caps_lock_is_on_ = new_caps_lock_state;
OnCapsLock(caps_lock_is_on_);
+ // Propagate the keyboard LED change to _ALL_ keyboards
+ input_method_manager->GetXKeyboard()->SetCapsLockEnabled(
+ caps_lock_is_on_);
+ }
+
+ const bool new_num_lock_state =
+ (xkey_event->state.locked_mods) & num_lock_mask_;
+ if (num_lock_is_on_ != new_num_lock_state) {
+ num_lock_is_on_ = new_num_lock_state;
+ // The same as above. Propagate the keyboard LED change to all keyboards
+ input_method_manager->GetXKeyboard()->SetNumLockEnabled(
+ num_lock_is_on_);
}
+
return true;
}
} else if (xevent->type == KeyPress) {
@@ -305,7 +324,8 @@ bool SystemKeyEventListener::ProcessedXEvent(XEvent* xevent) {
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_);
+ input_method_manager->GetXKeyboard()->SetCapsLockEnabled(
+ !caps_lock_is_on_);
}
// Only doing non-Alt/Shift/Ctrl modified keys

Powered by Google App Engine
This is Rietveld 408576698