Fix Cmd+Shift+Enter pane zoom regression in browser focus (#826)

This commit is contained in:
Lawrence Chen 2026-03-03 18:37:46 -08:00 committed by GitHub
parent fd31210ea4
commit a139c346f2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 67 additions and 7 deletions

View file

@ -991,10 +991,15 @@ func browserOmnibarShouldSubmitOnReturn(flags: NSEvent.ModifierFlags) -> Bool {
func shouldDispatchBrowserReturnViaFirstResponderKeyDown(
keyCode: UInt16,
firstResponderIsBrowser: Bool
firstResponderIsBrowser: Bool,
flags: NSEvent.ModifierFlags
) -> Bool {
guard firstResponderIsBrowser else { return false }
return keyCode == 36 || keyCode == 76
guard keyCode == 36 || keyCode == 76 else { return false }
// Keep browser Return forwarding narrow: only plain/Shift Return should be
// treated as submit-intent. Command-modified Return is reserved for app shortcuts
// like Toggle Pane Zoom (Cmd+Shift+Enter).
return browserOmnibarShouldSubmitOnReturn(flags: flags)
}
func shouldToggleMainWindowFullScreenForCommandControlFShortcut(
@ -8462,7 +8467,8 @@ private extension NSWindow {
// mark handled to avoid the AppKit alert sound path.
if shouldDispatchBrowserReturnViaFirstResponderKeyDown(
keyCode: event.keyCode,
firstResponderIsBrowser: firstResponderWebView != nil
firstResponderIsBrowser: firstResponderWebView != nil,
flags: event.modifierFlags
) {
// Forwarding keyDown can re-enter performKeyEquivalent in WebKit/AppKit internals.
// On re-entry, fall back to normal dispatch to avoid an infinite loop.

View file

@ -1988,7 +1988,8 @@ final class BrowserReturnKeyDownRoutingTests: XCTestCase {
XCTAssertTrue(
shouldDispatchBrowserReturnViaFirstResponderKeyDown(
keyCode: 36,
firstResponderIsBrowser: true
firstResponderIsBrowser: true,
flags: []
)
)
}
@ -1997,7 +1998,8 @@ final class BrowserReturnKeyDownRoutingTests: XCTestCase {
XCTAssertTrue(
shouldDispatchBrowserReturnViaFirstResponderKeyDown(
keyCode: 76,
firstResponderIsBrowser: true
firstResponderIsBrowser: true,
flags: []
)
)
}
@ -2006,7 +2008,8 @@ final class BrowserReturnKeyDownRoutingTests: XCTestCase {
XCTAssertFalse(
shouldDispatchBrowserReturnViaFirstResponderKeyDown(
keyCode: 13,
firstResponderIsBrowser: true
firstResponderIsBrowser: true,
flags: []
)
)
}
@ -2015,7 +2018,58 @@ final class BrowserReturnKeyDownRoutingTests: XCTestCase {
XCTAssertFalse(
shouldDispatchBrowserReturnViaFirstResponderKeyDown(
keyCode: 36,
firstResponderIsBrowser: false
firstResponderIsBrowser: false,
flags: []
)
)
}
func testRoutesForShiftReturnWhenBrowserFirstResponder() {
XCTAssertTrue(
shouldDispatchBrowserReturnViaFirstResponderKeyDown(
keyCode: 36,
firstResponderIsBrowser: true,
flags: [.shift]
)
)
}
func testDoesNotRouteForCommandShiftReturnWhenBrowserFirstResponder() {
XCTAssertFalse(
shouldDispatchBrowserReturnViaFirstResponderKeyDown(
keyCode: 36,
firstResponderIsBrowser: true,
flags: [.command, .shift]
)
)
}
func testDoesNotRouteForCommandReturnWhenBrowserFirstResponder() {
XCTAssertFalse(
shouldDispatchBrowserReturnViaFirstResponderKeyDown(
keyCode: 36,
firstResponderIsBrowser: true,
flags: [.command]
)
)
}
func testDoesNotRouteForOptionReturnWhenBrowserFirstResponder() {
XCTAssertFalse(
shouldDispatchBrowserReturnViaFirstResponderKeyDown(
keyCode: 36,
firstResponderIsBrowser: true,
flags: [.option]
)
)
}
func testDoesNotRouteForControlReturnWhenBrowserFirstResponder() {
XCTAssertFalse(
shouldDispatchBrowserReturnViaFirstResponderKeyDown(
keyCode: 36,
firstResponderIsBrowser: true,
flags: [.control]
)
)
}