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 1593 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1604 return 0; | 1604 return 0; |
1605 | 1605 |
1606 return layer; | 1606 return layer; |
1607 } | 1607 } |
1608 | 1608 |
1609 bool EventHandler::mouseMoved(const PlatformMouseEvent& event) | 1609 bool EventHandler::mouseMoved(const PlatformMouseEvent& event) |
1610 { | 1610 { |
1611 RefPtr<FrameView> protector(m_frame->view()); | 1611 RefPtr<FrameView> protector(m_frame->view()); |
1612 MaximumDurationTracker maxDurationTracker(&m_maxMouseMovedDuration); | 1612 MaximumDurationTracker maxDurationTracker(&m_maxMouseMovedDuration); |
1613 | 1613 |
1614 | |
1615 #if ENABLE(TOUCH_EVENTS) | |
1616 // FIXME: this should be moved elsewhere to also be able to dispatch touchca
ncel events. | |
1617 bool defaultPrevented = dispatchSyntheticTouchEventIfEnabled(event); | |
1618 if (defaultPrevented) | |
1619 return true; | |
1620 #endif | |
1621 | |
1622 HitTestResult hoveredNode = HitTestResult(LayoutPoint()); | 1614 HitTestResult hoveredNode = HitTestResult(LayoutPoint()); |
1623 bool result = handleMouseMoveEvent(event, &hoveredNode); | 1615 bool result = handleMouseMoveEvent(event, &hoveredNode); |
1624 | 1616 |
1625 Page* page = m_frame->page(); | 1617 Page* page = m_frame->page(); |
1626 if (!page) | 1618 if (!page) |
1627 return result; | 1619 return result; |
1628 | 1620 |
1629 if (RenderLayer* layer = layerForNode(hoveredNode.innerNode())) { | 1621 if (RenderLayer* layer = layerForNode(hoveredNode.innerNode())) { |
1630 if (FrameView* frameView = m_frame->view()) { | 1622 if (FrameView* frameView = m_frame->view()) { |
1631 if (frameView->containsScrollableArea(layer)) | 1623 if (frameView->containsScrollableArea(layer)) |
(...skipping 19 matching lines...) Expand all Loading... |
1651 bool EventHandler::handleMouseMoveEvent(const PlatformMouseEvent& mouseEvent, Hi
tTestResult* hoveredNode, bool onlyUpdateScrollbars) | 1643 bool EventHandler::handleMouseMoveEvent(const PlatformMouseEvent& mouseEvent, Hi
tTestResult* hoveredNode, bool onlyUpdateScrollbars) |
1652 { | 1644 { |
1653 // in Radar 3703768 we saw frequent crashes apparently due to the | 1645 // in Radar 3703768 we saw frequent crashes apparently due to the |
1654 // part being null here, which seems impossible, so check for nil | 1646 // part being null here, which seems impossible, so check for nil |
1655 // but also assert so that we can try to figure this out in debug | 1647 // but also assert so that we can try to figure this out in debug |
1656 // builds, if it happens. | 1648 // builds, if it happens. |
1657 ASSERT(m_frame); | 1649 ASSERT(m_frame); |
1658 if (!m_frame) | 1650 if (!m_frame) |
1659 return false; | 1651 return false; |
1660 | 1652 |
| 1653 #if ENABLE(TOUCH_EVENTS) |
| 1654 bool defaultPrevented = dispatchSyntheticTouchEventIfEnabled(mouseEvent); |
| 1655 if (defaultPrevented) |
| 1656 return true; |
| 1657 #endif |
| 1658 |
1661 RefPtr<FrameView> protector(m_frame->view()); | 1659 RefPtr<FrameView> protector(m_frame->view()); |
1662 | 1660 |
1663 setLastKnownMousePosition(mouseEvent); | 1661 setLastKnownMousePosition(mouseEvent); |
1664 | 1662 |
1665 if (m_hoverTimer.isActive()) | 1663 if (m_hoverTimer.isActive()) |
1666 m_hoverTimer.stop(); | 1664 m_hoverTimer.stop(); |
1667 | 1665 |
1668 cancelFakeMouseMoveEvent(); | 1666 cancelFakeMouseMoveEvent(); |
1669 | 1667 |
1670 #if ENABLE(SVG) | 1668 #if ENABLE(SVG) |
(...skipping 2331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4002 | 4000 |
4003 bool EventHandler::dispatchSyntheticTouchEventIfEnabled(const PlatformMouseEvent
& event) | 4001 bool EventHandler::dispatchSyntheticTouchEventIfEnabled(const PlatformMouseEvent
& event) |
4004 { | 4002 { |
4005 if (!m_frame || !m_frame->settings() || !m_frame->settings()->isTouchEventEm
ulationEnabled()) | 4003 if (!m_frame || !m_frame->settings() || !m_frame->settings()->isTouchEventEm
ulationEnabled()) |
4006 return false; | 4004 return false; |
4007 | 4005 |
4008 PlatformEvent::Type eventType = event.type(); | 4006 PlatformEvent::Type eventType = event.type(); |
4009 if (eventType != PlatformEvent::MouseMoved && eventType != PlatformEvent::Mo
usePressed && eventType != PlatformEvent::MouseReleased) | 4007 if (eventType != PlatformEvent::MouseMoved && eventType != PlatformEvent::Mo
usePressed && eventType != PlatformEvent::MouseReleased) |
4010 return false; | 4008 return false; |
4011 | 4009 |
| 4010 HitTestRequest request(HitTestRequest::Active); |
| 4011 MouseEventWithHitTestResults mev = prepareMouseEvent(request, event); |
| 4012 if (mev.scrollbar() || subframeForHitTestResult(mev)) |
| 4013 return false; |
| 4014 |
| 4015 // The order is important. This check should follow the subframe test: http:
//webkit.org/b/111292. |
4012 if (eventType == PlatformEvent::MouseMoved && !m_touchPressed) | 4016 if (eventType == PlatformEvent::MouseMoved && !m_touchPressed) |
4013 return true; | 4017 return true; |
4014 | 4018 |
4015 HitTestRequest request(HitTestRequest::Active); | |
4016 MouseEventWithHitTestResults mev = prepareMouseEvent(request, event); | |
4017 | |
4018 if (mev.scrollbar() || subframeForHitTestResult(mev)) | |
4019 return false; | |
4020 | |
4021 SyntheticSingleTouchEvent touchEvent(event); | 4019 SyntheticSingleTouchEvent touchEvent(event); |
4022 return handleTouchEvent(touchEvent); | 4020 return handleTouchEvent(touchEvent); |
4023 } | 4021 } |
4024 | 4022 |
4025 #endif | 4023 #endif |
4026 | 4024 |
4027 void EventHandler::setLastKnownMousePosition(const PlatformMouseEvent& event) | 4025 void EventHandler::setLastKnownMousePosition(const PlatformMouseEvent& event) |
4028 { | 4026 { |
4029 m_mousePositionIsUnknown = false; | 4027 m_mousePositionIsUnknown = false; |
4030 m_lastKnownMousePosition = event.position(); | 4028 m_lastKnownMousePosition = event.position(); |
4031 m_lastKnownMouseGlobalPosition = event.globalPosition(); | 4029 m_lastKnownMouseGlobalPosition = event.globalPosition(); |
4032 } | 4030 } |
4033 | 4031 |
4034 } // namespace WebCore | 4032 } // namespace WebCore |
OLD | NEW |