diff options
author | ukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-30 00:29:15 +0000 |
---|---|---|
committer | ukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-30 00:29:15 +0000 |
commit | f5ff98854a36d071860f450a43a269648eceff42 (patch) | |
tree | 080bd275c6adc45b34b11b861e3907d76cf5ba4c /webkit/glue | |
parent | 8206c7cdb13fb1ea1cd657ba5edcac499621c9a8 (diff) | |
download | chromium_src-f5ff98854a36d071860f450a43a269648eceff42.zip chromium_src-f5ff98854a36d071860f450a43a269648eceff42.tar.gz chromium_src-f5ff98854a36d071860f450a43a269648eceff42.tar.bz2 |
Don't insert ASCII character with ctrl(w/o/ alt) or meta is on.
On Gtk/Linux, it emits key events with ASCII text and ctrl on for ctrl-<x>.
In WebKit, EditorClient::handleKeyboardEvent in
WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp drops such events.
On Mac, it emits key events with ASCII text and meta is 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.
Ctrl-Alt combination may equal to AltGr key, which is also used to insert
alternative character.
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.
BUG=10846,11070,11165
Review URL: http://codereview.chromium.org/99209
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14921 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue')
-rw-r--r-- | webkit/glue/editor_client_impl.cc | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/webkit/glue/editor_client_impl.cc b/webkit/glue/editor_client_impl.cc index b6a2f37..6f27d16 100644 --- a/webkit/glue/editor_client_impl.cc +++ b/webkit/glue/editor_client_impl.cc @@ -611,6 +611,19 @@ bool EditorClientImpl::handleEditingKeyboardEvent( return true; } + // 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 + // 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 + // 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. + // TODO(ukai): investigate more detail for various keyboard layout. if (evt->keyEvent()->text().length() == 1) { UChar ch = evt->keyEvent()->text()[0U]; @@ -618,6 +631,11 @@ bool EditorClientImpl::handleEditingKeyboardEvent( // unexpected behaviour if (ch < ' ') return false; + // 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; } if (!frame->editor()->canEdit()) |