diff options
author | Derek Sollenberger <djsollen@google.com> | 2009-07-08 11:12:17 -0400 |
---|---|---|
committer | Derek Sollenberger <djsollen@google.com> | 2009-07-08 11:19:01 -0400 |
commit | 939b5797c66ea70736c01eaec2dc694c909035d3 (patch) | |
tree | dd8b1d609891a456f8ce4faeec4bbfb89d768514 /WebCore/plugins | |
parent | 0885686d97474c998533e9d2fafd9dddc88c767e (diff) | |
download | external_webkit-939b5797c66ea70736c01eaec2dc694c909035d3.zip external_webkit-939b5797c66ea70736c01eaec2dc694c909035d3.tar.gz external_webkit-939b5797c66ea70736c01eaec2dc694c909035d3.tar.bz2 |
Ensuring the plugin maintains control of the nav keys until it explicity releases them.
Diffstat (limited to 'WebCore/plugins')
-rw-r--r-- | WebCore/plugins/android/PluginViewAndroid.cpp | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/WebCore/plugins/android/PluginViewAndroid.cpp b/WebCore/plugins/android/PluginViewAndroid.cpp index 112a9a2..5070792 100644 --- a/WebCore/plugins/android/PluginViewAndroid.cpp +++ b/WebCore/plugins/android/PluginViewAndroid.cpp @@ -289,6 +289,8 @@ void PluginView::handleKeyboardEvent(KeyboardEvent* event) return; } + bool ignoreEvent = false; + ANPEvent evt; SkANP::InitEvent(&evt, kKey_ANPEventType); @@ -297,7 +299,8 @@ void PluginView::handleKeyboardEvent(KeyboardEvent* event) #ifdef TRACE_KEY_EVENTS SkDebugf("--------- KeyDown, ignore\n"); #endif - return; + ignoreEvent = true; + break; case PlatformKeyboardEvent::RawKeyDown: evt.data.key.action = kDown_ANPKeyAction; break; @@ -305,7 +308,8 @@ void PluginView::handleKeyboardEvent(KeyboardEvent* event) #ifdef TRACE_KEY_EVENTS SkDebugf("--------- Char, ignore\n"); #endif - return; + ignoreEvent = true; + break; case PlatformKeyboardEvent::KeyUp: evt.data.key.action = kUp_ANPKeyAction; break; @@ -313,8 +317,21 @@ void PluginView::handleKeyboardEvent(KeyboardEvent* event) #ifdef TRACE_KEY_EVENTS SkDebugf("------ unexpected keyevent type %d\n", pke->type()); #endif - return; + ignoreEvent = true; + break; } + + /* the plugin should be the only party able to return nav control to the + * browser UI. Therefore, if we discard an event on behalf of the plugin + * we should mark the event as being handled. + */ + if (ignoreEvent) { + int keyCode = pke->nativeVirtualKeyCode(); + if (keyCode >= kDpadUp_ANPKeyCode && keyCode <= kDpadCenter_ANPKeyCode) + event->setDefaultHandled(); + return; + } + evt.data.key.nativeCode = pke->nativeVirtualKeyCode(); evt.data.key.virtualCode = pke->windowsVirtualKeyCode(); evt.data.key.repeatCount = pke->repeatCount(); |