summaryrefslogtreecommitdiffstats
path: root/WebCore/plugins
diff options
context:
space:
mode:
authorDerek Sollenberger <djsollen@google.com>2009-07-08 11:12:17 -0400
committerDerek Sollenberger <djsollen@google.com>2009-07-08 11:19:01 -0400
commit939b5797c66ea70736c01eaec2dc694c909035d3 (patch)
treedd8b1d609891a456f8ce4faeec4bbfb89d768514 /WebCore/plugins
parent0885686d97474c998533e9d2fafd9dddc88c767e (diff)
downloadexternal_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.cpp23
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();