Changeset 244755 in webkit
- Timestamp:
- Apr 29, 2019 2:31:00 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 6 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r244752 r244755 1 2019-04-29 Zalan Bujtas <zalan@apple.com> 2 3 Double-tapping a post to like doesn't work on Instagram.com (needs 'dblclick' event) 4 https://bugs.webkit.org/show_bug.cgi?id=197347 5 <rdar://problem/49393423> 6 7 Reviewed by Wenson Hsieh. 8 9 * fast/events/touch/ios/double-tap-for-double-click1-expected.txt: Added. 10 * fast/events/touch/ios/double-tap-for-double-click1.html: Added. 11 * fast/events/touch/ios/double-tap-for-double-click2-expected.txt: Added. 12 * fast/events/touch/ios/double-tap-for-double-click2.html: Added. 13 1 14 2019-04-29 Javier Fernandez <jfernandez@igalia.com> 2 15 -
trunk/Source/WebCore/ChangeLog
r244752 r244755 1 2019-04-29 Zalan Bujtas <zalan@apple.com> 2 3 Double-tapping a post to like doesn't work on Instagram.com (needs 'dblclick' event) 4 https://bugs.webkit.org/show_bug.cgi?id=197347 5 <rdar://problem/49393423> 6 7 Reviewed by Wenson Hsieh. 8 9 Tests: fast/events/touch/ios/double-tap-for-double-click1.html 10 fast/events/touch/ios/double-tap-for-double-click2.html 11 12 * page/Frame.h: 13 * page/ios/FrameIOS.mm: 14 (WebCore::Frame::nodeRespondingToDoubleClickEvent): 15 1 16 2019-04-29 Youenn Fablet <youenn@apple.com> 2 17 -
trunk/Source/WebCore/page/Frame.h
r243735 r244755 220 220 WEBCORE_EXPORT Node* deepestNodeAtLocation(const FloatPoint& viewportLocation); 221 221 WEBCORE_EXPORT Node* nodeRespondingToClickEvents(const FloatPoint& viewportLocation, FloatPoint& adjustedViewportLocation, SecurityOrigin* = nullptr); 222 WEBCORE_EXPORT Node* nodeRespondingToDoubleClickEvent(const FloatPoint& viewportLocation, FloatPoint& adjustedViewportLocation); 222 223 WEBCORE_EXPORT Node* nodeRespondingToScrollWheelEvents(const FloatPoint& viewportLocation); 223 224 -
trunk/Source/WebCore/page/ios/FrameIOS.mm
r243919 r244755 419 419 } 420 420 421 Node* Frame::nodeRespondingToDoubleClickEvent(const FloatPoint& viewportLocation, FloatPoint& adjustedViewportLocation) 422 { 423 auto&& ancestorRespondingToDoubleClickEvent = [](const HitTestResult& hitTestResult, Node* terminationNode, IntRect* nodeBounds) -> Node* { 424 if (nodeBounds) 425 *nodeBounds = IntRect(); 426 427 auto* node = hitTestResult.innerNode(); 428 if (!node) 429 return nullptr; 430 431 for (; node && node != terminationNode; node = node->parentInComposedTree()) { 432 if (!node->hasEventListeners(eventNames().dblclickEvent)) 433 continue; 434 #if ENABLE(TOUCH_EVENTS) 435 if (!node->allowsDoubleTapGesture()) 436 continue; 437 #endif 438 if (nodeBounds && node->renderer()) 439 *nodeBounds = node->renderer()->absoluteBoundingBoxRect(true); 440 return node; 441 } 442 return nullptr; 443 }; 444 445 return qualifyingNodeAtViewportLocation(viewportLocation, adjustedViewportLocation, WTFMove(ancestorRespondingToDoubleClickEvent), true); 446 } 447 421 448 Node* Frame::nodeRespondingToScrollWheelEvents(const FloatPoint& viewportLocation) 422 449 { -
trunk/Source/WebKit/ChangeLog
r244754 r244755 1 2019-04-29 Zalan Bujtas <zalan@apple.com> 2 3 [iOS] Double-tapping a post to like doesn't work on Instagram.com (needs 'dblclick' event) 4 https://bugs.webkit.org/show_bug.cgi?id=197347 5 <rdar://problem/49393423> 6 7 Reviewed by Wenson Hsieh. 8 9 This patch adds support for dispatching dblclick event as the result of the double tap gesture. 10 11 1. The new double tap gesture recognizer always fires regardless of what type of action the other, existing double gesture recognizers (double-tap to zoom) trigger. 12 2. The dblclick event is dispatched on the node with registered dblclick event handler unless the node prohibits double tap gesture (touch-action != auto). 13 14 * UIProcess/WebPageProxy.h: 15 * UIProcess/ios/WKContentViewInteraction.h: 16 * UIProcess/ios/WKContentViewInteraction.mm: 17 (-[WKContentView setupInteraction]): 18 (-[WKContentView cleanupInteraction]): 19 (-[WKContentView _removeDefaultGestureRecognizers]): 20 (-[WKContentView _addDefaultGestureRecognizers]): 21 (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]): 22 (-[WKContentView gestureRecognizerShouldBegin:]): 23 (-[WKContentView _doubleTapRecognizedForDoubleClick:]): 24 * UIProcess/ios/WebPageProxyIOS.mm: 25 (WebKit::WebPageProxy::handleDoubleTapForDoubleClickAtPoint): 26 * WebProcess/WebPage/WebPage.h: 27 * WebProcess/WebPage/WebPage.messages.in: 28 * WebProcess/WebPage/ios/WebPageIOS.mm: 29 (WebKit::WebPage::handleDoubleTapForDoubleClickAtPoint): 30 1 31 2019-04-29 Tim Horton <timothy_horton@apple.com> 2 32 -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r244633 r244755 1211 1211 void handleTap(const WebCore::FloatPoint&, OptionSet<WebKit::WebEvent::Modifier>, uint64_t layerTreeTransactionIdAtLastTouchStart); 1212 1212 void didRecognizeLongPress(); 1213 void handleDoubleTapForDoubleClickAtPoint(const WebCore::IntPoint&, OptionSet<WebEvent::Modifier>, uint64_t layerTreeTransactionIdAtLastTouchStart); 1213 1214 1214 1215 void inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint&); -
trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h
r244751 r244755 222 222 RetainPtr<WKSyntheticTapGestureRecognizer> _doubleTapGestureRecognizer; 223 223 RetainPtr<UITapGestureRecognizer> _nonBlockingDoubleTapGestureRecognizer; 224 RetainPtr<UITapGestureRecognizer> _doubleTapGestureRecognizerForDoubleClick; 224 225 RetainPtr<UITapGestureRecognizer> _twoFingerDoubleTapGestureRecognizer; 225 226 RetainPtr<UITapGestureRecognizer> _twoFingerSingleTapGestureRecognizer; -
trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
r244586 r244755 735 735 [self addGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()]; 736 736 737 _doubleTapGestureRecognizerForDoubleClick = adoptNS([[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_doubleTapRecognizedForDoubleClick:)]); 738 [_doubleTapGestureRecognizerForDoubleClick setNumberOfTapsRequired:2]; 739 [_doubleTapGestureRecognizerForDoubleClick setDelegate:self]; 740 [_doubleTapGestureRecognizerForDoubleClick setEnabled:YES]; 741 [self addGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()]; 742 737 743 [self _createAndConfigureDoubleTapGestureRecognizer]; 738 744 … … 868 874 [self removeGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()]; 869 875 876 [_doubleTapGestureRecognizerForDoubleClick setDelegate:nil]; 877 [self removeGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()]; 878 870 879 [_twoFingerDoubleTapGestureRecognizer setDelegate:nil]; 871 880 [self removeGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()]; … … 941 950 [self removeGestureRecognizer:_doubleTapGestureRecognizer.get()]; 942 951 [self removeGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()]; 952 [self removeGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()]; 943 953 [self removeGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()]; 944 954 [self removeGestureRecognizer:_twoFingerSingleTapGestureRecognizer.get()]; … … 957 967 [self addGestureRecognizer:_doubleTapGestureRecognizer.get()]; 958 968 [self addGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()]; 969 [self addGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()]; 959 970 [self addGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()]; 960 971 [self addGestureRecognizer:_twoFingerSingleTapGestureRecognizer.get()]; … … 1780 1791 return YES; 1781 1792 1793 if (isSamePair(gestureRecognizer, otherGestureRecognizer, _nonBlockingDoubleTapGestureRecognizer.get(), _doubleTapGestureRecognizerForDoubleClick.get())) 1794 return YES; 1795 1796 if (isSamePair(gestureRecognizer, otherGestureRecognizer, _doubleTapGestureRecognizer.get(), _doubleTapGestureRecognizerForDoubleClick.get())) 1797 return YES; 1798 1782 1799 if (isSamePair(gestureRecognizer, otherGestureRecognizer, _highlightLongPressGestureRecognizer.get(), _previewSecondaryGestureRecognizer.get())) 1783 1800 return YES; … … 1976 1993 || gestureRecognizer == _doubleTapGestureRecognizer 1977 1994 || gestureRecognizer == _nonBlockingDoubleTapGestureRecognizer 1995 || gestureRecognizer == _doubleTapGestureRecognizerForDoubleClick 1978 1996 || gestureRecognizer == _twoFingerDoubleTapGestureRecognizer) { 1979 1997 … … 2376 2394 _lastInteractionLocation = gestureRecognizer.location; 2377 2395 _isDoubleTapPending = YES; 2396 } 2397 2398 - (void)_doubleTapRecognizedForDoubleClick:(UITapGestureRecognizer *)gestureRecognizer 2399 { 2400 _page->handleDoubleTapForDoubleClickAtPoint(WebCore::IntPoint(gestureRecognizer.location), WebKit::webEventModifierFlags(gestureRecognizerModifierFlags(gestureRecognizer)), _layerTreeTransactionIdAtLastTouchStart); 2378 2401 } 2379 2402 -
trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm
r244559 r244755 868 868 } 869 869 870 void WebPageProxy::handleDoubleTapForDoubleClickAtPoint(const WebCore::IntPoint& point, OptionSet<WebEvent::Modifier> modifiers, uint64_t layerTreeTransactionIdAtLastTouchStart) 871 { 872 process().send(Messages::WebPage::HandleDoubleTapForDoubleClickAtPoint(point, modifiers, layerTreeTransactionIdAtLastTouchStart), m_pageID); 873 } 874 870 875 void WebPageProxy::inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint& position) 871 876 { -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.h
r244717 r244755 623 623 void tapHighlightAtPosition(uint64_t requestID, const WebCore::FloatPoint&); 624 624 void didRecognizeLongPress(); 625 void handleDoubleTapForDoubleClickAtPoint(const WebCore::IntPoint&, OptionSet<WebKit::WebEvent::Modifier>, uint64_t lastLayerTreeTransactionId); 625 626 626 627 void inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint&); -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in
r244582 r244755 58 58 TapHighlightAtPosition(uint64_t requestID, WebCore::FloatPoint point) 59 59 DidRecognizeLongPress() 60 HandleDoubleTapForDoubleClickAtPoint(WebCore::IntPoint point, OptionSet<WebKit::WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId) 60 61 InspectorNodeSearchMovedToPosition(WebCore::FloatPoint point) 61 62 InspectorNodeSearchEndedAtPosition(WebCore::FloatPoint point) -
trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
r244682 r244755 723 723 } 724 724 725 void WebPage::handleDoubleTapForDoubleClickAtPoint(const IntPoint& point, OptionSet<WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId) 726 { 727 FloatPoint adjustedPoint; 728 auto* nodeRespondingToDoubleClick = m_page->mainFrame().nodeRespondingToDoubleClickEvent(point, adjustedPoint); 729 if (!nodeRespondingToDoubleClick) 730 return; 731 732 auto* frameRespondingToDoubleClick = nodeRespondingToDoubleClick->document().frame(); 733 if (!frameRespondingToDoubleClick || lastLayerTreeTransactionId < WebFrame::fromCoreFrame(*frameRespondingToDoubleClick)->firstLayerTreeTransactionIDAfterDidCommitLoad()) 734 return; 735 736 bool shiftKey = modifiers.contains(WebEvent::Modifier::ShiftKey); 737 bool ctrlKey = modifiers.contains(WebEvent::Modifier::ControlKey); 738 bool altKey = modifiers.contains(WebEvent::Modifier::AltKey); 739 bool metaKey = modifiers.contains(WebEvent::Modifier::MetaKey); 740 auto roundedAdjustedPoint = roundedIntPoint(adjustedPoint); 741 nodeRespondingToDoubleClick->document().frame()->eventHandler().handleMousePressEvent(PlatformMouseEvent(roundedAdjustedPoint, roundedAdjustedPoint, LeftButton, PlatformEvent::MousePressed, 2, shiftKey, ctrlKey, altKey, metaKey, WallTime::now(), 0, WebCore::NoTap)); 742 if (m_isClosed) 743 return; 744 nodeRespondingToDoubleClick->document().frame()->eventHandler().handleMouseReleaseEvent(PlatformMouseEvent(roundedAdjustedPoint, roundedAdjustedPoint, LeftButton, PlatformEvent::MouseReleased, 2, shiftKey, ctrlKey, altKey, metaKey, WallTime::now(), 0, WebCore::NoTap)); 745 } 746 725 747 void WebPage::requestFocusedElementInformation(WebKit::CallbackID callbackID) 726 748 {
Note: See TracChangeset
for help on using the changeset viewer.