diff --git a/Sources/TabManager.swift b/Sources/TabManager.swift index bfc1bda9..d8ce1cbd 100644 --- a/Sources/TabManager.swift +++ b/Sources/TabManager.swift @@ -214,7 +214,15 @@ class Tab: Identifiable, ObservableObject { class TabManager: ObservableObject { @Published var tabs: [Tab] = [] - @Published var selectedTabId: UUID? + @Published var selectedTabId: UUID? { + didSet { + guard selectedTabId != oldValue else { return } + let previousTabId = oldValue + DispatchQueue.main.async { [weak self] in + self?.focusSelectedTabSurface(previousTabId: previousTabId) + } + } + } private var observers: [NSObjectProtocol] = [] init() { @@ -315,6 +323,16 @@ class TabManager: ObservableObject { surface.applyWindowBackgroundIfActive() } + private func focusSelectedTabSurface(previousTabId: UUID?) { + guard let selectedTabId, + let tab = tabs.first(where: { $0.id == selectedTabId }), + let surface = tab.focusedSurface else { return } + let previousSurface = previousTabId.flatMap { id in + tabs.first(where: { $0.id == id })?.focusedSurface + } + surface.hostedView.moveFocus(from: previousSurface?.hostedView) + } + private func updateTabTitle(tabId: UUID, title: String) { guard !title.isEmpty else { return } guard let index = tabs.firstIndex(where: { $0.id == tabId }) else { return }