Changeset 244775 in webkit
- Timestamp:
- Apr 30, 2019 9:07:48 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 6 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r244774 r244775 1 2019-04-30 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-30 Youenn Fablet <youenn@apple.com> 2 15 -
trunk/Source/WebCore/ChangeLog
r244774 r244775 1 2019-04-30 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-30 Youenn Fablet <youenn@apple.com> 2 17 -
trunk/Source/WebCore/page/Frame.h
r244762 r244775 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
r244762 r244775 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
r244772 r244775 1 2019-04-30 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-30 Antti Koivisto <antti@apple.com> 2 32 -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r244762 r244775 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
r244762 r244775 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
r244762 r244775 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, _singleTapGestureRecognizer.get(), _doubleTapGestureRecognizerForDoubleClick.get())) 1794 return YES; 1795 1796 if (isSamePair(gestureRecognizer, otherGestureRecognizer, _nonBlockingDoubleTapGestureRecognizer.get(), _doubleTapGestureRecognizerForDoubleClick.get())) 1797 return YES; 1798 1799 if (isSamePair(gestureRecognizer, otherGestureRecognizer, _doubleTapGestureRecognizer.get(), _doubleTapGestureRecognizerForDoubleClick.get())) 1800 return YES; 1801 1782 1802 if (isSamePair(gestureRecognizer, otherGestureRecognizer, _highlightLongPressGestureRecognizer.get(), _previewSecondaryGestureRecognizer.get())) 1783 1803 return YES; … … 1976 1996 || gestureRecognizer == _doubleTapGestureRecognizer 1977 1997 || gestureRecognizer == _nonBlockingDoubleTapGestureRecognizer 1998 || gestureRecognizer == _doubleTapGestureRecognizerForDoubleClick 1978 1999 || gestureRecognizer == _twoFingerDoubleTapGestureRecognizer) { 1979 2000 … … 2376 2397 _lastInteractionLocation = gestureRecognizer.location; 2377 2398 _isDoubleTapPending = YES; 2399 } 2400 2401 - (void)_doubleTapRecognizedForDoubleClick:(UITapGestureRecognizer *)gestureRecognizer 2402 { 2403 _page->handleDoubleTapForDoubleClickAtPoint(WebCore::IntPoint(gestureRecognizer.location), WebKit::webEventModifierFlags(gestureRecognizerModifierFlags(gestureRecognizer)), _layerTreeTransactionIdAtLastTouchStart); 2378 2404 } 2379 2405 -
trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm
r244762 r244775 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
r244762 r244775 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
r244762 r244775 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
r244762 r244775 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.