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