summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WebCore/page/EventHandler.cpp11
-rw-r--r--WebKit/android/jni/WebViewCore.cpp46
-rw-r--r--WebKit/android/jni/WebViewCore.h3
3 files changed, 37 insertions, 23 deletions
diff --git a/WebCore/page/EventHandler.cpp b/WebCore/page/EventHandler.cpp
index 1031a3d..c59ad00 100644
--- a/WebCore/page/EventHandler.cpp
+++ b/WebCore/page/EventHandler.cpp
@@ -79,6 +79,10 @@
#include "PlatformTouchEvent.h"
#endif
+#if defined(ANDROID_PLUGINS)
+#include "WebViewCore.h"
+#endif
+
namespace WebCore {
using namespace HTMLNames;
@@ -1849,6 +1853,13 @@ static Node* eventTargetNodeForDocument(Document* doc)
if (!doc)
return 0;
Node* node = doc->focusedNode();
+
+#if defined(ANDROID_PLUGINS)
+ if (!node && doc->frame() && doc->frame()->view())
+ node = android::WebViewCore::getWebViewCore(doc->frame()->view())
+ ->cursorNodeIsPlugin();
+#endif
+
if (!node && doc->isHTMLDocument())
node = doc->body();
if (!node)
diff --git a/WebKit/android/jni/WebViewCore.cpp b/WebKit/android/jni/WebViewCore.cpp
index 07f9fd4..29cfd3a 100644
--- a/WebKit/android/jni/WebViewCore.cpp
+++ b/WebKit/android/jni/WebViewCore.cpp
@@ -1157,6 +1157,29 @@ void WebViewCore::sendPluginEvent(const ANPEvent& evt)
}
}
+static bool nodeIsPlugin(Node* node) {
+ RenderObject* renderer = node->renderer();
+ if (renderer && renderer->isWidget()) {
+ Widget* widget = static_cast<RenderWidget*>(renderer)->widget();
+ return widget && widget->isPluginView();
+ }
+ return false;
+}
+
+Node* WebViewCore::cursorNodeIsPlugin() {
+ gCursorBoundsMutex.lock();
+ bool hasCursorBounds = m_hasCursorBounds;
+ Frame* frame = (Frame*) m_cursorFrame;
+ Node* node = (Node*) m_cursorNode;
+ gCursorBoundsMutex.unlock();
+ if (hasCursorBounds && CacheBuilder::validNode(m_mainFrame, frame, node)
+ && nodeIsPlugin(node)) {
+ return node;
+ }
+ return 0;
+}
+
+
///////////////////////////////////////////////////////////////////////////////
void WebViewCore::moveMouseIfLatest(int moveGeneration,
WebCore::Frame* frame, int x, int y)
@@ -1173,15 +1196,6 @@ void WebViewCore::moveMouseIfLatest(int moveGeneration,
moveMouse(frame, x, y);
}
-static bool nodeIsPlugin(Node* node) {
- RenderObject* renderer = node->renderer();
- if (renderer && renderer->isWidget()) {
- Widget* widget = static_cast<RenderWidget*>(renderer)->widget();
- return widget && widget->isPluginView();
- }
- return 0;
-}
-
// Update mouse position and may change focused node.
void WebViewCore::moveMouse(WebCore::Frame* frame, int x, int y)
{
@@ -1616,20 +1630,6 @@ bool WebViewCore::key(int keyCode, UChar32 unichar, int repeatCount, bool isShif
{
WebCore::EventHandler* eventHandler = m_mainFrame->eventHandler();
WebCore::Node* focusNode = currentFocus();
- if (!focusNode) {
- gCursorBoundsMutex.lock();
- bool hasCursorBounds = m_hasCursorBounds;
- Frame* frame = (Frame*) m_cursorFrame;
- Node* node = (Node*) m_cursorNode;
- gCursorBoundsMutex.unlock();
- if (hasCursorBounds
- && CacheBuilder::validNode(m_mainFrame, frame, node)
- && nodeIsPlugin(node)) {
- // check if this plugin really wants the key (TODO)
- DBG_NAV_LOGD("widget=%p is plugin", widget);
- focusNode = node;
- }
- }
if (focusNode) {
eventHandler = focusNode->document()->frame()->eventHandler();
}
diff --git a/WebKit/android/jni/WebViewCore.h b/WebKit/android/jni/WebViewCore.h
index e08bbb8..26e3a23 100644
--- a/WebKit/android/jni/WebViewCore.h
+++ b/WebKit/android/jni/WebViewCore.h
@@ -294,6 +294,9 @@ namespace android {
// send this event to all of the plugins who have the given flag set
void sendPluginEvent(const ANPEvent& evt, ANPEventFlag flag);
+ // return the cursorNode if it is a plugin
+ Node* cursorNodeIsPlugin();
+
// Notify the Java side whether it needs to pass down the touch events
void needTouchEvents(bool);