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 f20f5dc7dbe87257a94e071a39577cf0df9187cd..8e1b9dde8dcd32952a5fb5d215345f6bd168cd4e 100644 |
--- a/chrome/browser/chromeos/system_key_event_listener.cc |
+++ b/chrome/browser/chromeos/system_key_event_listener.cc |
@@ -33,6 +33,7 @@ SystemKeyEventListener* SystemKeyEventListener::GetInstance() { |
SystemKeyEventListener::SystemKeyEventListener() |
: stopped_(false), |
+ xkb_event_base_code_(-1), |
audio_handler_(AudioHandler::GetInstance()) { |
WmMessageListener::GetInstance()->AddObserver(this); |
@@ -53,6 +54,17 @@ SystemKeyEventListener::SystemKeyEventListener() |
GrabKey(key_f9_, 0); |
GrabKey(key_f10_, 0); |
+ int xkb_major_version = XkbMajorVersion; |
+ int xkb_minor_version = XkbMinorVersion; |
+ if (!XkbQueryExtension(GDK_DISPLAY(), |
+ NULL, // opcode_return |
+ &xkb_event_base_code_, |
+ NULL, // error_return |
+ &xkb_major_version, |
+ &xkb_minor_version)) { |
+ LOG(WARNING) << "Could not query Xkb extension"; |
+ } |
+ |
if (!XkbSelectEvents(GDK_DISPLAY(), XkbUseCoreKbd, |
XkbIndicatorStateNotifyMask, |
XkbIndicatorStateNotifyMask)) { |
@@ -188,12 +200,13 @@ void SystemKeyEventListener::OnCapslock() { |
} |
bool SystemKeyEventListener::ProcessedXEvent(XEvent* xevent) { |
- XkbEvent* xkey_event = reinterpret_cast<XkbEvent*>(xevent); |
- if (xkey_event->any.xkb_type == XkbIndicatorStateNotify) { |
- OnCapslock(); |
- return true; |
- } |
- if (xevent->type == KeyPress) { |
+ if (xevent->type == xkb_event_base_code_) { |
+ XkbEvent* xkey_event = reinterpret_cast<XkbEvent*>(xevent); |
+ if (xkey_event->any.xkb_type == XkbIndicatorStateNotify) { |
+ OnCapslock(); |
+ return true; |
+ } |
+ } else if (xevent->type == KeyPress) { |
int32 keycode = xevent->xkey.keycode; |
if (keycode) { |
// Only doing non-Alt/Shift/Ctrl modified keys |