summaryrefslogtreecommitdiffstats
path: root/ui/base/keycodes
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-25 16:58:53 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-25 16:58:53 +0000
commit6b1efe3b7fba6c62b020161bdc9eb9dd70fb3bb0 (patch)
treee71329badc4bf99ba3840435303ac6033dc91fbd /ui/base/keycodes
parent92da5d2733639e2bddaaf04233cc879799e31a38 (diff)
downloadchromium_src-6b1efe3b7fba6c62b020161bdc9eb9dd70fb3bb0.zip
chromium_src-6b1efe3b7fba6c62b020161bdc9eb9dd70fb3bb0.tar.gz
chromium_src-6b1efe3b7fba6c62b020161bdc9eb9dd70fb3bb0.tar.bz2
aura: Fix shift/ctrl/alt keyevents with RWHVA and X11.
One of the functions didn't really do what it claimed it did. This ended up causing problems where pressing just the shift key (or the ctrl or alt key) would cause some garbage character to show up. BUG=101440 TEST=manually Review URL: http://codereview.chromium.org/8380033 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@107141 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/base/keycodes')
-rw-r--r--ui/base/keycodes/keyboard_code_conversion_gtk.cc7
-rw-r--r--ui/base/keycodes/keyboard_code_conversion_x.cc12
-rw-r--r--ui/base/keycodes/keyboard_code_conversion_x.h7
3 files changed, 18 insertions, 8 deletions
diff --git a/ui/base/keycodes/keyboard_code_conversion_gtk.cc b/ui/base/keycodes/keyboard_code_conversion_gtk.cc
index 0eff5aa..7afed4b 100644
--- a/ui/base/keycodes/keyboard_code_conversion_gtk.cc
+++ b/ui/base/keycodes/keyboard_code_conversion_gtk.cc
@@ -39,11 +39,8 @@
#include <gdk/gdkkeysyms.h>
#include "build/build_config.h"
-#include "ui/base/keycodes/keyboard_codes_posix.h"
-
-#ifdef USE_X11
#include "ui/base/keycodes/keyboard_code_conversion_x.h"
-#endif
+#include "ui/base/keycodes/keyboard_codes_posix.h"
namespace ui {
@@ -637,14 +634,12 @@ int GdkNativeKeyCodeForWindowsKeyCode(KeyboardCode keycode, bool shift) {
KeyboardCode KeyboardCodeFromGdkEventKey(GdkEventKey* event) {
KeyboardCode keycode = WindowsKeyCodeForGdkKeyCode(event->keyval);
-#ifdef USE_X11
// Gtk's key values are same as X11's keysyms.
if (keycode == VKEY_UNKNOWN) {
unsigned int keyval =
DefaultXKeysymFromHardwareKeycode(event->hardware_keycode);
keycode = WindowsKeyCodeForGdkKeyCode(keyval);
}
-#endif
return keycode;
}
diff --git a/ui/base/keycodes/keyboard_code_conversion_x.cc b/ui/base/keycodes/keyboard_code_conversion_x.cc
index 4235fca..494caff 100644
--- a/ui/base/keycodes/keyboard_code_conversion_x.cc
+++ b/ui/base/keycodes/keyboard_code_conversion_x.cc
@@ -6,9 +6,11 @@
#include <X11/keysym.h>
#include <X11/Xlib.h>
+#include <X11/Xutil.h>
#include "base/basictypes.h"
#include "base/logging.h"
+#include "base/utf_string_conversions.h"
namespace ui {
@@ -289,6 +291,16 @@ KeyboardCode KeyboardCodeFromXKeysym(unsigned int keysym) {
return VKEY_UNKNOWN;
}
+unsigned int DefaultSymbolFromXEvent(XEvent* xev) {
+ char buf[6];
+ int bytes_written = XLookupString(&xev->xkey, buf, 6, NULL, NULL);
+ DCHECK_LE(bytes_written, 6);
+
+ string16 result;
+ return (bytes_written > 0 && UTF8ToUTF16(buf, bytes_written, &result) &&
+ result.length() == 1) ? result[0] : 0;
+}
+
unsigned int DefaultXKeysymFromHardwareKeycode(unsigned int hardware_code) {
static const unsigned int kHardwareKeycodeMap[] = {
0, // 0x00:
diff --git a/ui/base/keycodes/keyboard_code_conversion_x.h b/ui/base/keycodes/keyboard_code_conversion_x.h
index 17eab24..e42e02f 100644
--- a/ui/base/keycodes/keyboard_code_conversion_x.h
+++ b/ui/base/keycodes/keyboard_code_conversion_x.h
@@ -16,8 +16,11 @@ UI_EXPORT KeyboardCode KeyboardCodeFromXKeyEvent(XEvent* xev);
UI_EXPORT KeyboardCode KeyboardCodeFromXKeysym(unsigned int keysym);
-// Converts a hardware keycode into a key symbol on a standard US PC keyboard.
-UI_EXPORT unsigned int DefaultXKeysymFromHardwareKeycode(unsigned int keycode);
+// Returns a key symbol on a standard US PC keyboard from an XEvent.
+UI_EXPORT unsigned int DefaultSymbolFromXEvent(XEvent* xev);
+
+// Converts an X keycode into an X KeySym.
+unsigned int DefaultXKeysymFromHardwareKeycode(unsigned int keycode);
} // namespace ui