summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/automation/ui_controls_aurax11.cc34
-rw-r--r--ui/base/keycodes/keyboard_code_conversion_x.cc6
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;
}
}