From 72093f964864ce7321133f2d81042194dac681cd Mon Sep 17 00:00:00 2001 From: chernomortsev evgeny Date: Thu, 12 Mar 2026 21:56:14 +0300 Subject: [PATCH] fix: disable macOS focus ring on chat input TextField (#905) (#1045) Co-authored-by: jack <212554440+jackjackbits@users.noreply.github.com> --- bitchat/Views/ContentView.swift | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/bitchat/Views/ContentView.swift b/bitchat/Views/ContentView.swift index a91f2814..491a9da2 100644 --- a/bitchat/Views/ContentView.swift +++ b/bitchat/Views/ContentView.swift @@ -27,6 +27,22 @@ private struct MessageDisplayItem: Identifiable { let message: BitchatMessage } +/// On macOS 14+, disables the default system focus ring on TextFields. +/// On earlier macOS versions and on iOS this is a no-op. +private struct FocusEffectDisabledModifier: ViewModifier { + func body(content: Content) -> some View { + #if os(macOS) + if #available(macOS 14.0, *) { + content.focusEffectDisabled() + } else { + content + } + #else + content + #endif + } +} + // MARK: - Main Content View struct ContentView: View { @@ -643,6 +659,7 @@ struct ContentView: View { RoundedRectangle(cornerRadius: 14, style: .continuous) .fill(colorScheme == .dark ? Color.black.opacity(0.35) : Color.white.opacity(0.7)) ) + .modifier(FocusEffectDisabledModifier()) .frame(maxWidth: .infinity, alignment: .leading) .onChange(of: messageText) { newValue in autocompleteDebounceTimer?.invalidate() @@ -1243,6 +1260,7 @@ struct ContentView: View { #if os(iOS) .textInputAutocapitalization(.never) #endif + .modifier(FocusEffectDisabledModifier()) .onChange(of: isNicknameFieldFocused) { isFocused in if !isFocused { // Only validate when losing focus