diff options
-rw-r--r-- | chrome/browser/automation/ui_controls_aurax11.cc | 34 | ||||
-rw-r--r-- | ui/base/keycodes/keyboard_code_conversion_x.cc | 6 |
2 files changed, 23 insertions, 17 deletions
diff --git a/chrome/browser/automation/ui_controls_aurax11.cc b/chrome/browser/automation/ui_controls_aurax11.cc index 021ca10..2080a1d 100644 --- a/chrome/browser/automation/ui_controls_aurax11.cc +++ b/chrome/browser/automation/ui_controls_aurax11.cc @@ -90,20 +90,24 @@ bool SendKeyPress(gfx::NativeWindow window, window, key, control, shift, alt, command, base::Closure()); } -void SetMaskAndKeycodeThenSend(XEvent* xevent, - unsigned int mask, - unsigned int keycode) { - xevent->xkey.state |= mask; - xevent->xkey.keycode = keycode; +void SetKeycodeAndSendThenMask(XEvent* xevent, + KeySym keysym, + unsigned int mask) { + xevent->xkey.keycode = + XKeysymToKeycode(base::MessagePumpX::GetDefaultXDisplay(), + keysym); aura::RootWindow::GetInstance()->PostNativeEvent(xevent); + xevent->xkey.state |= mask; } -void SetKeycodeAndSendThenUnmask(XEvent* xevent, +void UnmaskAndSetKeycodeThenSend(XEvent* xevent, unsigned int mask, - unsigned int keycode) { - xevent->xkey.keycode = keycode; - aura::RootWindow::GetInstance()->PostNativeEvent(xevent); + KeySym keysym) { xevent->xkey.state ^= mask; + xevent->xkey.keycode = + XKeysymToKeycode(base::MessagePumpX::GetDefaultXDisplay(), + keysym); + aura::RootWindow::GetInstance()->PostNativeEvent(xevent); } bool SendKeyPressNotifyWhenDone(gfx::NativeWindow window, @@ -117,11 +121,11 @@ bool SendKeyPressNotifyWhenDone(gfx::NativeWindow window, XEvent xevent = {0}; xevent.xkey.type = KeyPress; if (control) - SetMaskAndKeycodeThenSend(&xevent, ControlMask, XK_Control_L); + SetKeycodeAndSendThenMask(&xevent, XK_Control_L, ControlMask); if (shift) - SetMaskAndKeycodeThenSend(&xevent, ShiftMask, XK_Shift_L); + SetKeycodeAndSendThenMask(&xevent, XK_Shift_L, ShiftMask); if (alt) - SetMaskAndKeycodeThenSend(&xevent, Mod1Mask, XK_Alt_L); + SetKeycodeAndSendThenMask(&xevent, XK_Alt_L, Mod1Mask); xevent.xkey.keycode = XKeysymToKeycode(base::MessagePumpX::GetDefaultXDisplay(), ui::XKeysymForWindowsKeyCode(key, shift)); @@ -131,11 +135,11 @@ bool SendKeyPressNotifyWhenDone(gfx::NativeWindow window, xevent.xkey.type = KeyRelease; aura::RootWindow::GetInstance()->PostNativeEvent(&xevent); if (alt) - SetKeycodeAndSendThenUnmask(&xevent, Mod1Mask, XK_Alt_L); + UnmaskAndSetKeycodeThenSend(&xevent, Mod1Mask, XK_Alt_L); if (shift) - SetKeycodeAndSendThenUnmask(&xevent, ShiftMask, XK_Shift_L); + UnmaskAndSetKeycodeThenSend(&xevent, ShiftMask, XK_Shift_L); if (control) - SetKeycodeAndSendThenUnmask(&xevent, ControlMask, XK_Control_L); + UnmaskAndSetKeycodeThenSend(&xevent, ControlMask, XK_Control_L); DCHECK(!xevent.xkey.state); RunClosureAfterAllPendingUIEvents(closure); return true; diff --git a/ui/base/keycodes/keyboard_code_conversion_x.cc b/ui/base/keycodes/keyboard_code_conversion_x.cc index eda35b4..d7f8372 100644 --- a/ui/base/keycodes/keyboard_code_conversion_x.cc +++ b/ui/base/keycodes/keyboard_code_conversion_x.cc @@ -10,6 +10,7 @@ #include "base/basictypes.h" #include "base/logging.h" +#include "base/stringprintf.h" #include "base/utf_string_conversions.h" namespace ui { @@ -43,6 +44,7 @@ KeyboardCode KeyboardCodeFromXKeysym(unsigned int keysym) { return VKEY_DELETE; case XK_Tab: case XK_KP_Tab: + case XK_ISO_Left_Tab: return VKEY_TAB; case XK_Linefeed: case XK_Return: @@ -313,8 +315,7 @@ KeyboardCode KeyboardCodeFromXKeysym(unsigned int keysym) { // TODO(sad): some keycodes are still missing. } - - DLOG(WARNING) << "Unknown keycode: " << keysym; + DLOG(WARNING) << "Unknown keysym: " << StringPrintf("0x%x", keysym); return VKEY_UNKNOWN; } @@ -616,6 +617,7 @@ int XKeysymForWindowsKeyCode(KeyboardCode keycode, bool shift) { return XK_F1 + (keycode - VKEY_F1); default: + LOG(WARNING) << "Unknown keycode:" << keycode; return 0; } } |