summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2012-01-12 13:28:52 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-01-12 13:28:52 -0800
commitba81e047f713341871d6c084845963bfdc1d4aa2 (patch)
treec9f7b9c73a1367bde3a968ee1644e7d0690892a1
parenta0bdcf4b6af8cf34f8421c373f6b19b74e441db9 (diff)
parent9bce99defc63ccfabdb05a4a0fdb43d4c6447c54 (diff)
downloadexternal_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.cpp19
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);