| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv
ed. | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv
ed. |
| 3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
| 4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) | 4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 667 bool swallowEvent = false; | 667 bool swallowEvent = false; |
| 668 m_mousePressed = true; | 668 m_mousePressed = true; |
| 669 m_selectionInitiationState = HaveNotStartedSelection; | 669 m_selectionInitiationState = HaveNotStartedSelection; |
| 670 | 670 |
| 671 if (event.event().clickCount() == 2) | 671 if (event.event().clickCount() == 2) |
| 672 swallowEvent = handleMousePressEventDoubleClick(event); | 672 swallowEvent = handleMousePressEventDoubleClick(event); |
| 673 else if (event.event().clickCount() >= 3) | 673 else if (event.event().clickCount() >= 3) |
| 674 swallowEvent = handleMousePressEventTripleClick(event); | 674 swallowEvent = handleMousePressEventTripleClick(event); |
| 675 else | 675 else |
| 676 swallowEvent = handleMousePressEventSingleClick(event); | 676 swallowEvent = handleMousePressEventSingleClick(event); |
| 677 | 677 |
| 678 m_mouseDownMayStartAutoscroll = m_mouseDownMayStartSelect | 678 m_mouseDownMayStartAutoscroll = m_mouseDownMayStartSelect |
| 679 || (m_mousePressNode && m_mousePressNode->renderBox() && m_mousePressNod
e->renderBox()->canBeProgramaticallyScrolled()); | 679 || (m_mousePressNode && m_mousePressNode->renderBox() && m_mousePressNod
e->renderBox()->canBeProgramaticallyScrolled()); |
| 680 | 680 |
| 681 return swallowEvent; | 681 return swallowEvent; |
| 682 } | 682 } |
| 683 | 683 |
| 684 bool EventHandler::handleMouseDraggedEvent(const MouseEventWithHitTestResults& e
vent) | 684 bool EventHandler::handleMouseDraggedEvent(const MouseEventWithHitTestResults& e
vent) |
| 685 { | 685 { |
| 686 if (!m_mousePressed) | 686 if (!m_mousePressed) |
| 687 return false; | 687 return false; |
| 688 | 688 |
| 689 if (handleDrag(event, ShouldCheckDragHysteresis)) | 689 if (handleDrag(event, ShouldCheckDragHysteresis)) |
| 690 return true; | 690 return true; |
| 691 | 691 |
| 692 Node* targetNode = event.targetNode(); | 692 if (event.event().button() != LeftButton || !event.targetNode()) |
| 693 if (event.event().button() != LeftButton || !targetNode) | |
| 694 return false; | 693 return false; |
| 695 | 694 |
| 696 RenderObject* renderer = targetNode->renderer(); | |
| 697 if (!renderer) { | |
| 698 Node* parent = EventPathWalker::parent(targetNode); | |
| 699 if (!parent) | |
| 700 return false; | |
| 701 | |
| 702 renderer = parent->renderer(); | |
| 703 if (!renderer || !renderer->isListBox()) | |
| 704 return false; | |
| 705 } | |
| 706 | |
| 707 m_mouseDownMayStartDrag = false; | 695 m_mouseDownMayStartDrag = false; |
| 708 | 696 |
| 709 if (m_mouseDownMayStartAutoscroll && !panScrollInProgress()) { | |
| 710 m_autoscrollController->startAutoscrollForSelection(renderer); | |
| 711 m_mouseDownMayStartAutoscroll = false; | |
| 712 } | |
| 713 | |
| 714 if (m_selectionInitiationState != ExtendedSelection) { | 697 if (m_selectionInitiationState != ExtendedSelection) { |
| 715 HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active
| HitTestRequest::DisallowShadowContent); | 698 HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active
| HitTestRequest::DisallowShadowContent); |
| 716 HitTestResult result(m_mouseDownPos); | 699 HitTestResult result(m_mouseDownPos); |
| 717 m_frame->document()->renderView()->hitTest(request, result); | 700 m_frame->document()->renderView()->hitTest(request, result); |
| 718 | 701 |
| 719 updateSelectionForMouseDrag(result); | 702 updateSelectionForMouseDrag(result); |
| 720 } | 703 } |
| 721 updateSelectionForMouseDrag(event.hitTestResult()); | 704 updateSelectionForMouseDrag(event.hitTestResult()); |
| 722 return true; | 705 return true; |
| 723 } | 706 } |
| (...skipping 910 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1634 return true; | 1617 return true; |
| 1635 } | 1618 } |
| 1636 | 1619 |
| 1637 bool swallowEvent = false; | 1620 bool swallowEvent = false; |
| 1638 RefPtr<Frame> newSubframe = m_capturingMouseEventsNode.get() ? subframeForTa
rgetNode(m_capturingMouseEventsNode.get()) : subframeForHitTestResult(mev); | 1621 RefPtr<Frame> newSubframe = m_capturingMouseEventsNode.get() ? subframeForTa
rgetNode(m_capturingMouseEventsNode.get()) : subframeForHitTestResult(mev); |
| 1639 | 1622 |
| 1640 // We want mouseouts to happen first, from the inside out. First send a mov
e event to the last subframe so that it will fire mouseouts. | 1623 // We want mouseouts to happen first, from the inside out. First send a mov
e event to the last subframe so that it will fire mouseouts. |
| 1641 if (m_lastMouseMoveEventSubframe && m_lastMouseMoveEventSubframe->tree()->is
DescendantOf(m_frame) && m_lastMouseMoveEventSubframe != newSubframe) | 1624 if (m_lastMouseMoveEventSubframe && m_lastMouseMoveEventSubframe->tree()->is
DescendantOf(m_frame) && m_lastMouseMoveEventSubframe != newSubframe) |
| 1642 passMouseMoveEventToSubframe(mev, m_lastMouseMoveEventSubframe.get()); | 1625 passMouseMoveEventToSubframe(mev, m_lastMouseMoveEventSubframe.get()); |
| 1643 | 1626 |
| 1627 Node* targetNode = mev.targetNode(); |
| 1628 |
| 1644 if (newSubframe) { | 1629 if (newSubframe) { |
| 1645 // Update over/out state before passing the event to the subframe. | 1630 // Update over/out state before passing the event to the subframe. |
| 1646 updateMouseEventTargetNode(mev.targetNode(), mouseEvent, true); | 1631 updateMouseEventTargetNode(targetNode, mouseEvent, true); |
| 1647 | 1632 |
| 1648 // Event dispatch in updateMouseEventTargetNode may have caused the subf
rame of the target | 1633 // Event dispatch in updateMouseEventTargetNode may have caused the subf
rame of the target |
| 1649 // node to be detached from its FrameView, in which case the event shoul
d not be passed. | 1634 // node to be detached from its FrameView, in which case the event shoul
d not be passed. |
| 1650 if (newSubframe->view()) | 1635 if (newSubframe->view()) |
| 1651 swallowEvent |= passMouseMoveEventToSubframe(mev, newSubframe.get(),
hoveredNode); | 1636 swallowEvent |= passMouseMoveEventToSubframe(mev, newSubframe.get(),
hoveredNode); |
| 1652 } else { | 1637 } else { |
| 1653 if (scrollbar && !m_mousePressed) | 1638 if (scrollbar && !m_mousePressed) |
| 1654 scrollbar->mouseMoved(mouseEvent); // Handle hover effects on platfo
rms that support visual feedback on scrollbar hovering. | 1639 scrollbar->mouseMoved(mouseEvent); // Handle hover effects on platfo
rms that support visual feedback on scrollbar hovering. |
| 1655 if (FrameView* view = m_frame->view()) { | 1640 if (FrameView* view = m_frame->view()) { |
| 1656 OptionalCursor optionalCursor = selectCursor(mev, scrollbar); | 1641 OptionalCursor optionalCursor = selectCursor(mev, scrollbar); |
| 1657 if (optionalCursor.isCursorChange()) { | 1642 if (optionalCursor.isCursorChange()) { |
| 1658 m_currentMouseCursor = optionalCursor.cursor(); | 1643 m_currentMouseCursor = optionalCursor.cursor(); |
| 1659 view->setCursor(m_currentMouseCursor); | 1644 view->setCursor(m_currentMouseCursor); |
| 1660 } | 1645 } |
| 1661 } | 1646 } |
| 1662 } | 1647 } |
| 1663 | 1648 |
| 1664 m_lastMouseMoveEventSubframe = newSubframe; | 1649 m_lastMouseMoveEventSubframe = newSubframe; |
| 1665 | 1650 |
| 1666 if (swallowEvent) | 1651 if (swallowEvent) |
| 1667 return true; | 1652 return true; |
| 1668 | 1653 |
| 1669 swallowEvent = !dispatchMouseEvent(eventNames().mousemoveEvent, mev.targetNo
de(), false, 0, mouseEvent, true); | 1654 swallowEvent = !dispatchMouseEvent(eventNames().mousemoveEvent, targetNode,
false, 0, mouseEvent, true); |
| 1655 |
| 1656 RenderObject* renderer = targetNode ? targetNode->renderer() : 0; |
| 1657 |
| 1658 if (renderer && m_mouseDownMayStartAutoscroll && !panScrollInProgress()) { |
| 1659 m_autoscrollController->startAutoscrollForSelection(renderer); |
| 1660 m_mouseDownMayStartAutoscroll = false; |
| 1661 } |
| 1662 |
| 1670 if (!swallowEvent) | 1663 if (!swallowEvent) |
| 1671 swallowEvent = handleMouseDraggedEvent(mev); | 1664 swallowEvent = handleMouseDraggedEvent(mev); |
| 1672 | 1665 |
| 1673 return swallowEvent; | 1666 return swallowEvent; |
| 1674 } | 1667 } |
| 1675 | 1668 |
| 1676 void EventHandler::invalidateClick() | 1669 void EventHandler::invalidateClick() |
| 1677 { | 1670 { |
| 1678 m_clickCount = 0; | 1671 m_clickCount = 0; |
| 1679 m_clickNode = 0; | 1672 m_clickNode = 0; |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1991 void EventHandler::setCapturingMouseEventsNode(PassRefPtr<Node> n) | 1984 void EventHandler::setCapturingMouseEventsNode(PassRefPtr<Node> n) |
| 1992 { | 1985 { |
| 1993 m_capturingMouseEventsNode = n; | 1986 m_capturingMouseEventsNode = n; |
| 1994 m_eventHandlerWillResetCapturingMouseEventsNode = false; | 1987 m_eventHandlerWillResetCapturingMouseEventsNode = false; |
| 1995 } | 1988 } |
| 1996 | 1989 |
| 1997 MouseEventWithHitTestResults EventHandler::prepareMouseEvent(const HitTestReques
t& request, const PlatformMouseEvent& mev) | 1990 MouseEventWithHitTestResults EventHandler::prepareMouseEvent(const HitTestReques
t& request, const PlatformMouseEvent& mev) |
| 1998 { | 1991 { |
| 1999 ASSERT(m_frame); | 1992 ASSERT(m_frame); |
| 2000 ASSERT(m_frame->document()); | 1993 ASSERT(m_frame->document()); |
| 2001 | 1994 |
| 2002 return m_frame->document()->prepareMouseEvent(request, documentPointForWindo
wPoint(m_frame, mev.position()), mev); | 1995 return m_frame->document()->prepareMouseEvent(request, documentPointForWindo
wPoint(m_frame, mev.position()), mev); |
| 2003 } | 1996 } |
| 2004 | 1997 |
| 2005 #if ENABLE(SVG) | 1998 #if ENABLE(SVG) |
| 2006 static inline SVGElementInstance* instanceAssociatedWithShadowTreeElement(Node*
referenceNode) | 1999 static inline SVGElementInstance* instanceAssociatedWithShadowTreeElement(Node*
referenceNode) |
| 2007 { | 2000 { |
| 2008 if (!referenceNode || !referenceNode->isSVGElement()) | 2001 if (!referenceNode || !referenceNode->isSVGElement()) |
| 2009 return 0; | 2002 return 0; |
| 2010 | 2003 |
| 2011 ShadowRoot* shadowRoot = referenceNode->containingShadowRoot(); | 2004 ShadowRoot* shadowRoot = referenceNode->containingShadowRoot(); |
| (...skipping 1988 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4000 unsigned EventHandler::accessKeyModifiers() | 3993 unsigned EventHandler::accessKeyModifiers() |
| 4001 { | 3994 { |
| 4002 #if OS(DARWIN) | 3995 #if OS(DARWIN) |
| 4003 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; | 3996 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; |
| 4004 #else | 3997 #else |
| 4005 return PlatformEvent::AltKey; | 3998 return PlatformEvent::AltKey; |
| 4006 #endif | 3999 #endif |
| 4007 } | 4000 } |
| 4008 | 4001 |
| 4009 } // namespace WebCore | 4002 } // namespace WebCore |
| OLD | NEW |