@@ -510,27 +510,40 @@ struct BrowserPanelView: View {
510510 guard let webView = note. object as? CmuxWebView else { return false }
511511 return webView === panel? . webView
512512 } ) { _ in
513+ let shouldDismissOmnibar = browserWebViewClickShouldDismissOmnibar (
514+ localAddressBarFocused: addressBarFocused,
515+ focusedAddressBarPanelId: AppDelegate . shared? . focusedBrowserAddressBarPanelId ( ) ,
516+ pendingAddressBarFocusRequestId: panel. pendingAddressBarFocusRequestId,
517+ panelId: panel. id
518+ )
519+ let shouldPromoteWebViewFocus = browserWebViewClickShouldPromoteWebViewFocus (
520+ isPanelFocused: isFocused,
521+ shouldDismissOmnibar: shouldDismissOmnibar
522+ )
513523#if DEBUG
514524 dlog (
515525 " browser.focus.clickIntent panel= \( panel. id. uuidString. prefix ( 5 ) ) " +
516526 " isFocused= \( isFocused ? 1 : 0 ) " +
517- " addressFocused= \( addressBarFocused ? 1 : 0 ) "
527+ " addressFocused= \( addressBarFocused ? 1 : 0 ) " +
528+ " dismissOmnibar= \( shouldDismissOmnibar ? 1 : 0 ) " +
529+ " promoteWeb= \( shouldPromoteWebViewFocus ? 1 : 0 ) "
518530 )
519531#endif
520- if addressBarFocused {
532+ if shouldDismissOmnibar {
521533#if DEBUG
522534 logBrowserFocusState ( event: " addressBarFocus.webViewClickBlur " )
523535#endif
524536 NotificationCenter . default. post (
525537 name: . browserWillBlurAddressBarForWebViewClick,
526538 object: panel. id
527539 )
540+ }
541+ if shouldPromoteWebViewFocus {
528542 panel. prepareForExplicitWebViewFocus (
529- isPanelFocused: isFocused ,
543+ isPanelFocused: true ,
530544 reason: " webView.clickIntent "
531545 )
532- if isFocused,
533- let window = panel. webView. window,
546+ if let window = panel. webView. window,
534547 !panel. webView. isHiddenOrHasHiddenAncestor {
535548 let focusedWebView = window. makeFirstResponder ( panel. webView)
536549 if focusedWebView {
@@ -543,6 +556,8 @@ struct BrowserPanelView: View {
543556 )
544557#endif
545558 }
559+ }
560+ if shouldDismissOmnibar {
546561 setAddressBarFocused ( false , reason: " webView.clickIntent " )
547562 }
548563 if !isFocused {
@@ -3198,6 +3213,24 @@ func browserOmnibarShouldReacquireFocusAfterEndEditing(
31983213 desiredOmnibarFocus && !nextResponderIsOtherTextField && !explicitPointerBlurIntent
31993214}
32003215
3216+ func browserWebViewClickShouldDismissOmnibar(
3217+ localAddressBarFocused: Bool ,
3218+ focusedAddressBarPanelId: UUID ? ,
3219+ pendingAddressBarFocusRequestId: UUID ? ,
3220+ panelId: UUID
3221+ ) -> Bool {
3222+ localAddressBarFocused ||
3223+ focusedAddressBarPanelId == panelId ||
3224+ pendingAddressBarFocusRequestId != nil
3225+ }
3226+
3227+ func browserWebViewClickShouldPromoteWebViewFocus(
3228+ isPanelFocused: Bool ,
3229+ shouldDismissOmnibar: Bool
3230+ ) -> Bool {
3231+ isPanelFocused || shouldDismissOmnibar
3232+ }
3233+
32013234private final class OmnibarNativeTextField : NSTextField {
32023235 var onPointerDown : ( ( ) -> Void ) ?
32033236 var onHandleKeyEvent : ( ( NSEvent , NSTextView ? ) -> Bool ) ?
0 commit comments