Index: webkit/glue/editor_client_impl.cc |
=================================================================== |
--- webkit/glue/editor_client_impl.cc (revision 14923) |
+++ webkit/glue/editor_client_impl.cc (working copy) |
@@ -613,16 +613,20 @@ |
// Here we need to filter key events. |
// On Gtk/Linux, it emits key events with ASCII text and ctrl on for ctrl-<x>. |
- // In Webkit, EditorClient::handleKeyboardEvent in |
+ // In Webkit, EditorClient::handleKeyboardEvent in |
// WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp drop such events. |
// On Mac, it emits key events with ASCII text and meta on for Command-<x>. |
// These key events should not emit text insert event. |
// Alt key would be used to insert alternative character, so we should let |
- // through. Also note that Ctrl-Alt combination equals to AltGr key which is |
+ // through. Also note that Ctrl-Alt combination equals to AltGr key which is |
// also used to insert alternative character. |
// http://code.google.com/p/chromium/issues/detail?id=10846 |
- // In summary, we can't think of a scenario where you'd use control w/o alt or |
- // meta to do insertion of a ASCII character. |
+ // Windows sets both alt and meta are on when "Alt" key pressed. |
+ // http://code.google.com/p/chromium/issues/detail?id=2215 |
+ // Also, we should not rely on an assumption that keyboards don't |
+ // send ASCII characters when pressing a control key on Windows, |
+ // which may be configured to do it so by user. |
+ // See also http://en.wikipedia.org/wiki/Keyboard_Layout |
// TODO(ukai): investigate more detail for various keyboard layout. |
if (evt->keyEvent()->text().length() == 1) { |
UChar ch = evt->keyEvent()->text()[0U]; |
@@ -631,11 +635,18 @@ |
// unexpected behaviour |
if (ch < ' ') |
return false; |
+#if !defined(OS_WIN) |
// Don't insert ASCII character if ctrl w/o alt or meta is on. |
- if (ch < 0x80 && |
- ((evt->keyEvent()->ctrlKey() && !evt->keyEvent()->altKey()) || |
- evt->keyEvent()->metaKey())) |
- return false; |
+ // On Mac, we should ignore events when meta is on (Command-<x>). |
+ if (ch < 0x80) { |
+ if (evt->keyEvent()->ctrlKey() && !evt->keyEvent()->altKey()) |
+ return false; |
+#if defined(OS_MACOSX) |
+ if (evt->keyEvent()->metaKey()) |
+ return false; |
+#endif |
+ } |
+#endif |
} |
if (!frame->editor()->canEdit()) |