diff options
author | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-26 15:36:37 +0000 |
---|---|---|
committer | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-26 15:36:37 +0000 |
commit | 6d850f189679e9e60e8ef3135c037915f10cd6a9 (patch) | |
tree | 3b0c8ba2c5672c15880ff774b6d368877e4d8b3f /webkit/glue/event_conversion.cc | |
parent | b8e1f95cf888bba24fe3ef1d357474f23091235d (diff) | |
download | chromium_src-6d850f189679e9e60e8ef3135c037915f10cd6a9.zip chromium_src-6d850f189679e9e60e8ef3135c037915f10cd6a9.tar.gz chromium_src-6d850f189679e9e60e8ef3135c037915f10cd6a9.tar.bz2 |
Reverting key change (again); this breaks every keyboard layout test there is. Will fix and recommit.
Review URL: http://codereview.chromium.org/28186
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10469 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/event_conversion.cc')
-rw-r--r-- | webkit/glue/event_conversion.cc | 172 |
1 files changed, 161 insertions, 11 deletions
diff --git a/webkit/glue/event_conversion.cc b/webkit/glue/event_conversion.cc index 7ceaa2e..ea89652 100644 --- a/webkit/glue/event_conversion.cc +++ b/webkit/glue/event_conversion.cc @@ -20,7 +20,6 @@ MSVC_POP_WARNING(); #include "base/gfx/point.h" #include "base/logging.h" #include "webkit/glue/event_conversion.h" -#include "webkit/glue/glue_util.h" #include "webkit/glue/webinputevent.h" #include "webkit/glue/webkit_glue.h" @@ -140,8 +139,6 @@ static inline const PlatformKeyboardEvent::Type ToPlatformKeyboardEventType( return PlatformKeyboardEvent::KeyUp; case WebInputEvent::KEY_DOWN: return PlatformKeyboardEvent::KeyDown; - case WebInputEvent::RAW_KEY_DOWN: - return PlatformKeyboardEvent::RawKeyDown; case WebInputEvent::CHAR: return PlatformKeyboardEvent::Char; default: @@ -150,22 +147,175 @@ static inline const PlatformKeyboardEvent::Type ToPlatformKeyboardEventType( return PlatformKeyboardEvent::KeyDown; } -MakePlatformKeyboardEvent::MakePlatformKeyboardEvent( - const WebKeyboardEvent& e) { +static inline String ToSingleCharacterString(UChar c) { + return String(&c, 1); +} + +#if !defined(OS_MACOSX) +// This function is not used on Mac OS X, and gcc complains. +static String GetKeyIdentifierForWindowsKeyCode(unsigned short keyCode) { + switch (keyCode) { + case VKEY_MENU: + return "Alt"; + case VKEY_CONTROL: + return "Control"; + case VKEY_SHIFT: + return "Shift"; + case VKEY_CAPITAL: + return "CapsLock"; + case VKEY_LWIN: + case VKEY_RWIN: + return "Win"; + case VKEY_CLEAR: + return "Clear"; + case VKEY_DOWN: + return "Down"; + // "End" + case VKEY_END: + return "End"; + // "Enter" + case VKEY_RETURN: + return "Enter"; + case VKEY_EXECUTE: + return "Execute"; + case VKEY_F1: + return "F1"; + case VKEY_F2: + return "F2"; + case VKEY_F3: + return "F3"; + case VKEY_F4: + return "F4"; + case VKEY_F5: + return "F5"; + case VKEY_F6: + return "F6"; + case VKEY_F7: + return "F7"; + case VKEY_F8: + return "F8"; + case VKEY_F9: + return "F9"; + case VKEY_F10: + return "F11"; + case VKEY_F12: + return "F12"; + case VKEY_F13: + return "F13"; + case VKEY_F14: + return "F14"; + case VKEY_F15: + return "F15"; + case VKEY_F16: + return "F16"; + case VKEY_F17: + return "F17"; + case VKEY_F18: + return "F18"; + case VKEY_F19: + return "F19"; + case VKEY_F20: + return "F20"; + case VKEY_F21: + return "F21"; + case VKEY_F22: + return "F22"; + case VKEY_F23: + return "F23"; + case VKEY_F24: + return "F24"; + case VKEY_HELP: + return "Help"; + case VKEY_HOME: + return "Home"; + case VKEY_INSERT: + return "Insert"; + case VKEY_LEFT: + return "Left"; + case VKEY_NEXT: + return "PageDown"; + case VKEY_PRIOR: + return "PageUp"; + case VKEY_PAUSE: + return "Pause"; + case VKEY_SNAPSHOT: + return "PrintScreen"; + case VKEY_RIGHT: + return "Right"; + case VKEY_SCROLL: + return "Scroll"; + case VKEY_SELECT: + return "Select"; + case VKEY_UP: + return "Up"; + // Standard says that DEL becomes U+007F. + case VKEY_DELETE: + return "U+007F"; + default: + return String::format("U+%04X", toupper(keyCode)); + } +} +#endif // !defined(OS_MACOSX) + +MakePlatformKeyboardEvent::MakePlatformKeyboardEvent(const WebKeyboardEvent& e) + { m_type = ToPlatformKeyboardEventType(e.type); - m_text = webkit_glue::String16ToString(string16(e.text)); - m_unmodifiedText = webkit_glue::String16ToString(string16(e.unmodified_text)); - m_keyIdentifier = - webkit_glue::StdStringToString(std::string(e.key_identifier)); + if (m_type == Char || m_type == KeyDown) { +#if defined(OS_MACOSX) + m_text = &e.text[0]; + m_unmodifiedText = &e.unmodified_text[0]; + m_keyIdentifier = &e.key_identifier[0]; + + // Always use 13 for Enter/Return -- we don't want to use AppKit's + // different character for Enter. + if (m_windowsVirtualKeyCode == '\r') { + m_text = "\r"; + m_unmodifiedText = "\r"; + } + + // The adjustments below are only needed in backward compatibility mode, + // but we cannot tell what mode we are in from here. + + // Turn 0x7F into 8, because backspace needs to always be 8. + if (m_text == "\x7F") + m_text = "\x8"; + if (m_unmodifiedText == "\x7F") + m_unmodifiedText = "\x8"; + // Always use 9 for tab -- we don't want to use AppKit's different character for shift-tab. + if (m_windowsVirtualKeyCode == 9) { + m_text = "\x9"; + m_unmodifiedText = "\x9"; + } +#elif defined(OS_WIN) + m_text = m_unmodifiedText = ToSingleCharacterString(e.key_code); +#elif defined(OS_LINUX) + m_text = m_unmodifiedText = ToSingleCharacterString(e.text); +#endif + } +#if defined(OS_WIN) || defined(OS_LINUX) + if (m_type != Char) + m_keyIdentifier = GetKeyIdentifierForWindowsKeyCode(e.key_code); +#endif + if (m_type == Char || m_type == KeyDown || m_type == KeyUp || + m_type == RawKeyDown) { + m_windowsVirtualKeyCode = e.key_code; + } else { + m_windowsVirtualKeyCode = 0; + } m_autoRepeat = (e.modifiers & WebInputEvent::IS_AUTO_REPEAT) != 0; - m_windowsVirtualKeyCode = e.windows_key_code; - m_nativeVirtualKeyCode = e.native_key_code; m_isKeypad = (e.modifiers & WebInputEvent::IS_KEYPAD) != 0; m_shiftKey = (e.modifiers & WebInputEvent::SHIFT_KEY) != 0; m_ctrlKey = (e.modifiers & WebInputEvent::CTRL_KEY) != 0; m_altKey = (e.modifiers & WebInputEvent::ALT_KEY) != 0; m_metaKey = (e.modifiers & WebInputEvent::META_KEY) != 0; +#if defined(OS_WIN) m_isSystemKey = e.system_key; +// TODO(port): set this field properly for linux and mac. +#elif defined(OS_LINUX) + m_isSystemKey = m_altKey; +#else + m_isSystemKey = false; +#endif } void MakePlatformKeyboardEvent::SetKeyType(Type type) { |