WebCore:
Move logic for calling mouseDidMoveOverElement into WebCore
Reviewed by Sam.
* page/EventHandler.cpp:
(WebCore::EventHandler::mouseMoved): Added. Calls Chrome::mouseDidMoveOverElement.
(WebCore::EventHandler::handleMouseMoveEvent): Now takes an optional
HitTestResult* parameter which is used to communicate to the caller the
node the mouse is over.
* page/EventHandler.h:
* page/mac/EventHandlerMac.mm:
(WebCore::EventHandler::mouseMoved): Changed to call the overloaded
mouseMoved().
(WebCore::EventHandler::passMouseMoveEventToSubframe): Pass hoveredNode
through to the subframe so we can get the deepest node hovered, not
just the node's parent frame.
* page/win/EventHandlerWin.cpp:
(WebCore::EventHandler::passMouseMoveEventToSubframe): Ditto.
WebKit:
Removed call to mouseDidMoveOverElement now that WebCore handles it
Reviewed by Sam.
* WebView/WebHTMLView.mm:
(-[WebHTMLView _updateMouseoverWithEvent:]):
WebKit/win:
Removed call to mouseDidMoveOverElement now that WebCore handles it
Reviewed by Sam.
* WebView.cpp:
(WebView::handleMouseEvent):
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@23998
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2007-07-04 Adam Roben <aroben@apple.com>
+
+ Move logic for calling mouseDidMoveOverElement into WebCore
+
+ Reviewed by Sam.
+
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::mouseMoved): Added. Calls Chrome::mouseDidMoveOverElement.
+ (WebCore::EventHandler::handleMouseMoveEvent): Now takes an optional
+ HitTestResult* parameter which is used to communicate to the caller the
+ node the mouse is over.
+ * page/EventHandler.h:
+ * page/mac/EventHandlerMac.mm:
+ (WebCore::EventHandler::mouseMoved): Changed to call the overloaded
+ mouseMoved().
+ (WebCore::EventHandler::passMouseMoveEventToSubframe): Pass hoveredNode
+ through to the subframe so we can get the deepest node hovered, not
+ just the node's parent frame.
+ * page/win/EventHandlerWin.cpp:
+ (WebCore::EventHandler::passMouseMoveEventToSubframe): Ditto.
+
2007-07-04 Adam Roben <aroben@apple.com>
Add Chrome::mouseDidMoveOverElement
return swallowMouseUpEvent || swallowClickEvent || swallowMouseReleaseEvent;
}
-bool EventHandler::handleMouseMoveEvent(const PlatformMouseEvent& mouseEvent)
+bool EventHandler::mouseMoved(const PlatformMouseEvent& event)
+{
+ HitTestResult hoveredNode = HitTestResult(IntPoint());
+ bool result = handleMouseMoveEvent(event, &hoveredNode);
+
+ Page* page = m_frame->page();
+ if (!page)
+ return result;
+
+ hoveredNode.setToNonShadowAncestor();
+ page->chrome()->mouseDidMoveOverElement(hoveredNode, event.modifierFlags());
+ return result;
+}
+
+bool EventHandler::handleMouseMoveEvent(const PlatformMouseEvent& mouseEvent, HitTestResult* hoveredNode)
{
// in Radar 3703768 we saw frequent crashes apparently due to the
// part being null here, which seems impossible, so check for nil
RefPtr<FrameView> protector(m_frame->view());
m_currentMousePosition = mouseEvent.pos();
-
+
if (m_hoverTimer.isActive())
m_hoverTimer.stop();
// was pressed, rather than updating for nodes the mouse moves over as you hold the mouse down.
HitTestRequest request(m_mousePressed && m_mouseDownMayStartSelect, m_mousePressed, true);
MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseEvent);
+ if (hoveredNode)
+ *hoveredNode = mev.hitTestResult();
PlatformScrollbar* scrollbar = 0;
if (newSubframe) {
// Update over/out state before passing the event to the subframe.
updateMouseEventTargetNode(mev.targetNode(), mouseEvent, true);
- swallowEvent |= passMouseMoveEventToSubframe(mev, newSubframe.get());
+ swallowEvent |= passMouseMoveEventToSubframe(mev, newSubframe.get(), hoveredNode);
} else {
if (scrollbar && !m_mousePressed)
scrollbar->handleMouseMoveEvent(mouseEvent); // Handle hover effects on platforms that support visual feedback on scrollbar hovering.
bool mouseDownMayStartSelect() const { return m_mouseDownMayStartSelect; }
+ bool mouseMoved(const PlatformMouseEvent&);
+
bool handleMousePressEvent(const PlatformMouseEvent&);
- bool handleMouseMoveEvent(const PlatformMouseEvent&);
+ bool handleMouseMoveEvent(const PlatformMouseEvent&, HitTestResult* hoveredNode = 0);
bool handleMouseReleaseEvent(const PlatformMouseEvent&);
bool handleWheelEvent(PlatformWheelEvent&);
bool dragHysteresisExceeded(const IntPoint&) const;
bool passMousePressEventToSubframe(MouseEventWithHitTestResults&, Frame* subframe);
- bool passMouseMoveEventToSubframe(MouseEventWithHitTestResults&, Frame* subframe);
+ bool passMouseMoveEventToSubframe(MouseEventWithHitTestResults&, Frame* subframe, HitTestResult* hoveredNode = 0);
bool passMouseReleaseEventToSubframe(MouseEventWithHitTestResults&, Frame* subframe);
bool passSubframeEventToSubframe(MouseEventWithHitTestResults&, Frame* subframe);
RetainPtr<NSEvent> oldCurrentEvent = currentEvent();
currentEvent() = event;
- handleMouseMoveEvent(event);
+ mouseMoved(PlatformMouseEvent(event));
ASSERT(currentEvent() == event);
currentEvent() = oldCurrentEvent;
return passSubframeEventToSubframe(mev, subframe);
}
-bool EventHandler::passMouseMoveEventToSubframe(MouseEventWithHitTestResults& mev, Frame* subframe)
+bool EventHandler::passMouseMoveEventToSubframe(MouseEventWithHitTestResults& mev, Frame* subframe, HitTestResult* hoveredNode)
{
- return passSubframeEventToSubframe(mev, subframe);
+ return passSubframeEventToSubframe(mev, subframe, hoveredNode);
}
bool EventHandler::passMouseReleaseEventToSubframe(MouseEventWithHitTestResults& mev, Frame* subframe)
return true;
}
-bool EventHandler::passMouseMoveEventToSubframe(MouseEventWithHitTestResults& mev, Frame* subframe)
+bool EventHandler::passMouseMoveEventToSubframe(MouseEventWithHitTestResults& mev, Frame* subframe, HitTestResult* hoveredNode)
{
- subframe->eventHandler()->handleMouseMoveEvent(mev.event());
+ subframe->eventHandler()->handleMouseMoveEvent(mev.event(), hoveredNode);
return true;
}
+2007-07-04 Adam Roben <aroben@apple.com>
+
+ Removed call to mouseDidMoveOverElement now that WebCore handles it
+
+ Reviewed by Sam.
+
+ * WebView/WebHTMLView.mm:
+ (-[WebHTMLView _updateMouseoverWithEvent:]):
+
2007-07-04 Adam Roben <aroben@apple.com>
Add WebChromeClient::mouseDidMoveOverElement
NSPoint point = [view convertPoint:[event locationInWindow] fromView:nil];
NSDictionary *element = [view elementAtPoint:point];
- // Have the web view send a message to the delegate so it can do status bar display.
- [[view _webView] _mouseDidMoveOverElement:element modifierFlags:[event modifierFlags]];
-
// Set a tool tip; it won't show up right away but will if the user pauses.
// First priority is a potential toolTip representing a spelling or grammar error
+2007-07-04 Adam Roben <aroben@apple.com>
+
+ Removed call to mouseDidMoveOverElement now that WebCore handles it
+
+ Reviewed by Sam.
+
+ * WebView.cpp:
+ (WebView::handleMouseEvent):
+
2007-07-04 Adam Roben <aroben@apple.com>
Add WebChromeClient::mouseDidMoveOverElement
if (!insideThreshold)
globalClickCount = 0;
mouseEvent.setClickCount(globalClickCount);
- handled = m_page->mainFrame()->eventHandler()->handleMouseMoveEvent(mouseEvent);
-
- if (m_uiDelegate) {
- COMPtr<IPropertyBag> props;
- POINT contentsPoint = m_page->mainFrame()->view()->windowToContents(mouseEvent.pos());
- if (SUCCEEDED(elementAtPoint(&contentsPoint, &props)))
- m_uiDelegate->mouseDidMoveOverElement((IWebView*)this, props.get(), (UINT)wParam);
- }
+ handled = m_page->mainFrame()->eventHandler()->mouseMoved(mouseEvent);
}
setMouseActivated(false);
return handled;