Focus surface when switching tabs

This commit is contained in:
Lawrence Chen 2026-01-23 18:25:29 -08:00
parent 00eda7f32b
commit a2087884c8

View file

@ -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 }