Title: [232164] trunk/Source/WebKit
Revision
232164
Author
megan_gard...@apple.com
Date
2018-05-24 14:03:44 -0700 (Thu, 24 May 2018)

Log Message

Fix Issues with Loupe Gesture
https://bugs.webkit.org/show_bug.cgi?id=185926

Reviewed by Tim Horton.

The loupe gesture was not giving us the correct selection in some situations.

* UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView gestureRecognizer:canBePreventedByGestureRecognizer:]):
(-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
(-[WKContentView setSelectedTextRange:]):
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::selectWithGesture):
(WebKit::WebPage::clearSelection):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (232163 => 232164)


--- trunk/Source/WebKit/ChangeLog	2018-05-24 20:54:21 UTC (rev 232163)
+++ trunk/Source/WebKit/ChangeLog	2018-05-24 21:03:44 UTC (rev 232164)
@@ -1,3 +1,21 @@
+2018-05-24  Megan Gardner  <megan_gard...@apple.com>
+
+        Fix Issues with Loupe Gesture
+        https://bugs.webkit.org/show_bug.cgi?id=185926
+
+        Reviewed by Tim Horton.
+
+        The loupe gesture was not giving us the correct selection in some situations.
+
+        * UIProcess/ios/WKContentViewInteraction.mm:
+        (-[WKContentView gestureRecognizer:canBePreventedByGestureRecognizer:]):
+        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
+        (-[WKContentView setSelectedTextRange:]):
+        * WebProcess/WebPage/WebPage.h:
+        * WebProcess/WebPage/ios/WebPageIOS.mm:
+        (WebKit::WebPage::selectWithGesture):
+        (WebKit::WebPage::clearSelection):
+
 2018-05-24  Keith Rollin  <krol...@apple.com>
 
         Don't track resource load milestones in private sessions

Modified: trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm (232163 => 232164)


--- trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm	2018-05-24 20:54:21 UTC (rev 232163)
+++ trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm	2018-05-24 21:03:44 UTC (rev 232164)
@@ -1323,6 +1323,11 @@
 #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 120000
     isForcePressGesture = (preventingGestureRecognizer == _textSelectionAssistant.get().forcePressGesture);
 #endif
+#if ENABLE(MINIMAL_SIMULATOR)
+    if ((preventingGestureRecognizer == _textSelectionAssistant.get().loupeGesture) && (preventedGestureRecognizer == _highlightLongPressGestureRecognizer || preventedGestureRecognizer == _longPressGestureRecognizer || preventedGestureRecognizer == _textSelectionAssistant.get().forcePressGesture))
+        return YES;
+#endif
+    
     if ((preventingGestureRecognizer == _textSelectionAssistant.get().loupeGesture || isForcePressGesture || [_webSelectionAssistant isSelectionGestureRecognizer:preventingGestureRecognizer]) && (preventedGestureRecognizer == _highlightLongPressGestureRecognizer || preventedGestureRecognizer == _longPressGestureRecognizer))
         return NO;
 
@@ -1347,6 +1352,10 @@
     if (isSamePair(gestureRecognizer, otherGestureRecognizer, _highlightLongPressGestureRecognizer.get(), _webSelectionAssistant.get().selectionLongPressRecognizer))
         return YES;
 #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 120000
+#if ENABLE(MINIMAL_SIMULATOR)
+    if (isSamePair(gestureRecognizer, otherGestureRecognizer, _textSelectionAssistant.get().loupeGesture, _textSelectionAssistant.get().forcePressGesture))
+        return YES;
+#endif
     if (isSamePair(gestureRecognizer, otherGestureRecognizer, _highlightLongPressGestureRecognizer.get(), _textSelectionAssistant.get().forcePressGesture))
         return YES;
 #endif
@@ -3198,8 +3207,13 @@
 
 - (void)setSelectedTextRange:(UITextRange *)range
 {
-    if (hasAssistedNode(_assistedNodeInformation) && !range)
-        [self clearSelection];
+    if (range)
+        return;
+#if !ENABLE(MINIMAL_SIMULATOR)
+    if (!hasAssistedNode(_assistedNodeInformation))
+        return;
+#endif
+    [self clearSelection];
 }
 
 - (BOOL)hasMarkedText

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (232163 => 232164)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2018-05-24 20:54:21 UTC (rev 232163)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2018-05-24 21:03:44 UTC (rev 232164)
@@ -1542,6 +1542,7 @@
 
 #if PLATFORM(IOS)
     bool m_allowsMediaDocumentInlinePlayback { false };
+    RefPtr<WebCore::Range> m_startingGestureRange;
 #endif
 
 #if ENABLE(FULLSCREEN_API)

Modified: trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm (232163 => 232164)


--- trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm	2018-05-24 20:54:21 UTC (rev 232163)
+++ trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm	2018-05-24 21:03:44 UTC (rev 232164)
@@ -1141,7 +1141,31 @@
         if (position.rootEditableElement())
             range = Range::create(*frame.document(), position, position);
         else
+#if !ENABLE(MINIMAL_SIMULATOR)
             range = wordRangeFromPosition(position);
+#else
+            switch (wkGestureState) {
+            case GestureRecognizerState::Began:
+                m_startingGestureRange = Range::create(*frame.document(), position, position);
+                break;
+            case GestureRecognizerState::Changed:
+                if (m_startingGestureRange) {
+                    if (m_startingGestureRange->startPosition() < position)
+                        range = Range::create(*frame.document(), m_startingGestureRange->startPosition(), position);
+                    else
+                        range = Range::create(*frame.document(), position, m_startingGestureRange->startPosition());
+                }
+                break;
+            case GestureRecognizerState::Ended:
+            case GestureRecognizerState::Cancelled:
+                m_startingGestureRange = nullptr;
+                break;
+            case GestureRecognizerState::Failed:
+            case GestureRecognizerState::Possible:
+                ASSERT_NOT_REACHED();
+                break;
+            }
+#endif
         break;
 
     case GestureType::TapAndAHalf:
@@ -1291,6 +1315,7 @@
 }
 
 void WebPage::clearSelection(){
+    m_startingGestureRange = nullptr;
     m_currentBlockSelection = nullptr;
     m_page->focusController().focusedOrMainFrame().selection().clear();
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to