Title: [255337] trunk
- Revision
- 255337
- Author
- [email protected]
- Date
- 2020-01-28 22:46:53 -0800 (Tue, 28 Jan 2020)
Log Message
macCatalyst: Right clicking on a link follows it immediately
https://bugs.webkit.org/show_bug.cgi?id=206919
<rdar://problem/58936679>
Reviewed by Wenson Hsieh.
Source/WebKit:
* UIProcess/ios/WKMouseGestureRecognizer.mm:
(-[WKMouseGestureRecognizer createMouseEventWithType:forEvent:]):
(-[WKMouseGestureRecognizer touchesBegan:withEvent:]):
(-[WKMouseGestureRecognizer touchesEnded:withEvent:]):
UIKit's _buttonMask does not include the currently-released button,
so in order to correctly identify the released button in touchesEnded,
store the mask for the length of the click.
Tools:
* TestWebKitAPI/Tests/WebKitCocoa/MacCatalystMouseSupport.mm:
(TEST):
Add a test ensuring that mouseup is still called with the secondary button,
even if the event's buttonmask is 0.
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (255336 => 255337)
--- trunk/Source/WebKit/ChangeLog 2020-01-29 03:17:13 UTC (rev 255336)
+++ trunk/Source/WebKit/ChangeLog 2020-01-29 06:46:53 UTC (rev 255337)
@@ -1,5 +1,21 @@
2020-01-28 Tim Horton <[email protected]>
+ macCatalyst: Right clicking on a link follows it immediately
+ https://bugs.webkit.org/show_bug.cgi?id=206919
+ <rdar://problem/58936679>
+
+ Reviewed by Wenson Hsieh.
+
+ * UIProcess/ios/WKMouseGestureRecognizer.mm:
+ (-[WKMouseGestureRecognizer createMouseEventWithType:forEvent:]):
+ (-[WKMouseGestureRecognizer touchesBegan:withEvent:]):
+ (-[WKMouseGestureRecognizer touchesEnded:withEvent:]):
+ UIKit's _buttonMask does not include the currently-released button,
+ so in order to correctly identify the released button in touchesEnded,
+ store the mask for the length of the click.
+
+2020-01-28 Tim Horton <[email protected]>
+
macCatalyst: Triple clicking to select a sentence results in an empty selection
https://bugs.webkit.org/show_bug.cgi?id=206863
<rdar://problem/58776993>
Modified: trunk/Source/WebKit/UIProcess/ios/WKMouseGestureRecognizer.mm (255336 => 255337)
--- trunk/Source/WebKit/UIProcess/ios/WKMouseGestureRecognizer.mm 2020-01-29 03:17:13 UTC (rev 255336)
+++ trunk/Source/WebKit/UIProcess/ios/WKMouseGestureRecognizer.mm 2020-01-29 06:46:53 UTC (rev 255337)
@@ -56,6 +56,7 @@
std::unique_ptr<WebKit::NativeWebMouseEvent> _lastEvent;
Optional<CGPoint> _lastLocation;
+ Optional<UIEventButtonMask> _pressedButtonMask;
}
- (instancetype)initWithTarget:(id)target action:(SEL)action
@@ -119,10 +120,10 @@
return NO;
}
-- (std::unique_ptr<WebKit::NativeWebMouseEvent>)createMouseEventWithType:(WebKit::WebEvent::Type)type forEvent:(UIEvent *)uiEvent
+- (std::unique_ptr<WebKit::NativeWebMouseEvent>)createMouseEventWithType:(WebKit::WebEvent::Type)type
{
auto modifiers = webEventModifiersForUIKeyModifierFlags(self.modifierFlags);
- BOOL isRightButton = modifiers.contains(WebKit::WebEvent::Modifier::ControlKey) || ([uiEvent _buttonMask] & UIEventButtonMaskSecondary);
+ BOOL isRightButton = modifiers.contains(WebKit::WebEvent::Modifier::ControlKey) || (_pressedButtonMask && (*_pressedButtonMask & UIEventButtonMaskSecondary));
auto button = [&] {
if (!_touching)
@@ -151,8 +152,9 @@
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
_touching = YES;
+ _pressedButtonMask = [event _buttonMask];
- _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseDown forEvent:event];
+ _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseDown];
_lastLocation = [self locationInView:self.view];
self.state = UIGestureRecognizerStateChanged;
@@ -160,7 +162,7 @@
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
- _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseMove forEvent:event];
+ _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseMove];
_lastLocation = [self locationInView:self.view];
self.state = UIGestureRecognizerStateChanged;
@@ -168,10 +170,11 @@
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
- _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseUp forEvent:event];
+ _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseU];
_lastLocation = [self locationInView:self.view];
_touching = NO;
+ _pressedButtonMask = WTF::nullopt;
self.state = UIGestureRecognizerStateChanged;
}
@@ -183,7 +186,7 @@
- (void)_hoverEntered:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
- _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseMove forEvent:event];
+ _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseMove];
if (_currentHoverEvent == nil && touches.count == 1 && [event isKindOfClass:NSClassFromString(@"UIHoverEvent")]) {
_currentHoverEvent = (UIHoverEvent *)event;
@@ -202,7 +205,7 @@
return;
}
- _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseMove forEvent:event];
+ _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseMove];
_lastLocation = [self locationInView:self.view];
if (_currentHoverEvent == event && [touches containsObject:_currentTouch.get()])
@@ -213,7 +216,7 @@
- (void)_hoverExited:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
- _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseMove forEvent:event];
+ _lastEvent = [self createMouseEventWithType:WebKit::WebEvent::MouseMove];
_lastLocation = [self locationInView:self.view];
if (_currentHoverEvent == event) {
Modified: trunk/Tools/ChangeLog (255336 => 255337)
--- trunk/Tools/ChangeLog 2020-01-29 03:17:13 UTC (rev 255336)
+++ trunk/Tools/ChangeLog 2020-01-29 06:46:53 UTC (rev 255337)
@@ -1,3 +1,16 @@
+2020-01-28 Tim Horton <[email protected]>
+
+ macCatalyst: Right clicking on a link follows it immediately
+ https://bugs.webkit.org/show_bug.cgi?id=206919
+ <rdar://problem/58936679>
+
+ Reviewed by Wenson Hsieh.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/MacCatalystMouseSupport.mm:
+ (TEST):
+ Add a test ensuring that mouseup is still called with the secondary button,
+ even if the event's buttonmask is 0.
+
2020-01-28 Jonathan Bedard <[email protected]>
TestWebKitAPI: Conditionalize device orientation tests on ENABLE(DEVICE_ORIENTATION)
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/MacCatalystMouseSupport.mm (255336 => 255337)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/MacCatalystMouseSupport.mm 2020-01-29 03:17:13 UTC (rev 255336)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/MacCatalystMouseSupport.mm 2020-01-29 06:46:53 UTC (rev 255337)
@@ -141,4 +141,46 @@
TestWebKitAPI::Util::run(&done);
}
+TEST(MacCatalystMouseSupport, TrackButtonMaskFromTouchStart)
+{
+ auto webViewConfiguration = adoptNS([[WKWebViewConfiguration alloc] init]);
+ auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:webViewConfiguration.get()]);
+ [webView synchronouslyLoadHTMLString:@"<script>"
+ "window.didReleaseRightButton = false;"
+ "document.documentElement.addEventListener('mouseup', function (e) {"
+ " if (e.button == 2)"
+ " window.didReleaseRightButton = true;"
+ "});"
+ "</script>"];
+
+ auto contentView = [webView wkContentView];
+ auto gesture = mouseGesture(contentView);
+
+ RetainPtr<WKTestingTouch> touch = adoptNS([[WKTestingTouch alloc] init]);
+ RetainPtr<NSSet> touchSet = [NSSet setWithObject:touch.get()];
+
+ RetainPtr<WKTestingEvent> event = adoptNS([[WKTestingEvent alloc] init]);
+
+ [gesture _hoverEntered:touchSet.get() withEvent:event.get()];
+ [contentView _mouseGestureRecognizerChanged:gesture];
+ [touch setTapCount:1];
+ [event _setButtonMask:UIEventButtonMaskSecondary];
+ [gesture touchesBegan:touchSet.get() withEvent:event.get()];
+ [contentView _mouseGestureRecognizerChanged:gesture];
+ [event _setButtonMask:0];
+ [gesture touchesEnded:touchSet.get() withEvent:event.get()];
+ [contentView _mouseGestureRecognizerChanged:gesture];
+
+ __block bool done = false;
+
+ [webView _doAfterProcessingAllPendingMouseEvents:^{
+ NSNumber *result = [webView objectByEvaluatingJavaScript:@"window.didReleaseRightButton"];
+ EXPECT_TRUE([result boolValue]);
+ done = true;
+ }];
+
+ TestWebKitAPI::Util::run(&done);
+}
+
+
#endif // PLATFORM(MACCATALYST)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes