⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 211121 in webkit


Ignore:
Timestamp:
Jan 24, 2017, 4:49:33 PM (10 years ago)
Author:
timothy_horton@apple.com
Message:

Script gets touch events even after navigation swipe begins
https://bugs.webkit.org/show_bug.cgi?id=167383
<rdar://problem/22938927>

Reviewed by Simon Fraser.

  • Platform/spi/ios/UIKitSPI.h:
  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView _isNavigationSwipeGestureRecognizer:]):

  • UIProcess/API/Cocoa/WKWebViewInternal.h:
  • UIProcess/Cocoa/ViewGestureController.h:
  • UIProcess/ios/ViewGestureControllerIOS.mm:

(-[WKSwipeTransitionController isNavigationSwipeGestureRecognizer:]):
(WebKit::ViewGestureController::isNavigationSwipeGestureRecognizer):

  • UIProcess/ios/WKContentViewInteraction.mm:

(-[WKContentView gestureRecognizer:shouldRequireFailureOfGestureRecognizer:]):
Require the navigation swipe gesture recognizer to fail before the
UIWebTouchEventsGestureRecognizer can recognize. This way, the page
doesn't get touch events during the swipe, which previously led to
e.g. carousels scrolling while swiping.

Location:
trunk/Source/WebKit2
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r211097 r211121  
     12017-01-24  Tim Horton  <timothy_horton@apple.com>
     2
     3        Script gets touch events even after navigation swipe begins
     4        https://bugs.webkit.org/show_bug.cgi?id=167383
     5        <rdar://problem/22938927>
     6
     7        Reviewed by Simon Fraser.
     8
     9        * Platform/spi/ios/UIKitSPI.h:
     10        * UIProcess/API/Cocoa/WKWebView.mm:
     11        (-[WKWebView _isNavigationSwipeGestureRecognizer:]):
     12        * UIProcess/API/Cocoa/WKWebViewInternal.h:
     13        * UIProcess/Cocoa/ViewGestureController.h:
     14        * UIProcess/ios/ViewGestureControllerIOS.mm:
     15        (-[WKSwipeTransitionController isNavigationSwipeGestureRecognizer:]):
     16        (WebKit::ViewGestureController::isNavigationSwipeGestureRecognizer):
     17        * UIProcess/ios/WKContentViewInteraction.mm:
     18        (-[WKContentView gestureRecognizer:shouldRequireFailureOfGestureRecognizer:]):
     19        Require the navigation swipe gesture recognizer to fail before the
     20        UIWebTouchEventsGestureRecognizer can recognize. This way, the page
     21        doesn't get touch events during the swipe, which previously led to
     22        e.g. carousels scrolling while swiping.
     23
    1242017-01-24  Matt Rajca  <mrajca@apple.com>
    225
  • trunk/Source/WebKit2/Platform/spi/ios/UIKitSPI.h

    r209931 r211121  
    743743@interface _UINavigationInteractiveTransitionBase ()
    744744- (id)initWithGestureRecognizerView:(UIView *)gestureRecognizerView animator:(id<UIViewControllerAnimatedTransitioning>)animator delegate:(id<_UINavigationInteractiveTransitionBaseDelegate>)delegate;
     745@property (nonatomic, weak) UIPanGestureRecognizer *gestureRecognizer;
    745746@property (nonatomic, assign) BOOL shouldReverseTranslation;
    746747@property (nonatomic, retain) _UINavigationParallaxTransition *animationController;
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm

    r211095 r211121  
    23032303{
    23042304    return _allowsBackForwardNavigationGestures;
     2305}
     2306
     2307- (BOOL)_isNavigationSwipeGestureRecognizer:(UIGestureRecognizer *)recognizer
     2308{
     2309    if (!_gestureController)
     2310        return NO;
     2311    return _gestureController->isNavigationSwipeGestureRecognizer(recognizer);
    23052312}
    23062313
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewInternal.h

    r209867 r211121  
    115115- (void)_navigationGestureDidBegin;
    116116- (void)_navigationGestureDidEnd;
     117- (BOOL)_isNavigationSwipeGestureRecognizer:(UIGestureRecognizer *)recognizer;
    117118
    118119@property (nonatomic, readonly) BOOL _isBackground;
  • trunk/Source/WebKit2/UIProcess/Cocoa/ViewGestureController.h

    r206986 r211121  
    4040
    4141#if PLATFORM(IOS)
     42OBJC_CLASS UIGestureRecognizer;
    4243OBJC_CLASS UIView;
    4344OBJC_CLASS WKSwipeTransitionController;
     
    106107    bool isPhysicallySwipingLeft(SwipeDirection) const;
    107108#else
     109    bool isNavigationSwipeGestureRecognizer(UIGestureRecognizer *) const;
    108110    void installSwipeHandler(UIView *gestureRecognizerView, UIView *swipingView);
    109111    void beginSwipeGesture(_UINavigationInteractiveTransitionBase *, SwipeDirection);
  • trunk/Source/WebKit2/UIProcess/ios/ViewGestureControllerIOS.mm

    r207709 r211121  
    130130}
    131131
     132- (BOOL)isNavigationSwipeGestureRecognizer:(UIGestureRecognizer *)recognizer
     133{
     134    return recognizer == [_backTransitionController gestureRecognizer] || recognizer == [_forwardTransitionController gestureRecognizer];
     135}
     136
    132137@end
    133138
     
    140145    [m_swipeTransitionContext _setAnimator:nil];
    141146    [m_swipeInteractiveTransitionDelegate invalidate];
     147}
     148
     149bool ViewGestureController::isNavigationSwipeGestureRecognizer(UIGestureRecognizer *recognizer) const
     150{
     151    return [m_swipeInteractiveTransitionDelegate isNavigationSwipeGestureRecognizer:recognizer];
    142152}
    143153
  • trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm

    r211095 r211121  
    11891189
    11901190    if (isSamePair(gestureRecognizer, otherGestureRecognizer, _highlightLongPressGestureRecognizer.get(), _previewGestureRecognizer.get()))
     1191        return YES;
     1192
     1193    return NO;
     1194}
     1195
     1196- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
     1197{
     1198    if (gestureRecognizer == _touchEventGestureRecognizer && [_webView _isNavigationSwipeGestureRecognizer:otherGestureRecognizer])
    11911199        return YES;
    11921200
Note: See TracChangeset for help on using the changeset viewer.