[webkit-changes] [WebKit/WebKit] 2b9a29: REGRESSION (266610 at main): Catalyst WKWebView does ...

Wenson Hsieh noreply at github.com
Wed Jan 10 19:51:06 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 2b9a29c2569d82a81a7e2f23ab45e9ac52a78b3e
      https://github.com/WebKit/WebKit/commit/2b9a29c2569d82a81a7e2f23ab45e9ac52a78b3e
  Author: Wenson Hsieh <wenson_hsieh at apple.com>
  Date:   2024-01-10 (Wed, 10 Jan 2024)

  Changed paths:
    M Source/WebKit/UIProcess/ios/WKMouseInteraction.mm

  Log Message:
  -----------
  REGRESSION (266610 at main): Catalyst WKWebView does not dispatch `contextmenu` on right click
https://bugs.webkit.org/show_bug.cgi?id=267361
rdar://119634050

Reviewed by Megan Gardner and Tim Horton.

After my refactoring in 266610 at main, we no longer dispatch `contextmenu` events when right clicking
in Mac Catalyst `WKWebView`. This is because UIKit's gesture environment skips over the new
`WKMouseTouchGestureRecognizer` when delivering events to all gesture recognizers on the window,
which in turn means that `-[WKMouseTouchGestureRecognizer touchesBegan:withEvent:]` never gets
triggered and we don't dispatch any mouse (or context menu) events to the page.

This is due to UIKit having a Catalyst-specific codepath that returns `NO` in the case where the
pointer is not the primary button. Previously, we avoided this by overriding
`-_shouldReceiveTouch:forEvent:recognizerView:` and returning `YES` in the case of pointer touches.
Since the new `WKMouseTouchGestureRecognizer` doesn't use any SPI or IPI, this bypass no longer
works.

To address this, simply override the IPI method `-_defaultAllowedMouseButtons` to return both
primary and secondary mouse buttons to restore shipping behavior.

* Source/WebKit/UIProcess/ios/WKMouseInteraction.mm:
(-[WKMouseTouchGestureRecognizer _defaultAllowedMouseButtons]):

Canonical link: https://commits.webkit.org/272883@main




More information about the webkit-changes mailing list