diff options
-rw-r--r-- | WebCore/page/EventHandler.cpp | 11 | ||||
-rw-r--r-- | WebKit/android/jni/WebViewCore.cpp | 46 | ||||
-rw-r--r-- | WebKit/android/jni/WebViewCore.h | 3 |
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); |