Changeset 125715 in webkit
- Timestamp:
- Aug 15, 2012 3:14:05 PM (12 years ago)
- Location:
- trunk/Source
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r125713 r125715 1 2012-08-15 Iain Merrick <husky@chromium.org> 2 3 Refactoring: move EventHandler::targetNode into HitTestResult 4 https://bugs.webkit.org/show_bug.cgi?id=94107 5 6 Reviewed by Dimitri Glazkov. 7 8 This static helper method in EventHandler was made public so that 9 WebFrameImpl can call it. That's untidy because EventHandler isn't 10 really involved. This patch turns it into an instance method of 11 HitTestResult (with a wrapper in MouseEventWithHitTestResult for 12 convenience). 13 14 Pure refactoring, no behavior change, no new test needed. 15 16 * page/EventHandler.cpp: 17 (WebCore::EventHandler::selectClosestWordFromMouseEvent): 18 (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent): 19 (WebCore::EventHandler::handleMousePressEventTripleClick): 20 (WebCore::EventHandler::handleMousePressEventSingleClick): 21 (WebCore::EventHandler::handleMousePressEvent): 22 (WebCore::EventHandler::handleMouseDraggedEvent): 23 (WebCore::EventHandler::updateSelectionForMouseDrag): 24 (WebCore::EventHandler::handleMouseReleaseEvent): 25 (WebCore::EventHandler::subframeForHitTestResult): 26 (WebCore::EventHandler::selectCursor): 27 (WebCore::EventHandler::handleMouseDoubleClickEvent): 28 (WebCore::EventHandler::handleMouseMoveEvent): 29 (WebCore::EventHandler::updateDragAndDrop): 30 (WebCore::EventHandler::handleGestureEvent): 31 (WebCore::EventHandler::sendContextMenuEvent): 32 * page/EventHandler.h: 33 (EventHandler): 34 * page/MouseEventWithHitTestResults.h: 35 (WebCore::MouseEventWithHitTestResults::targetNode): 36 * page/chromium/EventHandlerChromium.cpp: 37 (WebCore::EventHandler::passMousePressEventToSubframe): 38 (WebCore::EventHandler::passWidgetMouseDownEventToWidget): 39 * page/efl/EventHandlerEfl.cpp: 40 (WebCore::EventHandler::passWidgetMouseDownEventToWidget): 41 * page/gtk/EventHandlerGtk.cpp: 42 (WebCore::EventHandler::passWidgetMouseDownEventToWidget): 43 * page/mac/EventHandlerMac.mm: 44 (WebCore::EventHandler::passWidgetMouseDownEventToWidget): 45 (WebCore::EventHandler::passSubframeEventToSubframe): 46 * page/wx/EventHandlerWx.cpp: 47 (WebCore::EventHandler::passWidgetMouseDownEventToWidget): 48 * rendering/HitTestResult.cpp: 49 (WebCore::HitTestResult::targetNode): 50 (WebCore): 51 * rendering/HitTestResult.h: 52 (HitTestResult): 53 1 54 2012-08-15 David Grogan <dgrogan@chromium.org> 2 55 -
trunk/Source/WebCore/page/EventHandler.cpp
r125615 r125715 418 418 void EventHandler::selectClosestWordFromMouseEvent(const MouseEventWithHitTestResults& result) 419 419 { 420 Node* innerNode = targetNode(result);420 Node* innerNode = result.targetNode(); 421 421 VisibleSelection newSelection; 422 422 … … 440 440 return selectClosestWordFromMouseEvent(result); 441 441 442 Node* innerNode = targetNode(result);442 Node* innerNode = result.targetNode(); 443 443 444 444 if (innerNode && innerNode->renderer() && m_mouseDownMayStartSelect) { … … 476 476 return false; 477 477 478 Node* innerNode = targetNode(event);478 Node* innerNode = event.targetNode(); 479 479 if (!(innerNode && innerNode->renderer() && m_mouseDownMayStartSelect)) 480 480 return false; … … 499 499 { 500 500 m_frame->document()->updateLayoutIgnorePendingStylesheets(); 501 Node* innerNode = targetNode(event);501 Node* innerNode = event.targetNode(); 502 502 if (!(innerNode && innerNode->renderer() && m_mouseDownMayStartSelect)) 503 503 return false; … … 581 581 // If we got the event back, that must mean it wasn't prevented, 582 582 // so it's allowed to start a drag or selection. 583 m_mouseDownMayStartSelect = canMouseDownStartSelect( targetNode(event));583 m_mouseDownMayStartSelect = canMouseDownStartSelect(event.targetNode()); 584 584 585 585 #if ENABLE(DRAG_SUPPORT) … … 611 611 focusDocumentView(); 612 612 613 Node* innerNode = targetNode(event);613 Node* innerNode = event.targetNode(); 614 614 615 615 m_mousePressNode = innerNode; … … 668 668 return false; 669 669 670 Node* targetNode = EventHandler::targetNode(event);670 Node* targetNode = event.targetNode(); 671 671 if (event.event().button() != LeftButton || !targetNode) 672 672 return false; … … 783 783 return; 784 784 785 Node* target = targetNode(hitTestResult);785 Node* target = hitTestResult.targetNode(); 786 786 if (!target) 787 787 return; … … 876 876 && event.event().button() != RightButton) { 877 877 VisibleSelection newSelection; 878 Node* node = targetNode(event);878 Node* node = event.targetNode(); 879 879 bool caretBrowsing = m_frame->settings() && m_frame->settings()->caretBrowsingEnabled(); 880 880 if (node && (caretBrowsing || node->rendererIsEditable()) && node->renderer()) { … … 1251 1251 if (!hitTestResult.isOverWidget()) 1252 1252 return 0; 1253 return subframeForTargetNode( targetNode(hitTestResult));1253 return subframeForTargetNode(hitTestResult.targetNode()); 1254 1254 } 1255 1255 … … 1292 1292 return NoCursorChange; 1293 1293 1294 Node* node = targetNode(event);1294 Node* node = event.targetNode(); 1295 1295 RenderObject* renderer = node ? node->renderer() : 0; 1296 1296 RenderStyle* style = renderer ? renderer->style() : 0; … … 1462 1462 } 1463 1463 1464 Node* EventHandler::targetNode(const MouseEventWithHitTestResults& event)1465 {1466 return targetNode(event.hitTestResult());1467 }1468 1469 Node* EventHandler::targetNode(const HitTestResult& hitTestResult)1470 {1471 Node* node = hitTestResult.innerNode();1472 if (!node)1473 return 0;1474 if (node->inDocument())1475 return node;1476 1477 Element* element = node->parentElement();1478 if (element && element->inDocument())1479 return element;1480 1481 return node;1482 1483 }1484 1485 1464 bool EventHandler::handleMousePressEvent(const PlatformMouseEvent& mouseEvent) 1486 1465 { … … 1528 1507 MouseEventWithHitTestResults mev = m_frame->document()->prepareMouseEvent(request, documentPoint, mouseEvent); 1529 1508 1530 if (! targetNode(mev)) {1509 if (!mev.targetNode()) { 1531 1510 invalidateClick(); 1532 1511 return false; 1533 1512 } 1534 1513 1535 m_mousePressNode = targetNode(mev);1514 m_mousePressNode = mev.targetNode(); 1536 1515 1537 1516 Frame* subframe = subframeForHitTestResult(mev); … … 1541 1520 m_capturesDragging = subframe->eventHandler()->capturesDragging(); 1542 1521 if (m_mousePressed && m_capturesDragging) { 1543 m_capturingMouseEventsNode = targetNode(mev);1522 m_capturingMouseEventsNode = mev.targetNode(); 1544 1523 m_eventHandlerWillResetCapturingMouseEventsNode = true; 1545 1524 } … … 1563 1542 1564 1543 m_clickCount = mouseEvent.clickCount(); 1565 m_clickNode = targetNode(mev);1544 m_clickNode = mev.targetNode(); 1566 1545 1567 1546 if (FrameView* view = m_frame->view()) { … … 1579 1558 m_frame->selection()->setCaretBlinkingSuspended(true); 1580 1559 1581 bool swallowEvent = dispatchMouseEvent(eventNames().mousedownEvent, targetNode(mev), true, m_clickCount, mouseEvent, true);1560 bool swallowEvent = dispatchMouseEvent(eventNames().mousedownEvent, mev.targetNode(), true, m_clickCount, mouseEvent, true); 1582 1561 m_capturesDragging = !swallowEvent || mev.scrollbar(); 1583 1562 … … 1605 1584 // we'd like to EventHandler::handleMousePressEvent to pass the event to the widget and thus the 1606 1585 // event target node can't still be the shadow node. 1607 if ( targetNode(mev)->isShadowRoot() && toShadowRoot(targetNode(mev))->host()->hasTagName(inputTag)) {1586 if (mev.targetNode()->isShadowRoot() && toShadowRoot(mev.targetNode())->host()->hasTagName(inputTag)) { 1608 1587 HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active); 1609 1588 mev = m_frame->document()->prepareMouseEvent(request, documentPoint, mouseEvent); … … 1647 1626 1648 1627 m_clickCount = mouseEvent.clickCount(); 1649 bool swallowMouseUpEvent = dispatchMouseEvent(eventNames().mouseupEvent, targetNode(mev), true, m_clickCount, mouseEvent, false);1650 1651 bool swallowClickEvent = mouseEvent.button() != RightButton && targetNode(mev) == m_clickNode && dispatchMouseEvent(eventNames().clickEvent, targetNode(mev), true, m_clickCount, mouseEvent, true);1628 bool swallowMouseUpEvent = dispatchMouseEvent(eventNames().mouseupEvent, mev.targetNode(), true, m_clickCount, mouseEvent, false); 1629 1630 bool swallowClickEvent = mouseEvent.button() != RightButton && mev.targetNode() == m_clickNode && dispatchMouseEvent(eventNames().clickEvent, mev.targetNode(), true, m_clickCount, mouseEvent, true); 1652 1631 1653 1632 if (m_lastScrollbarUnderMouse) … … 1798 1777 if (newSubframe) { 1799 1778 // Update over/out state before passing the event to the subframe. 1800 updateMouseEventTargetNode( targetNode(mev), mouseEvent, true);1779 updateMouseEventTargetNode(mev.targetNode(), mouseEvent, true); 1801 1780 1802 1781 // Event dispatch in updateMouseEventTargetNode may have caused the subframe of the target … … 1819 1798 return true; 1820 1799 1821 swallowEvent = dispatchMouseEvent(eventNames().mousemoveEvent, targetNode(mev), false, 0, mouseEvent, true);1800 swallowEvent = dispatchMouseEvent(eventNames().mousemoveEvent, mev.targetNode(), false, 0, mouseEvent, true); 1822 1801 #if ENABLE(DRAG_SUPPORT) 1823 1802 if (!swallowEvent) … … 1881 1860 return true; 1882 1861 1883 bool swallowMouseUpEvent = dispatchMouseEvent(eventNames().mouseupEvent, targetNode(mev), true, m_clickCount, mouseEvent, false);1884 1885 Node* clickTarget = targetNode(mev);1862 bool swallowMouseUpEvent = dispatchMouseEvent(eventNames().mouseupEvent, mev.targetNode(), true, m_clickCount, mouseEvent, false); 1863 1864 Node* clickTarget = mev.targetNode(); 1886 1865 if (clickTarget) 1887 1866 clickTarget = clickTarget->shadowAncestorNode(); 1888 1867 Node* adjustedClickNode = m_clickNode ? m_clickNode->shadowAncestorNode() : 0; 1889 1868 1890 bool swallowClickEvent = m_clickCount > 0 && mouseEvent.button() != RightButton && clickTarget == adjustedClickNode && dispatchMouseEvent(eventNames().clickEvent, targetNode(mev), true, m_clickCount, mouseEvent, true);1869 bool swallowClickEvent = m_clickCount > 0 && mouseEvent.button() != RightButton && clickTarget == adjustedClickNode && dispatchMouseEvent(eventNames().clickEvent, mev.targetNode(), true, m_clickCount, mouseEvent, true); 1891 1870 1892 1871 if (m_resizeLayer) { … … 1988 1967 1989 1968 // Drag events should never go to text nodes (following IE, and proper mouseover/out dispatch) 1990 RefPtr<Node> newTarget = targetNode(mev);1969 RefPtr<Node> newTarget = mev.targetNode(); 1991 1970 if (newTarget && newTarget->isTextNode()) 1992 1971 newTarget = newTarget->parentNode(); … … 2426 2405 if (!eventTarget) { 2427 2406 HitTestResult result = hitTestResultAtPoint(gestureEvent.position(), false, false, DontHitTestScrollbars, HitTestRequest::ReadOnly | HitTestRequest::Active); 2428 eventTarget = targetNode(result);2407 eventTarget = result.targetNode(); 2429 2408 } 2430 2409 … … 2581 2560 // If the selection is non-editable, we do word selection to make it easier to use the contextual menu items 2582 2561 // available for text selections. But only if we're above text. 2583 && (m_frame->selection()->isContentEditable() || ( targetNode(mev) && targetNode(mev)->isTextNode()))) {2562 && (m_frame->selection()->isContentEditable() || (mev.targetNode() && mev.targetNode()->isTextNode()))) { 2584 2563 m_mouseDownMayStartSelect = true; // context menu events are always allowed to perform a selection 2585 2564 selectClosestWordOrLinkFromMouseEvent(mev); 2586 2565 } 2587 2566 2588 swallowEvent = dispatchMouseEvent(eventNames().contextmenuEvent, targetNode(mev), true, 0, event, false);2567 swallowEvent = dispatchMouseEvent(eventNames().contextmenuEvent, mev.targetNode(), true, 0, event, false); 2589 2568 2590 2569 return swallowEvent; -
trunk/Source/WebCore/page/EventHandler.h
r125329 r125715 231 231 #endif 232 232 233 static Node* targetNode(const HitTestResult&);234 235 233 private: 236 234 #if ENABLE(DRAG_SUPPORT) … … 247 245 248 246 bool handleMouseDoubleClickEvent(const PlatformMouseEvent&); 249 250 static Node* targetNode(const MouseEventWithHitTestResults&);251 247 252 248 bool handleMousePressEvent(const MouseEventWithHitTestResults&); -
trunk/Source/WebCore/page/MouseEventWithHitTestResults.h
r96566 r125715 39 39 bool isOverLink() const; 40 40 bool isOverWidget() const { return m_hitTestResult.isOverWidget(); } 41 Node* targetNode() const { return m_hitTestResult.targetNode(); } 41 42 42 43 private: -
trunk/Source/WebCore/page/chromium/EventHandlerChromium.cpp
r122399 r125715 62 62 if (m_frame->selection()->contains(p)) { 63 63 VisiblePosition visiblePos( 64 targetNode(mev)->renderer()->positionForPoint(mev.localPoint()));64 mev.targetNode()->renderer()->positionForPoint(mev.localPoint())); 65 65 VisibleSelection newSelection(visiblePos); 66 66 if (m_frame->selection()->shouldChangeSelection(newSelection)) … … 104 104 { 105 105 // Figure out which view to send the event to. 106 if (! targetNode(event) || !targetNode(event)->renderer() || !targetNode(event)->renderer()->isWidget())106 if (!event.targetNode() || !event.targetNode()->renderer() || !event.targetNode()->renderer()->isWidget()) 107 107 return false; 108 return passMouseDownEventToWidget(toRenderWidget( targetNode(event)->renderer())->widget());108 return passMouseDownEventToWidget(toRenderWidget(event.targetNode()->renderer())->widget()); 109 109 } 110 110 -
trunk/Source/WebCore/page/efl/EventHandlerEfl.cpp
r115318 r125715 64 64 bool EventHandler::passWidgetMouseDownEventToWidget(const MouseEventWithHitTestResults& event) 65 65 { 66 RenderObject* target = targetNode(event) ? targetNode(event)->renderer() : 0;66 RenderObject* target = event.targetNode() ? event.targetNode()->renderer() : 0; 67 67 68 68 if (!target || !target->isWidget()) -
trunk/Source/WebCore/page/gtk/EventHandlerGtk.cpp
r122399 r125715 60 60 { 61 61 // Figure out which view to send the event to. 62 RenderObject* target = targetNode(event) ? targetNode(event)->renderer() : 0;62 RenderObject* target = event.targetNode() ? event.targetNode()->renderer() : 0; 63 63 if (!target || !target->isWidget()) 64 64 return false; -
trunk/Source/WebCore/page/mac/EventHandlerMac.mm
r117695 r125715 139 139 { 140 140 // Figure out which view to send the event to. 141 RenderObject* target = targetNode(event) ? targetNode(event)->renderer() : 0;141 RenderObject* target = event.targetNode() ? event.targetNode()->renderer() : 0; 142 142 if (!target || !target->isWidget()) 143 143 return false; … … 353 353 354 354 case NSLeftMouseDown: { 355 Node* node = targetNode(event);355 Node* node = event.targetNode(); 356 356 if (!node) 357 357 return false; -
trunk/Source/WebCore/page/wx/EventHandlerWx.cpp
r103196 r125715 64 64 { 65 65 // Figure out which view to send the event to. 66 if (! targetNode(event) || !targetNode(event)->renderer() || !targetNode(event)->renderer()->isWidget())66 if (!event.targetNode() || !event.targetNode()->renderer() || !event.targetNode()->renderer()->isWidget()) 67 67 return false; 68 68 69 return passMouseDownEventToWidget(toRenderWidget( targetNode(event)->renderer())->widget());69 return passMouseDownEventToWidget(toRenderWidget(event.targetNode()->renderer())->widget()); 70 70 } 71 71 -
trunk/Source/WebCore/rendering/HitTestResult.cpp
r125306 r125715 796 796 } 797 797 798 Node* HitTestResult::targetNode() const 799 { 800 Node* node = innerNode(); 801 if (!node) 802 return 0; 803 if (node->inDocument()) 804 return node; 805 806 Element* element = node->parentElement(); 807 if (element && element->inDocument()) 808 return element; 809 810 return node; 811 } 812 798 813 } // namespace WebCore -
trunk/Source/WebCore/rendering/HitTestResult.h
r123754 r125715 178 178 Vector<String> dictationAlternatives() const; 179 179 180 Node* targetNode() const; 181 180 182 private: 181 183 NodeSet& mutableRectBasedTestResult(); // See above. -
trunk/Source/WebKit/chromium/ChangeLog
r125713 r125715 1 2012-08-15 Iain Merrick <husky@chromium.org> 2 3 Refactoring: move EventHandler::targetNode into HitTestResult 4 https://bugs.webkit.org/show_bug.cgi?id=94107 5 6 Reviewed by Dimitri Glazkov. 7 8 This static helper method in EventHandler was made public so that 9 WebFrameImpl can call it. That's untidy because EventHandler isn't 10 really involved. This patch turns it into an instance method of 11 HitTestResult (with a wrapper in MouseEventWithHitTestResult for 12 convenience). 13 14 Pure refactoring, no behavior change, no new test needed. 15 16 * src/WebFrameImpl.cpp: 17 (WebKit::WebFrameImpl::visiblePositionForWindowPoint): 18 1 19 2012-08-15 David Grogan <dgrogan@chromium.org> 2 20 -
trunk/Source/WebKit/chromium/src/WebFrameImpl.cpp
r125615 r125715 1504 1504 frame()->document()->renderView()->layer()->hitTest(request, result); 1505 1505 1506 Node* node = EventHandler::targetNode(result);1506 Node* node = result.targetNode(); 1507 1507 if (!node) 1508 1508 return VisiblePosition();
Note: See TracChangeset
for help on using the changeset viewer.