Changeset 106554 in webkit
- Timestamp:
- Feb 2, 2012 7:09:48 AM (12 years ago)
- Location:
- trunk/Source
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r106552 r106554 1 2012-02-02 Allan Sandfeld Jensen <allan.jensen@nokia.com> 2 3 Update active and hover state on touch release. 4 https://bugs.webkit.org/show_bug.cgi?id=77620 5 6 Reviewed by Kenneth Rohde Christiansen. 7 8 * rendering/HitTestRequest.h: 9 (WebCore::HitTestRequest::move): 10 (WebCore::HitTestRequest::release): 11 (WebCore::HitTestRequest::touchEvent): 12 (WebCore::HitTestRequest::mouseEvent): 13 (WebCore::HitTestRequest::touchMove): 14 (WebCore::HitTestRequest::touchRelease): 15 Rename the enum values in HitTestRequest to be mouse/touch 16 agnostic, and add value for recognizing touch events. 17 * rendering/RenderFrameSet.cpp: 18 (WebCore::RenderFrameSet::nodeAtPoint): Update for HitTestRequest rename. 19 * rendering/RenderLayer.cpp: 20 (WebCore::RenderLayer::hitTest): ditto 21 (WebCore::RenderLayer::updateHoverActiveState): Reset hoverstate on touch release. 22 * page/EventHandler.cpp: 23 (WebCore::EventHandler::updateSelectionForMouseDrag): Update for HitTestRequest rename. 24 (WebCore::EventHandler::handleMouseMoveEvent): ditto 25 (WebCore::EventHandler::handleMouseReleaseEvent): ditto 26 (WebCore::EventHandler::hoverTimerFired): ditto 27 (WebCore::EventHandler::dragSourceEndedAt): ditto 28 (WebCore::EventHandler::handleTouchEvent): Hittest touch release to reset 29 active and hover states and add touch enum to all touch hittests. 30 1 31 2012-02-02 Pavel Feldman <pfeldman@google.com> 2 32 -
trunk/Source/WebCore/page/EventHandler.cpp
r106488 r106554 647 647 HitTestRequest request(HitTestRequest::ReadOnly | 648 648 HitTestRequest::Active | 649 HitTestRequest::Mo useMove);649 HitTestRequest::Move); 650 650 HitTestResult result(view->windowToContents(m_currentMousePosition)); 651 651 layer->hitTest(request, result); … … 1621 1621 return m_lastScrollbarUnderMouse->mouseMoved(mouseEvent); 1622 1622 1623 HitTestRequest::HitTestRequestType hitType = HitTestRequest::Mo useMove;1623 HitTestRequest::HitTestRequestType hitType = HitTestRequest::Move; 1624 1624 if (m_mousePressed) 1625 1625 hitType |= HitTestRequest::Active; … … 1728 1728 } 1729 1729 1730 HitTestRequest request(HitTestRequest:: MouseUp);1730 HitTestRequest request(HitTestRequest::Release); 1731 1731 MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseEvent); 1732 1732 Frame* subframe = m_capturingMouseEventsNode.get() ? subframeForTargetNode(m_capturingMouseEventsNode.get()) : subframeForHitTestResult(mev); … … 2457 2457 if (RenderView* renderer = m_frame->contentRenderer()) { 2458 2458 if (FrameView* view = m_frame->view()) { 2459 HitTestRequest request(HitTestRequest::Mo useMove);2459 HitTestRequest request(HitTestRequest::Move); 2460 2460 HitTestResult result(view->windowToContents(m_currentMousePosition)); 2461 2461 renderer->layer()->hitTest(request, result); … … 2774 2774 { 2775 2775 // Send a hit test request so that RenderLayer gets a chance to update the :hover and :active pseudoclasses. 2776 HitTestRequest request(HitTestRequest:: MouseUp);2776 HitTestRequest request(HitTestRequest::Release); 2777 2777 prepareMouseEvent(request, event); 2778 2778 … … 3233 3233 LayoutPoint pagePoint = documentPointForWindowPoint(m_frame, point.pos()); 3234 3234 3235 HitTestRequest::HitTestRequestType hitType = HitTestRequest:: Active | HitTestRequest::ReadOnly;3235 HitTestRequest::HitTestRequestType hitType = HitTestRequest::TouchEvent; 3236 3236 // The HitTestRequest types used for mouse events map quite adequately 3237 3237 // to touch events. Note that in addition to meaning that the hit test … … 3241 3241 switch (pointState) { 3242 3242 case PlatformTouchPoint::TouchPressed: 3243 hitType = HitTestRequest::Active;3243 hitType |= HitTestRequest::Active; 3244 3244 break; 3245 3245 case PlatformTouchPoint::TouchMoved: 3246 hitType = HitTestRequest::Active | HitTestRequest::MouseMove | HitTestRequest::ReadOnly;3246 hitType |= HitTestRequest::Active | HitTestRequest::Move | HitTestRequest::ReadOnly; 3247 3247 break; 3248 3248 case PlatformTouchPoint::TouchReleased: 3249 3249 case PlatformTouchPoint::TouchCancelled: 3250 hitType = HitTestRequest::MouseUp;3250 hitType |= HitTestRequest::Release; 3251 3251 break; 3252 3252 default: 3253 ASSERT_NOT_REACHED(); 3253 3254 break; 3254 3255 } … … 3275 3276 touchTarget = node; 3276 3277 } else if (pointState == PlatformTouchPoint::TouchReleased || pointState == PlatformTouchPoint::TouchCancelled) { 3278 // We only perform a hittest on release or cancel to unset :active or :hover state. 3279 hitTestResultAtPoint(pagePoint, /*allowShadowContent*/ false, false, DontHitTestScrollbars, hitType); 3277 3280 // The target should be the original target for this touch, so get it from the hashmap. As it's a release or cancel 3278 3281 // we also remove it from the map. 3279 3282 touchTarget = m_originatingTouchPointTargets.take(touchPointTargetKey); 3280 3283 } else 3284 // No hittest is performed on move, since the target is not allowed to change anyway. 3281 3285 touchTarget = m_originatingTouchPointTargets.get(touchPointTargetKey); 3282 3286 -
trunk/Source/WebCore/rendering/HitTestRequest.h
r92993 r106554 2 2 * Copyright (C) 2006 Apple Computer, Inc. 3 3 * Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ 4 * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) 4 5 * 5 6 * This library is free software; you can redistribute it and/or … … 30 31 ReadOnly = 1 << 1, 31 32 Active = 1 << 2, 32 Mo useMove = 1 << 3,33 MouseUp= 1 << 4,33 Move = 1 << 3, 34 Release = 1 << 4, 34 35 IgnoreClipping = 1 << 5, 35 SVGClipContent = 1 << 6 36 SVGClipContent = 1 << 6, 37 TouchEvent = 1 << 7 36 38 }; 37 39 … … 45 47 bool readOnly() const { return m_requestType & ReadOnly; } 46 48 bool active() const { return m_requestType & Active; } 47 bool mo useMove() const { return m_requestType & MouseMove; }48 bool mouseUp() const { return m_requestType & MouseUp; }49 bool move() const { return m_requestType & Move; } 50 bool release() const { return m_requestType & Release; } 49 51 bool ignoreClipping() const { return m_requestType & IgnoreClipping; } 50 52 bool svgClipContent() const { return m_requestType & SVGClipContent; } 53 bool touchEvent() const { return m_requestType & TouchEvent; } 54 bool mouseEvent() const { return !touchEvent(); } 55 56 // Convenience functions 57 bool touchMove() const { return move() && touchEvent(); } 58 bool touchRelease() const { return release() && touchEvent(); } 51 59 52 60 HitTestRequestType type() const { return m_requestType; } -
trunk/Source/WebCore/rendering/RenderFrameSet.cpp
r104552 r106554 168 168 169 169 if (inside && frameSet()->noResize() 170 && !request.readOnly() && !result.innerNode() ) {170 && !request.readOnly() && !result.innerNode() && !request.touchMove()) { 171 171 result.setInnerNode(node()); 172 172 result.setInnerNonSharedNode(node()); -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r106281 r106554 3105 3105 // return ourselves. We do this so mouse events continue getting delivered after a drag has 3106 3106 // exited the WebView, and so hit testing over a scrollbar hits the content document. 3107 if ((request.active() || request. mouseUp()) && renderer()->isRenderView()) {3107 if ((request.active() || request.release()) && renderer()->isRenderView()) { 3108 3108 renderer()->updateHitTestResult(result, result.point()); 3109 3109 insideLayer = this; … … 4014 4014 } else { 4015 4015 Node* newActiveNode = result.innerNode(); 4016 if (!activeNode && newActiveNode && request.active() ) {4016 if (!activeNode && newActiveNode && request.active() && !request.touchMove()) { 4017 4017 // We are setting the :active chain and freezing it. If future moves happen, they 4018 4018 // will need to reference this chain. 4019 4019 for (RenderObject* curr = newActiveNode->renderer(); curr; curr = curr->parent()) { 4020 if (curr->node() && !curr->isText()) {4020 if (curr->node() && !curr->isText()) 4021 4021 curr->node()->setInActiveChain(); 4022 }4023 4022 } 4024 4023 doc->setActiveNode(newActiveNode); … … 4032 4031 // :hover/:active to only apply to elements that are in the :active chain that we froze 4033 4032 // at the time the mouse went down. 4034 bool mustBeInActiveChain = request.active() && request.mouseMove(); 4035 4036 // Check to see if the hovered node has changed. If not, then we don't need to 4037 // do anything. 4033 bool mustBeInActiveChain = request.active() && request.move(); 4034 4038 4035 RefPtr<Node> oldHoverNode = doc->hoverNode(); 4036 // Clear the :hover chain when the touch gesture is over. 4037 if (request.touchRelease()) { 4038 if (oldHoverNode) { 4039 for (RenderObject* curr = oldHoverNode->renderer(); curr; curr = curr->parent()) { 4040 if (curr->node() && !curr->isText()) 4041 curr->node()->setHovered(false); 4042 } 4043 doc->setHoverNode(0); 4044 } 4045 // A touch release can not set new hover or active target. 4046 return; 4047 } 4048 4049 // Check to see if the hovered node has changed. 4050 // If it hasn't, we do not need to do anything. 4039 4051 Node* newHoverNode = result.innerNode(); 4040 4052 if (newHoverNode && !newHoverNode->renderer()) -
trunk/Source/WebKit/chromium/ChangeLog
r106542 r106554 1 2012-02-02 Allan Sandfeld Jensen <allan.jensen@nokia.com> 2 3 Update enum name for HitTestRequest::RequestType 4 https://bugs.webkit.org/show_bug.cgi?id=77620 5 6 Reviewed by Kenneth Rohde Christiansen. 7 8 * src/WebFrameImpl.cpp: 9 (WebKit::WebFrameImpl::visiblePositionForWindowPoint): 10 1 11 2012-02-02 Kinuko Yasuda <kinuko@chromium.org> 2 12 -
trunk/Source/WebKit/chromium/src/WebFrameImpl.cpp
r106216 r106554 1385 1385 VisiblePosition WebFrameImpl::visiblePositionForWindowPoint(const WebPoint& point) 1386 1386 { 1387 HitTestRequest::HitTestRequestType hitType = HitTestRequest::Mo useMove;1387 HitTestRequest::HitTestRequestType hitType = HitTestRequest::Move; 1388 1388 hitType |= HitTestRequest::ReadOnly; 1389 1389 hitType |= HitTestRequest::Active;
Note: See TracChangeset
for help on using the changeset viewer.