diff options
author | John Reck <jreck@google.com> | 2012-01-12 13:28:52 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-01-12 13:28:52 -0800 |
commit | ba81e047f713341871d6c084845963bfdc1d4aa2 (patch) | |
tree | c9f7b9c73a1367bde3a968ee1644e7d0690892a1 | |
parent | a0bdcf4b6af8cf34f8421c373f6b19b74e441db9 (diff) | |
parent | 9bce99defc63ccfabdb05a4a0fdb43d4c6447c54 (diff) | |
download | external_webkit-ba81e047f713341871d6c084845963bfdc1d4aa2.zip external_webkit-ba81e047f713341871d6c084845963bfdc1d4aa2.tar.gz external_webkit-ba81e047f713341871d6c084845963bfdc1d4aa2.tar.bz2 |
Merge "Move mouse on hit detection"
-rw-r--r-- | Source/WebKit/android/jni/WebViewCore.cpp | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/Source/WebKit/android/jni/WebViewCore.cpp b/Source/WebKit/android/jni/WebViewCore.cpp index b7c4648..42e71b2 100644 --- a/Source/WebKit/android/jni/WebViewCore.cpp +++ b/Source/WebKit/android/jni/WebViewCore.cpp @@ -1665,7 +1665,7 @@ Vector<IntRect> WebViewCore::getTouchHighlightRects(int x, int y, int slop, Node** node, HitTestResult* hitTestResult) { Vector<IntRect> rects; - m_mousePos = IntPoint(x - m_scrollOffsetX, y - m_scrollOffsetY); + moveMouse(m_mainFrame, x, y); *hitTestResult = m_mainFrame->eventHandler()->hitTestResultAtPoint(IntPoint(x, y), false, false, DontHitTestScrollbars, HitTestRequest::Active | HitTestRequest::ReadOnly, IntSize(slop, slop)); if (!hitTestResult->innerNode() || !hitTestResult->innerNode()->inDocument()) { @@ -1679,8 +1679,6 @@ Vector<IntRect> WebViewCore::getTouchHighlightRects(int x, int y, int slop, } Frame* frame = hitTestResult->innerNode()->document()->frame(); Vector<TouchNodeData> nodeDataList; - ALOGD("innerNode: %p, %s", hitTestResult->innerNode(), hitTestResult->innerNode()->nodeName().ascii().data()); - ALOGD("innerNonSharedNode: %p, %s", hitTestResult->innerNonSharedNode(), hitTestResult->innerNonSharedNode()->nodeName().ascii().data()); if (hitTestResult->innerNode() != hitTestResult->innerNonSharedNode() && hitTestResult->innerNode()->hasTagName(WebCore::HTMLNames::areaTag)) { TouchNodeData newNode; @@ -1705,7 +1703,8 @@ Vector<IntRect> WebViewCore::getTouchHighlightRects(int x, int y, int slop, if (eventNode->supportsFocus() || eventNode->hasEventListeners(eventNames().clickEvent) || eventNode->hasEventListeners(eventNames().mousedownEvent) - || eventNode->hasEventListeners(eventNames().mouseupEvent)) { + || eventNode->hasEventListeners(eventNames().mouseupEvent) + || eventNode->hasEventListeners(eventNames().mouseoverEvent)) { found = true; break; } @@ -1804,9 +1803,13 @@ Vector<IntRect> WebViewCore::getTouchHighlightRects(int x, int y, int slop, area = a; } } - *node = final.mNode; // now get the node's highlight rectangles in the page coordinate system if (final.mNode) { + if (final.mNode->isElementNode()) { + // We found a URL element. Update the hitTestResult + *node = final.mNode; + hitTestResult->setURLElement(static_cast<Element*>(final.mNode)); + } IntPoint frameAdjust; if (frame != m_mainFrame) { frameAdjust = frame->view()->contentsToWindow(IntPoint()); @@ -1871,8 +1874,7 @@ Vector<IntRect> WebViewCore::getTouchHighlightRects(int x, int y, int slop, newx = rects[0].x(); newy = rects[0].y(); } - m_mousePos.setX(newx - m_scrollOffsetX); - m_mousePos.setY(newy - m_scrollOffsetY); + moveMouse(m_mainFrame, newx, newy); DBG_NAV_LOGD("Move x/y from (%d, %d) to (%d, %d) scrollOffset is (%d, %d)", x, y, m_mousePos.x() + m_scrollOffsetX, m_mousePos.y() + m_scrollOffsetY, m_scrollOffsetX, m_scrollOffsetY); @@ -1887,8 +1889,7 @@ Vector<IntRect> WebViewCore::getTouchHighlightRects(int x, int y, int slop, testRect.move(frameAdjust.x(), frameAdjust.y()); testRect.intersect(rect); if (!testRect.contains(x, y)) { - m_mousePos = testRect.center(); - m_mousePos.move(-m_scrollOffsetX, -m_scrollOffsetY); + moveMouse(m_mainFrame, testRect.center().x(), testRect.center().y()); DBG_NAV_LOGD("Move x/y from (%d, %d) to (%d, %d) scrollOffset is (%d, %d)", x, y, m_mousePos.x() + m_scrollOffsetX, m_mousePos.y() + m_scrollOffsetY, m_scrollOffsetX, m_scrollOffsetY); |